Просмотр исходного кода

Merge branch 'maint' of github.com:nagios-plugins/nagios-plugins into maint

madlohe 6 лет назад
Родитель
Сommit
8f9f719f8a
3 измененных файлов с 45 добавлено и 8 удалено
  1. 1 0
      NEWS
  2. 24 5
      plugins/check_procs.c
  3. 20 3
      plugins/check_snmp.c

+ 1 - 0
NEWS

@@ -29,6 +29,7 @@ This file documents the major additions and syntax changes between releases.
 	check_procs: Allow process to be excluded from check_procs (Marcel Klein)
 	check_radius: Add calling-station-id (cejkar)
 	check_smtp: Add --proxy flag for PROXY protocol (Patrick Uiterwijk)
+	check_snmp: Add --strict flag to ensure returned OID matches -o.
 	check_swap: Add --no-swap flag (Mario Trangoni)
 	lib: Added warning_string/critical_string to struct thresholds for storing originally parsed strings
 	ssl_utils: Added certificate expiry data in OK status (check_http, check_smtp, check_tcp) (Matt Capra)

+ 24 - 5
plugins/check_procs.c

@@ -142,9 +142,13 @@ main (int argc, char **argv)
 	int procjid = 0;
 	pid_t kthread_ppid = 0;
 	int procvsz = 0;
+	int total_procvsz = 0;
 	int procrss = 0;
+	int total_procrss = 0;
 	int procseconds = 0;
+	int total_procseconds = 0;
 	float procpcpu = 0;
+	float total_procpcpu = 0;
 	char procstat[8];
 	char procetime[MAX_INPUT_BUFFER] = { '\0' };
 	char *procargs;
@@ -356,16 +360,22 @@ main (int argc, char **argv)
 				}
 			}
 
-			if (metric == METRIC_VSZ)
+			if (metric == METRIC_VSZ) {
 				i = get_status ((double)procvsz, procs_thresholds);
-			else if (metric == METRIC_RSS)
+				total_procvsz += procvsz;
+			} else if (metric == METRIC_RSS) {
 				i = get_status ((double)procrss, procs_thresholds);
+				total_procrss += procrss;
+			}
 			/* TODO? float thresholds for --metric=CPU */
-			else if (metric == METRIC_CPU)
+			else if (metric == METRIC_CPU) {
 				i = get_status (procpcpu, procs_thresholds);
-			else if (metric == METRIC_ELAPSED)
+				total_procpcpu += procpcpu;
+			}
+			else if (metric == METRIC_ELAPSED) {
 				i = get_status ((double)procseconds, procs_thresholds);
-
+				total_procseconds += procseconds;
+			}
 			if (metric != METRIC_PROCS) {
 				if (i == STATE_WARNING) {
 					warn++;
@@ -424,6 +434,14 @@ main (int argc, char **argv)
 		printf (" | procs=%d;%s;%s;0;", procs,
 				warning_range ? warning_range : "",
 				critical_range ? critical_range : "");
+	else if (metric == METRIC_VSZ)
+		printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0; procvsz=%d;", procs, warn, crit, total_procvsz);
+	else if (metric == METRIC_RSS)
+		printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0; procrss=%d;", procs, warn, crit, total_procrss);
+	else if (metric == METRIC_CPU)
+		printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0; procpcpu=%f;", procs, warn, crit, total_procpcpu);
+	else if (metric == METRIC_ELAPSED)
+		printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0; procseconds=%d;", procs, warn, crit, total_procseconds);
 	else
 		printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0;", procs, warn, crit);
 
@@ -886,3 +904,4 @@ print_usage (void)
   printf (" [-u user] [-r rss] [-z vsz] [-P %%cpu] [-a argument-array]\n");
   printf (" [-C command] [-X process_to_exclude] [-k] [-t timeout] [-v]\n");
 }
+

+ 20 - 3
plugins/check_snmp.c

@@ -64,6 +64,7 @@ const char *email = "devel@nagios-plugins.org";
 #define L_RATE_MULTIPLIER CHAR_MAX+2
 #define L_INVERT_SEARCH CHAR_MAX+3
 #define L_OFFSET CHAR_MAX+4
+#define STRICT_MODE CHAR_MAX+5
 
 /* Gobble to string - stop incrementing c when c[0] match one of the
  * characters in s */
@@ -146,6 +147,7 @@ char *output_delim;
 char *miblist = NULL;
 int needmibs = FALSE;
 int calculate_rate = 0;
+static int strict_mode = 0;
 double offset = 0.0;
 int rate_multiplier = 1;
 state_data *previous_state;
@@ -408,6 +410,10 @@ main (int argc, char **argv)
 			printf("Processing oid %i (line %i)\n  oidname: %s\n  response: %s\n", i+1, line+1, oidname, response);
 		}
 
+		if (strict_mode && strncmp(oids[i], oidname, strlen(oids[i]))) {
+			die( STATE_UNKNOWN, _("UNKNOWN - Expected OID %s did not match actual OID %s.\n"), oids[i], oidname);
+		}
+
 		/* Clean up type array - Sol10 does not necessarily zero it out */
 		bzero(type, sizeof(type));
 
@@ -758,6 +764,7 @@ process_arguments (int argc, char **argv)
 		{"authpasswd", required_argument, 0, 'A'},
 		{"privpasswd", required_argument, 0, 'X'},
 		{"next", no_argument, 0, 'n'},
+		{"strict", no_argument, 0, STRICT_MODE},
 		{"rate", no_argument, 0, L_CALCULATE_RATE},
 		{"rate-multiplier", required_argument, 0, L_RATE_MULTIPLIER},
 		{"offset", required_argument, 0, L_OFFSET},
@@ -985,6 +992,9 @@ process_arguments (int argc, char **argv)
 					unitv[nunits - 1] = ptr;
 			}
 			break;
+		case STRICT_MODE:
+			strict_mode = 1;
+			break;
 		case L_CALCULATE_RATE:
 			if(calculate_rate==0)
 				np_enable_state(NULL, 1);
@@ -1048,9 +1058,13 @@ validate_arguments ()
 {
 	/* check whether to load locally installed MIBS (CPU/disk intensive) */
 	if (miblist == NULL) {
-		if ( needmibs == TRUE ) {
+		if ( strict_mode == TRUE ) {
+			miblist = "";
+		}
+		else if ( needmibs == TRUE ) {
 			miblist = strdup (DEFAULT_MIBLIST);
-		}else{
+		}
+		else {
 			miblist = "";			/* don't read any mib files for numeric oids */
 		}
 	}
@@ -1291,6 +1305,9 @@ print_help (void)
 
 	printf (" %s\n", "-O, --perf-oids");
 	printf ("    %s\n", _("Label performance data with OIDs instead of --label's"));
+	printf (" %s\n", "--strict");
+	printf ("    %s\n", _("Enable strict mode: arguments to -o will be checked against the OID"));
+	printf ("    %s\n", _("returned by snmpget. If they don't match, the plugin returns UNKNOWN."));
 
 	printf (UT_VERBOSE);
 
@@ -1334,5 +1351,5 @@ print_usage (void)
 	printf ("[-C community] [-s string] [-r regex] [-R regexi] [-t timeout] [-e retries]\n");
 	printf ("[-l label] [-u units] [-p port-number] [-d delimiter] [-D output-delimiter]\n");
 	printf ("[-m miblist] [-P snmp version] [-N context] [-L seclevel] [-U secname]\n");
-	printf ("[-a authproto] [-A authpasswd] [-x privproto] [-X privpasswd]\n");
+	printf ("[-a authproto] [-A authpasswd] [-x privproto] [-X privpasswd] [--strict]\n");
 }