AlignDB-Stopwatch
view release on metacpan or search on metacpan
lib/AlignDB/Stopwatch.pm view on Meta::CPAN
$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 {
my $left_length = int( ( $div_length - $title_length ) / 2 );
my $right_length = $div_length - $title_length - $left_length;
$divider_str .= $div_char x $left_length;
$divider_str .= $title;
$divider_str .= $div_char x $right_length;
$divider_str .= "\n";
}
return $divider_str;
}
sub _prompt {
my $self = shift;
return "==> ";
}
sub _empty_line {
my $self = shift;
return "\n";
}
sub _time {
my $self = shift;
my $title = shift;
my $time_str;
if ( !defined $title ) {
$time_str .= "Current time: ";
}
elsif ( $title =~ /start/i ) {
$time_str .= "Start at: ";
}
elsif ( $title =~ /end/i ) {
$time_str .= "End at: ";
}
else {
$time_str .= "$title: ";
}
$time_str .= scalar localtime;
$time_str .= "\n";
return $time_str;
}
sub _duration {
my $self = shift;
return "Runtime " . $self->duration_now . ".\n";
}
sub _message {
my $self = shift;
my $message = shift;
$message = '' unless defined $message;
return $message . "\n";
}
sub duration_now {
my $self = shift;
return Time::Duration::duration( time - $self->start_time );
}
sub block_message {
my $self = shift;
my $message = shift;
my $with_duration = shift;
my $text;
$text .= $self->_empty_line;
$text .= $self->_prompt;
$text .= $self->_message($message);
if ($with_duration) {
$text .= $self->_prompt;
$text .= $self->_duration;
}
$text .= $self->_empty_line;
print $text;
return;
}
sub start_message {
my $self = shift;
my $message = shift;
my $embed_in_divider = shift;
my $text;
if ( defined $message ) {
if ( defined $embed_in_divider ) {
$text .= $self->_divider($message);
}
else {
$text .= $self->_divider;
$text .= $self->_message($message);
}
}
else {
$text .= $self->_divider;
}
$text .= $self->_time("start");
$text .= $self->_empty_line;
print $text;
return;
}
sub end_message {
my $self = shift;
my $message = shift;
my $text;
$text .= $self->_empty_line;
if ( defined $message ) {
$text .= $self->_message($message);
}
$text .= $self->_time("end");
$text .= $self->_duration;
$text .= $self->_divider;
print $text;
return;
}
sub cmd_line {
my $self = shift;
return join( ' ', $self->program_name, @{ $self->program_argv } );
}
sub init_config {
( run in 2.307 seconds using v1.01-cache-2.11-cpan-6aa56a78535 )