Procházet zdrojové kódy

Initial Commit for testing timeout state changes

abrist před 11 roky
rodič
revize
9971682b4e
7 změnil soubory, kde provedl 50 přidání a 6 odebrání
  1. 5 1
      plugins/check_nt.c
  2. 14 3
      plugins/check_snmp.c
  3. 5 1
      plugins/check_time.c
  4. 7 0
      plugins/netutils.c
  5. 10 1
      plugins/runcmd.c
  6. 2 0
      plugins/runcmd.h
  7. 7 0
      plugins/utils.c

+ 5 - 1
plugins/check_nt.c

@@ -509,6 +509,7 @@ int process_arguments(int argc, char **argv){
 	{
 		{"port",     required_argument,0,'p'},
 		{"timeout",  required_argument,0,'t'},
+		{"timeoutstate",  required_argument,0,'Z'},
 		{"critical", required_argument,0,'c'},
 		{"warning",  required_argument,0,'w'},
 		{"variable", required_argument,0,'v'},
@@ -543,7 +544,7 @@ int process_arguments(int argc, char **argv){
 	}
 
 	while (1) {
-		c = getopt_long(argc,argv,"+hVH:t:c:w:p:v:l:s:d:u",longopts,&option);
+		c = getopt_long(argc,argv,"+hVH:t:c:w:p:v:l:s:d:uZ:",longopts,&option);
 
 		if (c==-1||c==EOF||c==1)
 			break;
@@ -617,6 +618,9 @@ int process_arguments(int argc, char **argv){
 				socket_timeout=atoi(optarg);
 				if(socket_timeout<=0)
 					return ERROR;
+			case 'Z':
+				set_socket_timeout_state(optarg);
+				break;
 			}
 
 	}

+ 14 - 3
plugins/check_snmp.c

@@ -352,15 +352,22 @@ main (int argc, char **argv)
 	if (chld_out.lines == 0)
 		external_error=1;
 	if (external_error) {
-		if (chld_err.lines > 0) {
+		if ((chld_err.lines > 0) && strstr(chld_err.line[0], "Timeout")) {
 			printf (_("External command error: %s\n"), chld_err.line[0]);
 			for (i = 1; i < chld_err.lines; i++) {
 				printf ("%s\n", chld_err.line[i]);
 			}
+			exit (runcmd_timeout_state);
+		} else if (chld_err.lines > 0) {
+			printf (_("External command error: %s\n"), chld_err.line[0]);
+			for (i = 1; i < chld_err.lines; i++) {
+				printf ("%s\n", chld_err.line[i]);
+			}
+			exit (STATE_UNKNOWN);
 		} else {
 			printf(_("External command error with no output (return code: %d)\n"), return_code);
+			exit (STATE_UNKNOWN);
 		}
-		exit (STATE_UNKNOWN);
 	}
 
 	if (verbose) {
@@ -660,6 +667,7 @@ process_arguments (int argc, char **argv)
 		{"output-delimiter", required_argument, 0, 'D'},
 		{"string", required_argument, 0, 's'},
 		{"timeout", required_argument, 0, 't'},
+		{"timeoutstate", required_argument, 0, 'Z'},
 		{"regex", required_argument, 0, 'r'},
 		{"ereg", required_argument, 0, 'r'},
 		{"eregi", required_argument, 0, 'R'},
@@ -698,7 +706,7 @@ process_arguments (int argc, char **argv)
 	}
 
 	while (1) {
-		c = getopt_long (argc, argv, "nhvVOt:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:L:U:a:x:A:X:",
+		c = getopt_long (argc, argv, "nhvVOt:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:L:U:a:x:A:X:Z:",
 									 longopts, &option);
 
 		if (c == -1 || c == EOF)
@@ -760,6 +768,9 @@ process_arguments (int argc, char **argv)
 			else
 				timeout_interval = atoi (optarg);
 			break;
+                case 'Z':
+                        set_runcmd_timeout_state(optarg);
+                        break;
 
 	/* Test parameters */
 		case 'c':									/* critical threshold */

+ 5 - 1
plugins/check_time.c

@@ -198,6 +198,7 @@ process_arguments (int argc, char **argv)
 		{"port", required_argument, 0, 'p'},
 		{"udp", no_argument, 0, 'u'},
 		{"timeout", required_argument, 0, 't'},
+		{"timeoutstate",  required_argument,0,'Z'},
 		{"version", no_argument, 0, 'V'},
 		{"help", no_argument, 0, 'h'},
 		{0, 0, 0, 0}
@@ -220,7 +221,7 @@ process_arguments (int argc, char **argv)
 	}
 
 	while (1) {
-		c = getopt_long (argc, argv, "hVH:w:c:W:C:p:t:u", longopts,
+		c = getopt_long (argc, argv, "hVH:w:c:W:C:p:t:uZ:", longopts,
 									 &option);
 
 		if (c == -1 || c == EOF)
@@ -303,6 +304,9 @@ process_arguments (int argc, char **argv)
 			else
 				socket_timeout = atoi (optarg);
 			break;
+                case 'Z':
+                        set_socket_timeout_state(optarg);
+                        break;
 		case 'u':									/* udp */
 			use_udp = TRUE;
 		}

+ 7 - 0
plugins/netutils.c

@@ -53,6 +53,13 @@ socket_timeout_alarm_handler (int sig)
 	exit (socket_timeout_state);
 }
 
+void
+set_socket_timeout_state (char *state)
+{
+	if ((socket_timeout_state = translate_state(state)) == ERROR)
+		usage4 (_("Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3).")); 
+}
+
 
 /* connects to a host on a specified tcp port, sends a string, and gets a
 	 response. loops on select-recv until timeout or eof to get all of a

+ 10 - 1
plugins/runcmd.c

@@ -67,6 +67,8 @@
  * occur in any number of threads simultaneously. */
 static pid_t *np_pids = NULL;
 
+unsigned int runcmd_timeout_state = STATE_CRITICAL;
+
 /* Try sysconf(_SC_OPEN_MAX) first, as it can be higher than OPEN_MAX.
  * If that fails and the macro isn't defined, we fall back to an educated
  * guess. There's no guarantee that our guess is adequate and the program
@@ -267,7 +269,14 @@ runcmd_timeout_alarm_handler (int signo)
 		if(np_pids[i] != 0) kill(np_pids[i], SIGKILL);
 	}
 
-	exit (STATE_CRITICAL);
+	exit (runcmd_timeout_state);
+}
+
+void
+set_runcmd_timeout_state (char *state)
+{
+        if ((runcmd_timeout_state = translate_state(state)) == ERROR)
+                usage4 (_("Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
 }
 
 

+ 2 - 0
plugins/runcmd.h

@@ -27,6 +27,8 @@
 #include "common.h"
 #include "utils_cmd.h" /* for the "output" type */
 
+extern unsigned int runcmd_timeout_state;
+
 /** prototypes **/
 int np_runcmd(const char *, output *, output *, int);
 void runcmd_timeout_alarm_handler(int)

+ 7 - 0
plugins/utils.c

@@ -177,6 +177,13 @@ timeout_alarm_handler (int signo)
 	}
 }
 
+void
+set_timeout_state (char *state)
+{
+        if ((timeout_state = translate_state(state)) == ERROR)
+                usage4 (_("Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
+}
+
 int
 is_numeric (char *number)
 {