mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-02-14 00:03:32 -05:00
Make check_snmp backwards compatible in how it parses thresholds
Once upon a time, check_snmp used to accept inverse ranges in the
format of '2:1' to mean "alert if value is inside this range".
Since commit 7cb3ae0933, ranges such
as those have instead triggered the error "Range format incorrect"
and resulted in an UNKNOWN warning state. This patch attempts to
fix the situation so that the old-style ranges continues to mean
exactly what the once did and people with lots of snmp checks can
avoid a bazillion false positives from their environments.
Signed-off-by: Andreas Ericsson <ae@op5.se>
This commit is contained in:
parent
831bb312a9
commit
bd78299056
1 changed files with 23 additions and 0 deletions
|
|
@ -144,6 +144,25 @@ double previous_value[MAX_OIDS];
|
|||
int perf_labels = 1;
|
||||
|
||||
|
||||
static char *fix_snmp_range(char *th)
|
||||
{
|
||||
double left, right;
|
||||
char *colon, *ret;
|
||||
if (!(colon = strchr(th, ':')))
|
||||
return th;
|
||||
*colon = 0;
|
||||
|
||||
left = strtod(th, NULL);
|
||||
right = strtod(colon + 1, NULL);
|
||||
if (right >= left) {
|
||||
return th;
|
||||
}
|
||||
ret = malloc(strlen(th) + strlen(colon + 1) + 2);
|
||||
sprintf(ret, "@%s:%s", colon + 1, th);
|
||||
free(th);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
|
|
@ -228,6 +247,10 @@ main (int argc, char **argv)
|
|||
for (i=0; i<numoids; i++) {
|
||||
char *w = th_warn ? strndup(th_warn, strcspn(th_warn, ",")) : NULL;
|
||||
char *c = th_crit ? strndup(th_crit, strcspn(th_crit, ",")) : NULL;
|
||||
/* translate "2:1" to "@1:2" for backwards compatibility */
|
||||
w = w ? fix_snmp_range(w) : NULL;
|
||||
c = c ? fix_snmp_range(c) : NULL;
|
||||
|
||||
/* Skip empty thresholds, while avoiding segfault */
|
||||
set_thresholds(&thlds[i],
|
||||
w ? strpbrk(w, NP_THRESHOLDS_CHARS) : NULL,
|
||||
|
|
|
|||
Loading…
Reference in a new issue