From 95dba9c4213c2e7e8f4b572efd873c1979406221 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Fri, 31 Aug 2007 13:21:10 +0000 Subject: 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 git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/Nagios-Plugin/trunk@1772 f882894a-f735-0410-b71e-b25c423dba1c diff --git a/Changes b/Changes index 67e36fe..2b67941 100644 --- a/Changes +++ b/Changes @@ -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) diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm index 459e6bb..fe83575 100644 --- a/lib/Nagios/Plugin.pm +++ b/lib/Nagios/Plugin.pm @@ -476,7 +476,8 @@ form "SHORTNAME CODE - $message". =item nagios_die( $message, [] ) 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, [] ) diff --git a/lib/Nagios/Plugin/Functions.pm b/lib/Nagios/Plugin/Functions.pm index f750968..e8b292e 100644 --- a/lib/Nagios/Plugin/Functions.pm +++ b/lib/Nagios/Plugin/Functions.pm @@ -46,6 +46,10 @@ our %STATUS_TEXT = reverse %ERRORS; 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 @@ sub nagios_exit { 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 @@ form "PLUGIN CODE - $message". =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 ) diff --git a/lib/Nagios/Plugin/Threshold.pm b/lib/Nagios/Plugin/Threshold.pm index ad58134..145b89f 100644 --- a/lib/Nagios/Plugin/Threshold.pm +++ b/lib/Nagios/Plugin/Threshold.pm @@ -40,8 +40,8 @@ sub _inflate } # 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; } diff --git a/t/Nagios-Plugin-Functions-01.t b/t/Nagios-Plugin-Functions-01.t index 70db221..5268255 100644 --- a/t/Nagios-Plugin-Functions-01.t +++ b/t/Nagios-Plugin-Functions-01.t @@ -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 @@ for (@ok) { $_->[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"); diff --git a/t/Nagios-Plugin-Performance.t b/t/Nagios-Plugin-Performance.t index 0dcb800..c4d518c 100644 --- a/t/Nagios-Plugin-Performance.t +++ b/t/Nagios-Plugin-Performance.t @@ -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[0]->rrdlabel, "eq", "home_a_m", "changing / to _"); 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 -- cgit v0.10-9-g596f