diff options
author | Greg Sabino Mullane | 2008-10-26 02:43:00 +0000 |
---|---|---|
committer | Greg Sabino Mullane | 2008-10-26 02:43:00 +0000 |
commit | 9651668919c50c84d251f33705c01c40f7639d14 (patch) | |
tree | c5244c375bb1c1624a0b34dfb176e46304015be2 | |
parent | 800c4d5c45d963801e7953bede1960a9c2b7120b (diff) |
Add internal pretty_time() function: use for seconds output in last vac and analyze actions.
-rwxr-xr-x | check_postgres.pl | 82 |
1 files changed, 79 insertions, 3 deletions
diff --git a/check_postgres.pl b/check_postgres.pl index 798292868..023d4ec87 100755 --- a/check_postgres.pl +++ b/check_postgres.pl @@ -28,7 +28,7 @@ $Data::Dumper::Varname = 'POSTGRES'; $Data::Dumper::Indent = 2; $Data::Dumper::Useqq = 1; -our $VERSION = '2.3.10'; +our $VERSION = '2.3.11'; use vars qw/ %opt $PSQL $res $COM $SQL $db /; @@ -791,6 +791,76 @@ sub pretty_size { } ## end of pretty_size +sub pretty_time { + + ## Transform number of seconds to a more human-readable format + ## First argument is number of seconds + ## Second optional arg is highest transform: s,m,h,d,w + ## If uppercase, it indicates to "round that one out" + + my $sec = shift; + my $tweak = shift || ''; + + ## Just seconds (< 2:00) + if ($sec < 120 or $tweak =~ /s/) { + return sprintf "$sec %s", $sec==1 ? 'second' : 'seconds'; + } + + ## Minutes and seconds (< 60:00) + if ($sec < 60*60 or $tweak =~ /m/) { + my $min = int $sec / 60; + $sec %= 60; + my $ret = sprintf "$min %s", $min==1 ? 'minute' : 'minutes'; + $sec and $tweak !~ /S/ and $ret .= sprintf " $sec %s", $sec==1 ? 'second' : 'seconds'; + return $ret; + } + + ## Hours, minutes, and seconds (< 48:00:00) + if ($sec < 60*60*24*2 or $tweak =~ /h/) { + my $hour = int $sec / (60*60); + $sec -= ($hour*60*60); + my $min = int $sec / 60; + $sec -= ($min*60); + my $ret = sprintf "$hour %s", $hour==1 ? 'hour' : 'hours'; + $min and $tweak !~ /M/ and $ret .= sprintf " $min %s", $min==1 ? 'minute' : 'minutes'; + $sec and $tweak !~ /[SM]/ and $ret .= sprintf " $sec %s", $sec==1 ? 'second' : 'seconds'; + return $ret; + } + + ## Days, hours, minutes, and seconds (< 28 days) + if ($sec < 60*60*24*28 or $tweak =~ /d/) { + my $day = int $sec / (60*60*24); + $sec -= ($day*60*60*24); + my $our = int $sec / (60*60); + $sec -= ($our*60*60); + my $min = int $sec / 60; + $sec -= ($min*60); + my $ret = sprintf "$day %s", $day==1 ? 'day' : 'days'; + $our and $tweak !~ /H/ and $ret .= sprintf " $our %s", $our==1 ? 'hour' : 'hours'; + $min and $tweak !~ /[HM]/ and $ret .= sprintf " $min %s", $min==1 ? 'minute' : 'minutes'; + $sec and $tweak !~ /[HMS]/ and $ret .= sprintf " $sec %s", $sec==1 ? 'second' : 'seconds'; + return $ret; + } + + ## Weeks, days, hours, minutes, and seconds (< 28 days) + my $week = int $sec / (60*60*24*7); + $sec -= ($week*60*60*24*7); + my $day = int $sec / (60*60*24); + $sec -= ($day*60*60*24); + my $our = int $sec / (60*60); + $sec -= ($our*60*60); + my $min = int $sec / 60; + $sec -= ($min*60); + my $ret = sprintf "$week %s", $week==1 ? 'week' : 'weeks'; + $day and $tweak !~ /D/ and $ret .= sprintf " $day %s", $day==1 ? 'day' : 'days'; + $our and $tweak !~ /[DH]/ and $ret .= sprintf " $our %s", $our==1 ? 'hour' : 'hours'; + $min and $tweak !~ /[DHM]/ and $ret .= sprintf " $min %s", $min==1 ? 'minute' : 'minutes'; + $sec and $tweak !~ /[DHMS]/ and $ret .= sprintf " $sec %s", $sec==1 ? 'second' : 'seconds'; + return $ret; + +} ## end of pretty_time + + sub run_command { ## Run a command string against each of our databases using psql @@ -2394,6 +2464,7 @@ sub check_relation_size { return; } ## end of check_relations_size + sub check_table_size { return check_relation_size('table'); } @@ -2485,7 +2556,8 @@ sub check_last_vacuum_analyze { $type eq 'vacuum' ? 'ed' : 'd'; } else { - my $msg = "$maxrel: $maxptime ($maxtime s)"; + my $showtime = pretty_time($maxtime, 'S'); + my $msg = "$maxrel: $maxptime ($showtime)"; if ($critical and $maxtime >= $critical) { add_critical $msg; } @@ -3600,7 +3672,7 @@ sub check_sequence { =head1 NAME B<check_postgres.pl> - a Postgres monitoring script for Nagios, MRTG, and others -This documents describes check_postgres.pl version 2.3.10 +This documents describes check_postgres.pl version 2.3.11 =head1 SYNOPSIS @@ -4744,6 +4816,10 @@ Items not specifically attributed are by Greg Sabino Mullane. =over 4 +=item B<Version 2.3.11> + + Pretty up the time output for last vacuum and analyze actions. + =item B<Version 2.3.10> Fix minor warning in action check_bloat with multiple databases. |