[monitoring-plugins] check_uptime: Add option to report uptime in days ...

Sven Nierlein git at monitoring-plugins.org
Tue Feb 15 16:10:10 CET 2022


    Module: monitoring-plugins
    Branch: master
    Commit: c99a166a43fb9da42ba68073224921124a435aab
    Author: Andreas Motl <andreas.motl at elmyra.de>
 Committer: Sven Nierlein <sven at nierlein.org>
      Date: Sat Feb 12 14:41:54 2022 +0100
       URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=c99a166

check_uptime: Add option to report uptime in days instead of seconds

Currently, the plugin output is:

  CRITICAL: Uptime is 38829029 seconds.

When using the proposed `--days|-d` option, it will be:

  CRITICAL: Uptime is 449 days.

---

 plugins-scripts/check_uptime.pl  | 17 +++++++++++++++--
 plugins-scripts/t/check_uptime.t |  8 +++++++-
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/plugins-scripts/check_uptime.pl b/plugins-scripts/check_uptime.pl
index 4c9f22d..04324b2 100755
--- a/plugins-scripts/check_uptime.pl
+++ b/plugins-scripts/check_uptime.pl
@@ -25,7 +25,7 @@ use POSIX;
 use strict;
 use Getopt::Long;
 use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c
-					$opt_f $opt_s
+					$opt_f $opt_s $opt_d
 					$lower_warn_threshold $upper_warn_threshold
 					$lower_crit_threshold $upper_crit_threshold
 					$status $state $msg);
@@ -137,9 +137,20 @@ if ( $uptime_seconds > $upper_crit_threshold ) {
 	$state_str = "OK";
 }
 
+# Prepare uptime value (seconds or days)
+my $uptime_text = "";
+my $uptime_unit = "";
+if ( $opt_d ) {
+	$uptime_text = floor($uptime_seconds / 60 / 60 / 24);
+	$uptime_unit = "days";
+} else {
+	$uptime_text = $uptime_seconds;
+	$uptime_unit = "seconds";
+}
+
 $msg = "$state_str: ";
 
-$msg .= "uptime is $uptime_seconds seconds. ";
+$msg .= "uptime is $uptime_text $uptime_unit. ";
 $msg .= "Exceeds $out_of_bounds_text threshold. "  if  $out_of_bounds_text;
 $msg .= "Running for $pretty_uptime. "  if  $opt_f;
 if ( $opt_s ) {
@@ -167,6 +178,7 @@ sub process_arguments(){
 		 "c=s" => \$opt_c, "critical=s" => \$opt_c,	  # critical if above this number
 		 "f"   => \$opt_f, "for"        => \$opt_f,	  # show "running for ..."
 		 "s"   => \$opt_s, "since"      => \$opt_s,	  # show "running since ..."
+		 "d"   => \$opt_d, "days"       => \$opt_d,	  # report uptime in days
 		 );
 
 	if ($opt_V) {
@@ -262,6 +274,7 @@ sub print_help () {
 	print "-c (--critical)  = Min. number of uptime to generate critical alert ( w < c )\n";
 	print "-f (--for)       = Show uptime in a pretty format (Running for x weeks, x days, ...)\n";
 	print "-s (--since)     = Show last boot in yyyy-mm-dd HH:MM:SS format (output from 'uptime -s')\n";
+	print "-d (--days)      = Show uptime in days\n";
 	print "-h (--help)\n";
 	print "-V (--version)\n";
 	print "-v (--verbose)   = debugging output\n";
diff --git a/plugins-scripts/t/check_uptime.t b/plugins-scripts/t/check_uptime.t
index c395307..b31d0c6 100644
--- a/plugins-scripts/t/check_uptime.t
+++ b/plugins-scripts/t/check_uptime.t
@@ -5,7 +5,7 @@
 #
 
 use strict;
-use Test::More tests => 40;
+use Test::More tests => 42;
 use NPTest;
 
 my $result;
@@ -46,6 +46,12 @@ cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" );
 like  ( $result->output, '/Running since \d+/', "Output for the s parameter correct" );
 
 $result = NPTest->testCmd(
+	"./check_uptime -d -w 1 -c 2"
+	);
+cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" );
+like  ( $result->output, '/CRITICAL: uptime is \d+ days/', "Output for the d parameter correct" );
+
+$result = NPTest->testCmd(
 	"./check_uptime -w 1 -c 2"
 	);
 cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" );



More information about the Commits mailing list