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

Uses same ps command as check_procs

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@462 f882894a-f735-0410-b71e-b25c423dba1c
Ton Voon 23 лет назад
Родитель
Сommit
fbb6e27531
1 измененных файлов с 32 добавлено и 9 удалено
  1. 32 9
      plugins/check_nagios.c

+ 32 - 9
plugins/check_nagios.c

@@ -40,6 +40,8 @@ char *status_log = NULL;
 char *process_string = NULL;
 int expire_minutes = 0;
 
+int verbose = 0;
+
 int
 main (int argc, char **argv)
 {
@@ -51,6 +53,12 @@ main (int argc, char **argv)
 	time_t current_time;
 	char *temp_ptr;
 	FILE *fp;
+	int procuid = 0;
+	int procppid = 0;
+	char procstat[8];
+	char procprog[MAX_INPUT_BUFFER];
+	char *procargs;
+	int pos, cols;
 
 	if (process_arguments (argc, argv) == ERROR)
 		usage ("Could not parse arguments\n");
@@ -82,21 +90,32 @@ main (int argc, char **argv)
 	fclose (fp);
 
 	/* run the command to check for the Nagios process.. */
-	child_process = spopen (PS_RAW_COMMAND);
+	child_process = spopen (PS_COMMAND);
 	if (child_process == NULL) {
-		printf ("Could not open pipe: %s\n", PS_RAW_COMMAND);
+		printf ("Could not open pipe: %s\n", PS_COMMAND);
 		return STATE_UNKNOWN;
 	}
 
 	child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
 	if (child_stderr == NULL) {
-		printf ("Could not open stderr for %s\n", PS_RAW_COMMAND);
+		printf ("Could not open stderr for %s\n", PS_COMMAND);
 	}
 
+	fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);
+
 	/* count the number of matching Nagios processes... */
 	while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
-		if (!strstr(input_buffer, argv[0]) && strstr(input_buffer, process_string))
-			proc_entries++;
+		cols = sscanf (input_buffer, PS_FORMAT, PS_VARLIST);
+		if ( cols >= 4 ) {
+			asprintf (&procargs, "%s", input_buffer + pos);
+			strip (procargs);
+			
+			if (!strstr(procargs, argv[0]) && strstr(procargs, process_string)) {
+				proc_entries++;
+				if (verbose)
+					printf ("Found process: %s\n", procargs);
+			}
+		}
 	}
 
 	/* If we get anything on stderr, at least set warning */
@@ -151,6 +170,7 @@ process_arguments (int argc, char **argv)
 		{"command", required_argument, 0, 'C'},
 		{"version", no_argument, 0, 'V'},
 		{"help", no_argument, 0, 'h'},
+		{"verbose", no_argument, 0, 'v'},
 		{0, 0, 0, 0}
 	};
 
@@ -170,7 +190,7 @@ process_arguments (int argc, char **argv)
 	}
 
 	while (1) {
-		c = getopt_long (argc, argv, "+hVF:C:e:", long_options, &option_index);
+		c = getopt_long (argc, argv, "+hVvF:C:e:", long_options, &option_index);
 
 		if (c == -1 || c == EOF || c == 1)
 			break;
@@ -186,13 +206,13 @@ process_arguments (int argc, char **argv)
 		case 'V':									/* version */
 			print_revision (progname, "$Revision$");
 			exit (STATE_OK);
-		case 'F':									/* hostname */
+		case 'F':									/* status log */
 			status_log = optarg;
 			break;
-		case 'C':									/* hostname */
+		case 'C':									/* command */
 			process_string = optarg;
 			break;
-		case 'e':									/* hostname */
+		case 'e':									/* expiry time */
 			if (is_intnonneg (optarg))
 				expire_minutes = atoi (optarg);
 			else
@@ -200,6 +220,9 @@ process_arguments (int argc, char **argv)
 									 "Expiration time must be an integer (seconds)\nType '%s -h' for additional help\n",
 									 progname);
 			break;
+		case 'v':
+			verbose++;
+			break;
 		}
 	}