AlignDB-Stopwatch
view release on metacpan or search on metacpan
lib/AlignDB/Stopwatch.pm view on Meta::CPAN
package AlignDB::Stopwatch;
use Moose;
use Time::Duration;
use Data::UUID;
use File::Spec;
use YAML::Syck;
our $VERSION = '1.1.0';
has program_name => ( is => 'ro', isa => 'Str' );
has program_argv => ( is => 'ro', isa => 'ArrayRef', default => sub { [] } );
has program_conf => ( is => 'ro', isa => 'Object' );
has 'start_time' => ( is => 'rw', isa => 'Value' );
has 'div_char' => ( is => 'rw', isa => 'Str', default => sub {"="}, );
has 'div_length' => ( is => 'rw', isa => 'Int', default => sub {30}, );
has 'min_div_length' => ( is => 'rw', isa => 'Int', default => sub {5} );
has uuid => ( is => 'ro', isa => 'Str' );
sub BUILD {
my $self = shift;
$self->{start_time} = time;
$self->{uuid} = Data::UUID->new->create_str;
return;
}
#@returns AlignDB::Stopwatch
sub record {
my $self = shift;
$self->{program_name} = $main::0;
$self->{program_argv} = [@main::ARGV];
return $self;
}
#@returns AlignDB::Stopwatch
sub record_conf {
my $self = shift;
my $conf = shift;
$self->{program_conf} = $conf;
return $self;
}
sub _divider {
my $self = shift;
my $title = shift;
my $title_length = $title ? length $title : 0;
my $div_char = $self->div_char;
my $div_length = $self->div_length;
my $min_div_length = $self->min_div_length;
my $divider_str;
if ( !$title_length ) {
$divider_str .= $div_char x $div_length;
$divider_str .= "\n";
}
elsif ( $title_length > $div_length - 2 * $min_div_length ) {
$divider_str .= $div_char x $min_div_length;
$divider_str .= $title;
$divider_str .= $div_char x $min_div_length;
$divider_str .= "\n";
}
else {
( run in 0.770 second using v1.01-cache-2.11-cpan-524268b4103 )