From 9d5427f392b4b03b7fd558b4be628653d140f6c0 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Mon, 17 Mar 2008 20:32:11 +0000 Subject: Fixed parsing of negative values and support full range definitions git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/Nagios-Plugin/trunk@1952 f882894a-f735-0410-b71e-b25c423dba1c diff --git a/Changes b/Changes index 471bb31..d680524 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,8 @@ Revision history for Perl module Nagios::Plugin. +0.25 17th March 2008 + - Fixed parsing of performance data with negative values and full range definitions + 0.24 1st February 2008 - Fixed a test failure which highlighted a precision rounding within hashes diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm index b395b68..edcb2c3 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.24"; +our $VERSION = "0.25"; sub new { my $class = shift; diff --git a/lib/Nagios/Plugin/Functions.pm b/lib/Nagios/Plugin/Functions.pm index 2638b8d..0f33121 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.24"; +our $VERSION = "0.25"; our @STATUS_CODES = qw(OK WARNING CRITICAL UNKNOWN DEPENDENT); diff --git a/lib/Nagios/Plugin/Performance.pm b/lib/Nagios/Plugin/Performance.pm index 55e3ddc..403492c 100644 --- a/lib/Nagios/Plugin/Performance.pm +++ b/lib/Nagios/Plugin/Performance.pm @@ -22,10 +22,12 @@ sub import { Nagios::Plugin::Functions::_use_die($_); } +my $value_re = qr/[-+]?[\d\.]+/; +my $value_re_with_negative_infinity = qr/$value_re|~/; sub _parse { my $class = shift; my $string = shift; - $string =~ s/^([^=]+)=([\d\.]+)([\w%]*);?([\d\.]+)?;?([\d\.]+)?;?([\d\.]+)?;?([\d\.]+)?\s*//; + $string =~ s/^([^=]+)=($value_re)([\w%]*);?($value_re_with_negative_infinity\:?$value_re?)?;?($value_re_with_negative_infinity\:?$value_re?)?;?($value_re)?;?($value_re)?\s*//o; return undef unless ((defined $1 && $1 ne "") && (defined $2 && $2 ne "")); my $p = $class->new( label => $1, value => $2+0, uom => $3, warning => $4, critical => $5, diff --git a/t/Nagios-Plugin-Performance.t b/t/Nagios-Plugin-Performance.t index 0574ea0..7a28546 100644 --- a/t/Nagios-Plugin-Performance.t +++ b/t/Nagios-Plugin-Performance.t @@ -1,6 +1,6 @@ use strict; -use Test::More tests => 91; +use Test::More tests => 111; BEGIN { use_ok('Nagios::Plugin::Performance') }; diag "\nusing Nagios::Plugin::Performance revision ". $Nagios::Plugin::Performance::VERSION . "\n" if $ENV{TEST_VERBOSE}; @@ -142,4 +142,33 @@ cmp_ok( $p[0]->uom, "eq", "%", "uom okay"); cmp_ok( $p[0]->threshold->warning, 'eq', "90", "warn okay"); cmp_ok( $p[0]->threshold->critical, 'eq', "95", "crit okay"); +# Check ranges are parsed correctly +@p = Nagios::Plugin::Performance->parse_perfstring("availability=93.8%;90:99;"); +is( $p[0]->label, "availability", "label okay"); +is( $p[0]->value, "93.8", "value okay"); +is( $p[0]->uom, "%", "uom okay"); +ok( defined eval { $p[0]->threshold->warning->is_set }, "Warning range has been set"); +is( $p[0]->threshold->critical->is_set, 0, "Critical range has not been set"); +is( $p[0]->threshold->warning, "90:99", "warn okay"); + +# Check that negative values are parsed correctly in value and ranges +@p = Nagios::Plugin::Performance->parse_perfstring("offset=-0.004476s;-60.000000:-5;-120.000000:-3;"); +is( $p[0]->label, "offset", "label okay"); +is( $p[0]->value, "-0.004476", "value okay"); +is( $p[0]->uom, "s", "uom okay"); +ok( defined eval { $p[0]->threshold->warning->is_set }, "Warning range has been set"); +ok( defined eval { $p[0]->threshold->critical->is_set }, "Critical range has been set"); +is( $p[0]->threshold->warning, "-60:-5", "warn okay"); +is( $p[0]->threshold->critical, "-120:-3", "crit okay"); + +# Check infinity values are okay +@p = Nagios::Plugin::Performance->parse_perfstring("salary=52GBP;~:23;45:"); +is( $p[0]->label, "salary", "label okay"); +is( $p[0]->value, "52", "value okay"); +is( $p[0]->uom, "GBP", "uom okay"); +ok( defined eval { $p[0]->threshold->warning->is_set }, "Warning range has been set"); +is( $p[0]->threshold->critical->is_set, 1, "Critical range has been set"); +is( $p[0]->threshold->warning, "~:23", "warn okay"); +is( $p[0]->threshold->critical, "45:", "warn okay"); + # add_perfdata tests in t/Nagios-Plugin-01.t -- cgit v0.10-9-g596f