SF.net SVN: nagiosplug: [1772] Nagios-Plugin/trunk

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
Revision: 1772
          http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=1772&view=rev
Author:   tonvoon
Date:     2007-08-31 06:21:10 -0700 (Fri, 31 Aug 2007)

Log Message:
-----------
Fixed bug where warn or crit = 0 will raise an error. Optional flag to
tell nagios_die to use die instead of exit so trappable by eval

Modified Paths:
--------------
    Nagios-Plugin/trunk/Changes
    Nagios-Plugin/trunk/lib/Nagios/Plugin/Functions.pm
    Nagios-Plugin/trunk/lib/Nagios/Plugin/Threshold.pm
    Nagios-Plugin/trunk/lib/Nagios/Plugin.pm
    Nagios-Plugin/trunk/t/Nagios-Plugin-Functions-01.t
    Nagios-Plugin/trunk/t/Nagios-Plugin-Performance.t

Modified: Nagios-Plugin/trunk/Changes
===================================================================
--- Nagios-Plugin/trunk/Changes	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/Changes	2007-08-31 13:21:10 UTC (rev 1772)
@@ -1,5 +1,10 @@
 Revision history for Perl module Nagios::Plugin.
 
+0.18 ??
+  - Fix error when parsing performance data where warn or crit are 0
+  - Optional _use_die flag to force nagios_die to call die instead of exit, so
+    exceptions can be caught with an eval
+
 0.17  23rd March 2007
   - bump version number again due to cpan indexing stupidity (Gavin)
 

Modified: Nagios-Plugin/trunk/lib/Nagios/Plugin/Functions.pm
===================================================================
--- Nagios-Plugin/trunk/lib/Nagios/Plugin/Functions.pm	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/lib/Nagios/Plugin/Functions.pm	2007-08-31 13:21:10 UTC (rev 1772)
@@ -46,6 +46,10 @@
 my $_fake_exit = 0;
 sub _fake_exit { @_ ? $_fake_exit = shift : $_fake_exit };
 
+# _use_die flag and accessor/mutator, so exceptions can be raised correctly
+my $_use_die = 0;
+sub _use_die { @_ ? $_use_die = shift : $_use_die };
+
 sub get_shortname {
     my %arg = @_;
 
@@ -115,9 +119,14 @@
         return Nagios::Plugin::ExitResult->new($code, $output);
     }
 
-    # Print output and exit
-    print $output;
-    exit $code;
+    # Print output and exit; die if called via nagios_die and flag set
+    if($_use_die && (caller(1))[3] =~ m/die/) {
+        $!=$code;
+        die($output);
+    } else {
+        print $output;
+        exit $code;
+    }
 }
 
 # nagios_die( $message, [ $code ])   OR   nagios_die( $code, $message )
@@ -297,7 +306,8 @@
 =item nagios_die( $message, [CODE] )
 
 Same as nagios_exit(), except that CODE is optional, defaulting
-to UNKNOWN.
+to UNKNOWN.  NOTE: exceptions are not raised by default to calling code.
+Set C<$_use_die> flag if this functionality is required (see test code).
 
 =item check_messages( critical => \@crit, warning => \@warn )
 

Modified: Nagios-Plugin/trunk/lib/Nagios/Plugin/Threshold.pm
===================================================================
--- Nagios-Plugin/trunk/lib/Nagios/Plugin/Threshold.pm	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/lib/Nagios/Plugin/Threshold.pm	2007-08-31 13:21:10 UTC (rev 1772)
@@ -40,8 +40,8 @@
     }
 
     # Otherwise parse $value
-    my $range = Nagios::Plugin::Range->parse_range_string($value) 
-        or nagios_die("Cannot parse $key range: '$value'");
+    my $range = Nagios::Plugin::Range->parse_range_string($value);
+    nagios_die("Cannot parse $key range: '$value'") unless(defined($range));
     return $range;
 }
 

Modified: Nagios-Plugin/trunk/lib/Nagios/Plugin.pm
===================================================================
--- Nagios-Plugin/trunk/lib/Nagios/Plugin.pm	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/lib/Nagios/Plugin.pm	2007-08-31 13:21:10 UTC (rev 1772)
@@ -476,7 +476,8 @@
 =item nagios_die( $message, [<CODE>] )
 
 Same as nagios_exit(), except that CODE is optional, defaulting
-to UNKNOWN.
+to UNKNOWN.  NOTE: exceptions are not raised by default to calling code.
+Set C<$_use_die> flag if this functionality is required (see test code).
 
 =item die( $message, [<CODE>] )
 

Modified: Nagios-Plugin/trunk/t/Nagios-Plugin-Functions-01.t
===================================================================
--- Nagios-Plugin/trunk/t/Nagios-Plugin-Functions-01.t	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/t/Nagios-Plugin-Functions-01.t	2007-08-31 13:21:10 UTC (rev 1772)
@@ -1,6 +1,6 @@
 
 use strict;
-use Test::More tests => 112;
+use Test::More tests => 113;
 
 BEGIN { use_ok("Nagios::Plugin::Functions", ":all"); }
 Nagios::Plugin::Functions::_fake_exit(1);
@@ -154,3 +154,8 @@
             $_->[1] . '.*' . $_->[2]));
 }
 
+# Check that _use_die set to 1 will catch exceptions correctly
+Nagios::Plugin::Functions::_fake_exit(0);
+Nagios::Plugin::Functions::_use_die(1);
+eval { nagios_die("Using die") };
+is( $@, "NAGIOS-PLUGIN-FUNCTIONS-01 UNKNOWN - Using die\n", "Caught exception");

Modified: Nagios-Plugin/trunk/t/Nagios-Plugin-Performance.t
===================================================================
--- Nagios-Plugin/trunk/t/Nagios-Plugin-Performance.t	2007-08-28 03:19:45 UTC (rev 1771)
+++ Nagios-Plugin/trunk/t/Nagios-Plugin-Performance.t	2007-08-31 13:21:10 UTC (rev 1772)
@@ -1,6 +1,6 @@
 
 use strict;
-use Test::More tests => 77;
+use Test::More tests => 84;
 BEGIN { use_ok('Nagios::Plugin::Performance') };
 
 diag "\nusing Nagios::Plugin::Performance revision ". $Nagios::Plugin::Performance::VERSION . "\n" if $ENV{TEST_VERBOSE};
@@ -120,5 +120,17 @@
 cmp_ok( $p[1]->rrdlabel, "eq", "shared_folder_big", "replacing bad characters");
 cmp_ok( $p[2]->rrdlabel, "eq", "1234567890123456789", "shortening rrd label");
 
+# turn off fake_exit and enable use_die so we pick up on errors via nagios_die
+Nagios::Plugin::Functions::_use_die(1);
+Nagios::Plugin::Functions::_fake_exit(0);
 
+@p = Nagios::Plugin::Performance->parse_perfstring("time=0.002722s;0.000000;0.000000;0.000000;10.000000");
+cmp_ok( $p[0]->label, "eq", "time", "label okay");
+cmp_ok( $p[0]->value, "eq", "0.002722", "value okay");
+cmp_ok( $p[0]->uom, "eq", "s", "uom okay");
+    ok( defined $p[0]->threshold->warning->is_set, "Warning range has been set"); 
+    ok( defined $p[0]->threshold->critical->is_set, "Critical range has been set");
+cmp_ok( $p[0]->threshold->warning, 'eq', "0", "warn okay");
+cmp_ok( $p[0]->threshold->critical, 'eq', "0", "crit okay");
+
 # add_perfdata tests in t/Nagios-Plugin-01.t


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.