summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e7ac2e6)
raw | patch | inline | side by side (parent: e7ac2e6)
author | nagios <nagios@opsviewdev32.(none)> | |
Mon, 15 Nov 2010 15:43:41 +0000 (15:43 +0000) | ||
committer | nagios <nagios@opsviewdev32.(none)> | |
Mon, 15 Nov 2010 15:43:41 +0000 (15:43 +0000) |
numbers (according to strtod) to be a numeric value for threshold and
performance data
performance data
NEWS | patch | blob | history | |
plugins/check_snmp.c | patch | blob | history | |
plugins/tests/check_snmp.t | patch | blob | history | |
plugins/tests/check_snmp_agent.pl | patch | blob | history |
index c0396c19b9b255b29c2dab4660d4b313aabb4636..0d6d3b064d31c06adacb891b5ed06d359756acbf 100644 (file)
--- a/NEWS
+++ b/NEWS
...
ENHANCEMENTS
check_nt UPTIME accepts warning/critical thresholds (Ryan Kelly)
+ FIXES
+ check_snmp now attempts to convert string responses into a double value. If the full string is a value,
+ check_snmp will consider it a numeric value and thus apply threshold checks and return performance data.
+ This reverts back to 1.4.14 behaviour with strings
1.4.15 27th July 2010
ENHANCEMENTS
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index f32a26ebeaed628f4f1b682f022945832f249176..9d9194225b4ee8d5f9facffc3e022e7ff198e741 100644 (file)
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
char *outbuff;
char *ptr = NULL;
char *show = NULL;
+ char *endptr = NULL;
char *th_warn=NULL;
char *th_crit=NULL;
char type[8] = "";
}
}
+ /* Allow numeric conversion if whole string is a number. Make concession for strings with " at beginning or end */
+ /* This duplicates the conversion a bit later, but is cleaner to separate out the checking against the conversion */
+ ptr = show;
+ if (*ptr == '"')
+ ptr++;
+ if (*ptr != '\0' ) {
+ strtod( ptr, &endptr );
+ if (*endptr == '"')
+ endptr++;
+ if (*endptr == '\0')
+ is_numeric=1;
+ }
+
}
else if (strstr (response, "Timeticks: "))
show = strstr (response, "Timeticks: ");
index e7ad1927f27dfab24d0987f492c611303fbf881e..08348d23023664727ae005384098e444cc49bf4e 100755 (executable)
}
}
-my $tests = 33;
+my $tests = 41;
if (-x "./check_snmp") {
plan tests => $tests;
} else {
@@ -170,5 +170,20 @@ $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1
is($res->return_code, 0, "OK as string doesn't match but inverted" );
is($res->output, 'SNMP OK - "stringtests" | ', "OK as inverted string no match" );
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.12" );
+is($res->return_code, 0, "Numeric in string test" );
+is($res->output, 'SNMP OK - 3.5 | iso.3.6.1.4.1.8072.3.2.67.12=3.5 ', "Check seen as numeric" );
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.12 -w 4:5" );
+is($res->return_code, 1, "Numeric in string test" );
+is($res->output, 'SNMP WARNING - *3.5* | iso.3.6.1.4.1.8072.3.2.67.12=3.5 ', "WARNING threshold checks for string masquerading as number" );
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.13" );
+is($res->return_code, 0, "Not really numeric test" );
+is($res->output, 'SNMP OK - "87.4startswithnumberbutshouldbestring" | ', "Check string with numeric start is still string" );
+
+$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.14" );
+is($res->return_code, 0, "Not really numeric test (trying best to fool it)" );
+is($res->output, 'SNMP OK - "555\"I said\"" | ', "Check string with a double quote following is still a string (looks like the perl routine will always escape though)" );
index 8784ab12a59d263484e757e96c4b1f419f335756..2ad8516fb3db9d989d73fbaf4fc22cda891e2a27 100644 (file)
my $multilin5 = 'And now have fun with with this: "C:\\"
because we\'re not done yet!';
-my @fields = (ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_UNSIGNED, ASN_UNSIGNED, ASN_COUNTER, ASN_COUNTER64, ASN_UNSIGNED, ASN_COUNTER, ASN_OCTET_STR);
-my @values = ($multiline, $multilin2, $multilin3, $multilin4, $multilin5, 4294965296, 1000, 4294965296, uint64("18446744073709351616"), int(rand(2**32)), 64000, "stringtests");
-my @incrts = (undef, undef, undef, undef, undef, 1000, -500, 1000, 100000, undef, 666, undef);
+my @fields = (ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_UNSIGNED, ASN_UNSIGNED, ASN_COUNTER, ASN_COUNTER64, ASN_UNSIGNED, ASN_COUNTER, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR, ASN_OCTET_STR );
+my @values = ($multiline, $multilin2, $multilin3, $multilin4, $multilin5, 4294965296, 1000, 4294965296, uint64("18446744073709351616"), int(rand(2**32)), 64000, "stringtests", "3.5", "87.4startswithnumberbutshouldbestring", '555"I said"' );
+my @incrts = (undef, undef, undef, undef, undef, 1000, -500, 1000, 100000, undef, 666, undef, undef, undef, undef );
# Number of elements in our OID
my $oidelts;