From 67a45638154221708da7f92451143475bdc229ac Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Mon, 5 Jan 2009 22:24:44 +0000 Subject: Check for valid numerical value before returning perfdata object diff --git a/Changes b/Changes index d11f51e..1f9034d 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,8 @@ Revision history for Perl module Nagios::Plugin. +0.31 5th January 2009 + - Check for valid numerical value before returning perfdata object + 0.30 13th December 2008 - Fixed performance parsing when numeric fields had commas instead of periods due to locale settings - If a performance set is not parseable, instead of returning an empty array, will return all the successfully diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm index 2c9099f..b0b053d 100644 --- a/lib/Nagios/Plugin.pm +++ b/lib/Nagios/Plugin.pm @@ -25,7 +25,7 @@ our @EXPORT_OK = qw(%ERRORS); # CPAN stupidly won't index this module without a literal $VERSION here, # so we're forced to duplicate it explicitly # Make sure you update $Nagios::Plugin::Functions::VERSION too -our $VERSION = "0.30"; +our $VERSION = "0.31"; sub new { my $class = shift; diff --git a/lib/Nagios/Plugin/Functions.pm b/lib/Nagios/Plugin/Functions.pm index b7348f3..c7e899c 100644 --- a/lib/Nagios/Plugin/Functions.pm +++ b/lib/Nagios/Plugin/Functions.pm @@ -12,7 +12,7 @@ use Params::Validate qw(:types validate); use Math::Calc::Units; # Remember to update Nagios::Plugins as well -our $VERSION = "0.30"; +our $VERSION = "0.31"; our @STATUS_CODES = qw(OK WARNING CRITICAL UNKNOWN DEPENDENT); diff --git a/lib/Nagios/Plugin/Performance.pm b/lib/Nagios/Plugin/Performance.pm index df591fb..c35653e 100644 --- a/lib/Nagios/Plugin/Performance.pm +++ b/lib/Nagios/Plugin/Performance.pm @@ -35,8 +35,18 @@ sub _parse { my @info = ($1, $2, $3, $4, $5, $6, $7); # We convert any commas to periods, in the value fields map { defined $info[$_] && $info[$_] =~ s/,/./go } (1, 3, 4, 5, 6); + + # Check that $info[1] is an actual value + # We do this by returning undef if a warning appears + my $performance_value; + { + my $not_value; + local $SIG{__WARN__} = sub { $not_value++ }; + $performance_value = $info[1]+0; + return undef if $not_value; + } my $p = $class->new( - label => $info[0], value => $info[1]+0, uom => $info[2], warning => $info[3], critical => $info[4], + label => $info[0], value => $performance_value, uom => $info[2], warning => $info[3], critical => $info[4], min => $info[5], max => $info[6] ); return $p; diff --git a/t/Nagios-Plugin-Performance.t b/t/Nagios-Plugin-Performance.t index e3fac07..8426828 100644 --- a/t/Nagios-Plugin-Performance.t +++ b/t/Nagios-Plugin-Performance.t @@ -16,7 +16,7 @@ my @test = ( }, ); -plan tests => (8 * scalar @test) + 132; +plan tests => (8 * scalar @test) + 135; use_ok('Nagios::Plugin::Performance'); diag "\nusing Nagios::Plugin::Performance revision ". $Nagios::Plugin::Performance::VERSION . "\n" if $ENV{TEST_VERBOSE}; @@ -250,4 +250,10 @@ is( $p[0]->threshold->warning, 60, "warn okay"); is( $p[0]->threshold->critical->is_set, 1, "Critical range has been set"); is( $p[0]->threshold->critical, 120, "warn okay"); +# Some values with funny commas +@p = Nagios::Plugin::Performance->parse_perfstring("time=1800,600,300,0,3600 other=45.6"); +is( $p[0]->label, "other", "Ignored time=1800,600,300,0,3600, but allowed other=45.6"); +is( $p[0]->value, 45.6, "value okay"); +is( $p[0]->uom, "", "uom okay"); + # add_perfdata tests in t/Nagios-Plugin-01.t -- cgit v0.10-9-g596f