diff options
Diffstat (limited to 'plugins/check_procs.c')
-rw-r--r-- | plugins/check_procs.c | 109 |
1 files changed, 58 insertions, 51 deletions
diff --git a/plugins/check_procs.c b/plugins/check_procs.c index 1b641c5..1894b28 100644 --- a/plugins/check_procs.c +++ b/plugins/check_procs.c | |||
@@ -49,12 +49,14 @@ int options = 0; /* bitmask of filter criteria to test against */ | |||
49 | #define PCPU 256 | 49 | #define PCPU 256 |
50 | 50 | ||
51 | /* Different metrics */ | 51 | /* Different metrics */ |
52 | int metric = 0; | 52 | char *metric_name; |
53 | #define METRIC_PROCS 0 | 53 | enum metric { |
54 | #define METRIC_VSZ 1 | 54 | METRIC_PROCS, |
55 | #define METRIC_RSS 2 | 55 | METRIC_VSZ, |
56 | #define METRIC_CPU 3 | 56 | METRIC_RSS, |
57 | char *metric_name = ""; | 57 | METRIC_CPU |
58 | }; | ||
59 | enum metric metric = METRIC_PROCS; | ||
58 | 60 | ||
59 | int verbose = 0; | 61 | int verbose = 0; |
60 | int uid; | 62 | int uid; |
@@ -62,11 +64,11 @@ int ppid; | |||
62 | int vsz; | 64 | int vsz; |
63 | int rss; | 65 | int rss; |
64 | float pcpu; | 66 | float pcpu; |
65 | char *statopts = ""; | 67 | char *statopts; |
66 | char *prog = ""; | 68 | char *prog; |
67 | char *args = ""; | 69 | char *args; |
68 | char *fmt = ""; | 70 | char *fmt; |
69 | char *fails = ""; | 71 | char *fails; |
70 | char tmp[MAX_INPUT_BUFFER]; | 72 | char tmp[MAX_INPUT_BUFFER]; |
71 | 73 | ||
72 | 74 | ||
@@ -317,54 +319,35 @@ process_arguments (int argc, char **argv) | |||
317 | print_revision (progname, revision); | 319 | print_revision (progname, revision); |
318 | exit (STATE_OK); | 320 | exit (STATE_OK); |
319 | case 't': /* timeout period */ | 321 | case 't': /* timeout period */ |
320 | if (!is_integer (optarg)) { | 322 | if (!is_integer (optarg)) |
321 | printf (_("%s: Timeout Interval must be an integer!\n\n"), | 323 | usage (_("Timeout Interval must be an integer!\n\n")); |
322 | progname); | 324 | else |
323 | print_usage (); | 325 | timeout_interval = atoi (optarg); |
324 | exit (STATE_UNKNOWN); | ||
325 | } | ||
326 | timeout_interval = atoi (optarg); | ||
327 | break; | 326 | break; |
328 | case 'c': /* critical threshold */ | 327 | case 'c': /* critical threshold */ |
329 | if (is_integer (optarg)) { | 328 | if (is_integer (optarg)) |
330 | cmax = atoi (optarg); | 329 | cmax = atoi (optarg); |
330 | else if (sscanf (optarg, ":%d", &cmax) == 1) | ||
331 | break; | 331 | break; |
332 | } | 332 | else if (sscanf (optarg, "%d:%d", &cmin, &cmax) == 2) |
333 | else if (sscanf (optarg, ":%d", &cmax) == 1) { | ||
334 | break; | 333 | break; |
335 | } | 334 | else if (sscanf (optarg, "%d:", &cmin) == 1) |
336 | else if (sscanf (optarg, "%d:%d", &cmin, &cmax) == 2) { | ||
337 | break; | 335 | break; |
338 | } | 336 | else |
339 | else if (sscanf (optarg, "%d:", &cmin) == 1) { | 337 | usage (_("Critical Process Count must be an integer!\n\n")); |
340 | break; | 338 | break; |
341 | } | ||
342 | else { | ||
343 | printf (_("%s: Critical Process Count must be an integer!\n\n"), | ||
344 | progname); | ||
345 | print_usage (); | ||
346 | exit (STATE_UNKNOWN); | ||
347 | } | ||
348 | case 'w': /* warning time threshold */ | 339 | case 'w': /* warning time threshold */ |
349 | if (is_integer (optarg)) { | 340 | if (is_integer (optarg)) |
350 | wmax = atoi (optarg); | 341 | wmax = atoi (optarg); |
342 | else if (sscanf (optarg, ":%d", &wmax) == 1) | ||
351 | break; | 343 | break; |
352 | } | 344 | else if (sscanf (optarg, "%d:%d", &wmin, &wmax) == 2) |
353 | else if (sscanf (optarg, ":%d", &wmax) == 1) { | ||
354 | break; | ||
355 | } | ||
356 | else if (sscanf (optarg, "%d:%d", &wmin, &wmax) == 2) { | ||
357 | break; | 345 | break; |
358 | } | 346 | else if (sscanf (optarg, "%d:", &wmin) == 1) |
359 | else if (sscanf (optarg, "%d:", &wmin) == 1) { | ||
360 | break; | 347 | break; |
361 | } | 348 | else |
362 | else { | 349 | usage (_("%s: Warning Process Count must be an integer!\n\n")); |
363 | printf (_("%s: Warning Process Count must be an integer!\n\n"), | 350 | break; |
364 | progname); | ||
365 | print_usage (); | ||
366 | exit (STATE_UNKNOWN); | ||
367 | } | ||
368 | case 'p': /* process id */ | 351 | case 'p': /* process id */ |
369 | if (sscanf (optarg, "%d%[^0-9]", &ppid, tmp) == 1) { | 352 | if (sscanf (optarg, "%d%[^0-9]", &ppid, tmp) == 1) { |
370 | asprintf (&fmt, "%s%sPPID = %d", fmt, (options ? ", " : ""), ppid); | 353 | asprintf (&fmt, "%s%sPPID = %d", fmt, (options ? ", " : ""), ppid); |
@@ -376,7 +359,10 @@ process_arguments (int argc, char **argv) | |||
376 | print_usage (); | 359 | print_usage (); |
377 | exit (STATE_UNKNOWN); | 360 | exit (STATE_UNKNOWN); |
378 | case 's': /* status */ | 361 | case 's': /* status */ |
379 | asprintf (&statopts, "%s", optarg); | 362 | if (statopts) |
363 | break; | ||
364 | else | ||
365 | statopts = strdup(optarg); | ||
380 | asprintf (&fmt, _("%s%sSTATE = %s"), fmt, (options ? ", " : ""), statopts); | 366 | asprintf (&fmt, _("%s%sSTATE = %s"), fmt, (options ? ", " : ""), statopts); |
381 | options |= STAT; | 367 | options |= STAT; |
382 | break; | 368 | break; |
@@ -408,13 +394,19 @@ process_arguments (int argc, char **argv) | |||
408 | options |= USER; | 394 | options |= USER; |
409 | break; | 395 | break; |
410 | case 'C': /* command */ | 396 | case 'C': /* command */ |
411 | asprintf (&prog, "%s", optarg); | 397 | if (prog) |
398 | break; | ||
399 | else | ||
400 | prog = strdup(optarg); | ||
412 | asprintf (&fmt, _("%s%scommand name '%s'"), fmt, (options ? ", " : ""), | 401 | asprintf (&fmt, _("%s%scommand name '%s'"), fmt, (options ? ", " : ""), |
413 | prog); | 402 | prog); |
414 | options |= PROG; | 403 | options |= PROG; |
415 | break; | 404 | break; |
416 | case 'a': /* args (full path name with args) */ | 405 | case 'a': /* args (full path name with args) */ |
417 | asprintf (&args, "%s", optarg); | 406 | if (args) |
407 | break; | ||
408 | else | ||
409 | args = strdup(optarg); | ||
418 | asprintf (&fmt, _("%s%sargs '%s'"), fmt, (options ? ", " : ""), args); | 410 | asprintf (&fmt, _("%s%sargs '%s'"), fmt, (options ? ", " : ""), args); |
419 | options |= ARGS; | 411 | options |= ARGS; |
420 | break; | 412 | break; |
@@ -521,6 +513,21 @@ validate_arguments () | |||
521 | if (options == 0) | 513 | if (options == 0) |
522 | options = ALL; | 514 | options = ALL; |
523 | 515 | ||
516 | if (statopts==NULL) | ||
517 | statopts = strdup(""); | ||
518 | |||
519 | if (prog==NULL) | ||
520 | prog = strdup(""); | ||
521 | |||
522 | if (args==NULL) | ||
523 | args = strdup(""); | ||
524 | |||
525 | if (fmt==NULL) | ||
526 | fmt = strdup(""); | ||
527 | |||
528 | if (fails==NULL) | ||
529 | fails = strdup(""); | ||
530 | |||
524 | return options; | 531 | return options; |
525 | } | 532 | } |
526 | 533 | ||