mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-04-22 14:46:57 -04:00
check_snmp: fix performance thresholds when using multiple oids
when using check_snmp with multiple oids it simply printed the unparsed content from -w/-c into the thresholds for each oid. So each oid contained the hole -w from all oids. ./check_snmp ... -o iso.3.6.1.2.1.25.1.3.0,iso.3.6.1.2.1.25.1.5.0 -w '1,2' -c '3,4' before: SNMP ... | HOST-RESOURCES-MIB::hrSystemInitialLoadDevice.0=393216;1,2;3,4 HOST-RESOURCES-MIB::hrSystemNumUsers.0=24;1,2;3,4 after: SNMP ... | HOST-RESOURCES-MIB::hrSystemInitialLoadDevice.0=393216;1;3 HOST-RESOURCES-MIB::hrSystemNumUsers.0=24;2;4 This also applies to fixed thresholds since check_snmp translates negative infinities from: '~:-1' to '@-1:~'
This commit is contained in:
parent
3f9b22ab16
commit
024d268386
4 changed files with 23 additions and 6 deletions
|
|
@ -128,6 +128,7 @@ range
|
|||
temp_range->end = 0;
|
||||
temp_range->end_infinity = TRUE;
|
||||
temp_range->alert_on = OUTSIDE;
|
||||
temp_range->text = strdup(str);
|
||||
|
||||
if (str[0] == '@') {
|
||||
temp_range->alert_on = INSIDE;
|
||||
|
|
@ -706,4 +707,3 @@ void np_state_write_string(time_t data_time, char *data_string) {
|
|||
|
||||
np_free(temp_file);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ typedef struct range_struct {
|
|||
double end;
|
||||
int end_infinity;
|
||||
int alert_on; /* OUTSIDE (default) or INSIDE */
|
||||
char* text; /* original unparsed text input */
|
||||
} range;
|
||||
|
||||
typedef struct thresholds_struct {
|
||||
|
|
|
|||
|
|
@ -468,6 +468,9 @@ main (int argc, char **argv)
|
|||
/* Process this block for numeric comparisons */
|
||||
/* Make some special values,like Timeticks numeric only if a threshold is defined */
|
||||
if (thlds[i]->warning || thlds[i]->critical || calculate_rate) {
|
||||
if (verbose > 2) {
|
||||
print_thresholds(" thresholds", thlds[i]);
|
||||
}
|
||||
ptr = strpbrk (show, "-0123456789");
|
||||
if (ptr == NULL)
|
||||
die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show);
|
||||
|
|
@ -581,14 +584,16 @@ main (int argc, char **argv)
|
|||
|
||||
if (warning_thresholds) {
|
||||
strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1);
|
||||
strncat(perfstr, warning_thresholds, sizeof(perfstr)-strlen(perfstr)-1);
|
||||
if(thlds[i]->warning && thlds[i]->warning->text)
|
||||
strncat(perfstr, thlds[i]->warning->text, sizeof(perfstr)-strlen(perfstr)-1);
|
||||
}
|
||||
|
||||
if (critical_thresholds) {
|
||||
if (!warning_thresholds)
|
||||
strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1);
|
||||
strncat(perfstr, ";", sizeof(perfstr)-strlen(perfstr)-1);
|
||||
strncat(perfstr, critical_thresholds, sizeof(perfstr)-strlen(perfstr)-1);
|
||||
if(thlds[i]->critical && thlds[i]->critical->text)
|
||||
strncat(perfstr, thlds[i]->critical->text, sizeof(perfstr)-strlen(perfstr)-1);
|
||||
}
|
||||
|
||||
strncat(perfstr, " ", sizeof(perfstr)-strlen(perfstr)-1);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ use NPTest;
|
|||
use FindBin qw($Bin);
|
||||
use POSIX qw/strftime/;
|
||||
|
||||
my $tests = 67;
|
||||
my $tests = 73;
|
||||
# Check that all dependent modules are available
|
||||
eval {
|
||||
require NetSNMP::OID;
|
||||
|
|
@ -251,9 +251,20 @@ is($res->output, 'SNMP CRITICAL - *-4* | iso.3.6.1.4.1.8072.3.2.67.17=-4;-2:;-3:
|
|||
|
||||
$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.18 -c '~:-6.5'" );
|
||||
is($res->return_code, 0, "Negative float OK" );
|
||||
is($res->output, 'SNMP OK - -6.6 | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;;~:-6.5 ', "Negative float OK output" );
|
||||
is($res->output, 'SNMP OK - -6.6 | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;;@-6.5:~ ', "Negative float OK output" );
|
||||
|
||||
$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.18 -w '~:-6.65' -c '~:-6.55'" );
|
||||
is($res->return_code, 1, "Negative float WARNING" );
|
||||
is($res->output, 'SNMP WARNING - *-6.6* | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;~:-6.65;~:-6.55 ', "Negative float WARNING output" );
|
||||
is($res->output, 'SNMP WARNING - *-6.6* | iso.3.6.1.4.1.8072.3.2.67.18=-6.6;@-6.65:~;@-6.55:~ ', "Negative float WARNING output" );
|
||||
|
||||
$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.10,.1.3.6.1.4.1.8072.3.2.67.17 -w '1:100000,-10:20' -c '2:200000,-20:30'" );
|
||||
is($res->return_code, 0, "Multiple OIDs with thresholds" );
|
||||
like($res->output, '/SNMP OK - \d+ -4 | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1:100000;2:200000 iso.3.6.1.4.1.8072.3.2.67.17=-4;-10:20;-20:30/', "Multiple OIDs with thresholds output" );
|
||||
|
||||
$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.10,.1.3.6.1.4.1.8072.3.2.67.17 -w '1:100000,-1:2' -c '2:200000,-20:30'" );
|
||||
is($res->return_code, 1, "Multiple OIDs with thresholds" );
|
||||
like($res->output, '/SNMP WARNING - \d+ \*-4\* | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1:100000;2:200000 iso.3.6.1.4.1.8072.3.2.67.17=-4;-10:20;-20:30/', "Multiple OIDs with thresholds output" );
|
||||
|
||||
$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.10,.1.3.6.1.4.1.8072.3.2.67.17 -w 1,2 -c 1" );
|
||||
is($res->return_code, 2, "Multiple OIDs with some thresholds" );
|
||||
like($res->output, '/SNMP CRITICAL - \*\d+\* \*-4\* | iso.3.6.1.4.1.8072.3.2.67.10=\d+c;1;2 iso.3.6.1.4.1.8072.3.2.67.17=-4;;/', "Multiple OIDs with thresholds output" );
|
||||
|
|
|
|||
Loading…
Reference in a new issue