diff options
author | Ken D <kdobbins@op5.com> | 2017-06-19 19:06:05 (GMT) |
---|---|---|
committer | Lorenz Kästle <lorenz.kaestle@netways.de> | 2022-01-14 14:52:00 (GMT) |
commit | a1f328900049852d9a2b4c810c28b49e2101e337 (patch) | |
tree | 85bec8949261a4e8dccc027e10546052272bb8f8 | |
parent | 9899bc736f45400fa70bdee281f5f5b46490b805 (diff) | |
download | monitoring-plugins-a1f328900049852d9a2b4c810c28b49e2101e337.tar.gz |
Added option for null zero length string exit codes
When using a large distributed network with the same group of checks used against a large number of devices, occationally there are missing cards in a few devices that are present in other devices. Rather than having a large number of unknown results, disable active checking on those large number of result or having to create a unique check configuration for those devices.
This option allows you to select an OK, WARNING, CRITICAL or UNKNOWN status while still retaining the default behavior when not present. This also allows a for the check to immediately start checks as intended should the hardware be added that the check is looking for.
-rw-r--r-- | plugins/check_snmp.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index abe54cf..66d761c 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
@@ -113,6 +113,7 @@ char *authproto = NULL; | |||
113 | char *privproto = NULL; | 113 | char *privproto = NULL; |
114 | char *authpasswd = NULL; | 114 | char *authpasswd = NULL; |
115 | char *privpasswd = NULL; | 115 | char *privpasswd = NULL; |
116 | int nulloid = 3; | ||
116 | char **oids = NULL; | 117 | char **oids = NULL; |
117 | size_t oids_size = 0; | 118 | size_t oids_size = 0; |
118 | char *label; | 119 | char *label; |
@@ -472,8 +473,16 @@ main (int argc, char **argv) | |||
472 | print_thresholds(" thresholds", thlds[i]); | 473 | print_thresholds(" thresholds", thlds[i]); |
473 | } | 474 | } |
474 | ptr = strpbrk (show, "-0123456789"); | 475 | ptr = strpbrk (show, "-0123456789"); |
475 | if (ptr == NULL) | 476 | if (ptr == NULL){ |
476 | die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show); | 477 | if (nulloid == 3) |
478 | die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show); | ||
479 | else if (nulloid == 0) | ||
480 | die (STATE_OK,_("No valid data returned (%s)\n"), show); | ||
481 | else if (nulloid == 1) | ||
482 | die (STATE_WARNING,_("No valid data returned (%s)\n"), show); | ||
483 | else if (nulloid == 2) | ||
484 | die (STATE_CRITICAL,_("No valid data returned (%s)\n"), show); | ||
485 | } | ||
477 | while (i >= response_size) { | 486 | while (i >= response_size) { |
478 | response_size += OID_COUNT_STEP; | 487 | response_size += OID_COUNT_STEP; |
479 | response_value = realloc(response_value, response_size * sizeof(*response_value)); | 488 | response_value = realloc(response_value, response_size * sizeof(*response_value)); |
@@ -661,6 +670,7 @@ process_arguments (int argc, char **argv) | |||
661 | {"oid", required_argument, 0, 'o'}, | 670 | {"oid", required_argument, 0, 'o'}, |
662 | {"object", required_argument, 0, 'o'}, | 671 | {"object", required_argument, 0, 'o'}, |
663 | {"delimiter", required_argument, 0, 'd'}, | 672 | {"delimiter", required_argument, 0, 'd'}, |
673 | {"nulloid", required_argument, 0, 'z'}, | ||
664 | {"output-delimiter", required_argument, 0, 'D'}, | 674 | {"output-delimiter", required_argument, 0, 'D'}, |
665 | {"string", required_argument, 0, 's'}, | 675 | {"string", required_argument, 0, 's'}, |
666 | {"timeout", required_argument, 0, 't'}, | 676 | {"timeout", required_argument, 0, 't'}, |
@@ -705,7 +715,7 @@ process_arguments (int argc, char **argv) | |||
705 | } | 715 | } |
706 | 716 | ||
707 | while (1) { | 717 | while (1) { |
708 | c = getopt_long (argc, argv, "nhvVO46t:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:N:L:U:a:x:A:X:", | 718 | c = getopt_long (argc, argv, "nhvVO46t:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:N:L:U:a:x:A:X:z:", |
709 | longopts, &option); | 719 | longopts, &option); |
710 | 720 | ||
711 | if (c == -1 || c == EOF) | 721 | if (c == -1 || c == EOF) |
@@ -816,6 +826,12 @@ process_arguments (int argc, char **argv) | |||
816 | eval_method[j+1] |= CRIT_PRESENT; | 826 | eval_method[j+1] |= CRIT_PRESENT; |
817 | } | 827 | } |
818 | break; | 828 | break; |
829 | case 'z': /* Null OID Return Check */ | ||
830 | if (!is_integer (optarg)) | ||
831 | usage2 (_("Exit status must be a positive integer"), optarg); | ||
832 | else | ||
833 | nulloid = atoi(optarg); | ||
834 | break; | ||
819 | case 's': /* string or substring */ | 835 | case 's': /* string or substring */ |
820 | strncpy (string_value, optarg, sizeof (string_value) - 1); | 836 | strncpy (string_value, optarg, sizeof (string_value) - 1); |
821 | string_value[sizeof (string_value) - 1] = 0; | 837 | string_value[sizeof (string_value) - 1] = 0; |
@@ -1181,6 +1197,14 @@ print_help (void) | |||
1181 | printf (" %s \"%s\"\n", _("Delimiter to use when parsing returned data. Default is"), DEFAULT_DELIMITER); | 1197 | printf (" %s \"%s\"\n", _("Delimiter to use when parsing returned data. Default is"), DEFAULT_DELIMITER); |
1182 | printf (" %s\n", _("Any data on the right hand side of the delimiter is considered")); | 1198 | printf (" %s\n", _("Any data on the right hand side of the delimiter is considered")); |
1183 | printf (" %s\n", _("to be the data that should be used in the evaluation.")); | 1199 | printf (" %s\n", _("to be the data that should be used in the evaluation.")); |
1200 | printf (" %s\n", "-z, --nulloid=#"); | ||
1201 | printf (" %s\n", _("If the check returns a 0 length string or NULL value")); | ||
1202 | printf (" %s\n", _("This option allows you to choose what status you want it to exit")); | ||
1203 | printf (" %s\n", _("Excluding this option renders the default exit of 3(STATE_UNKNOWN)")); | ||
1204 | printf (" %s\n", _("0 = OK")); | ||
1205 | printf (" %s\n", _("1 = WARNING")); | ||
1206 | printf (" %s\n", _("2 = CRITICAL")); | ||
1207 | printf (" %s\n", _("3 = UNKNOWN")); | ||
1184 | 1208 | ||
1185 | /* Tests Against Integers */ | 1209 | /* Tests Against Integers */ |
1186 | printf (" %s\n", "-w, --warning=THRESHOLD(s)"); | 1210 | printf (" %s\n", "-w, --warning=THRESHOLD(s)"); |