X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_load.c;h=896e356b6114098bcc9a217e091de310ff4952c7;hb=07a08052081b59d26add4adf0ae4519fbacb8a36;hp=6673b1dcaf55ae0ec6923e507a33e45be417e1a8;hpb=44a321cb8a42d6c0ea2d96a1086a17f2134c89cc;p=nagiosplug.git diff --git a/plugins/check_load.c b/plugins/check_load.c index 6673b1d..896e356 100644 --- a/plugins/check_load.c +++ b/plugins/check_load.c @@ -44,10 +44,9 @@ #endif -#define PROGNAME "check_load" +const char *progname = "check_load"; int process_arguments (int argc, char **argv); -int call_getopt (int argc, char **argv); int validate_arguments (void); void print_usage (void); void print_help (void); @@ -152,41 +151,7 @@ main (int argc, char **argv) int process_arguments (int argc, char **argv) { - int c; - - if (argc < 2) - return ERROR; - - c = 0; - while (c += (call_getopt (argc - c, &argv[c]))) { - if (argc <= c) - break; - - if (wload1 < 0 && is_nonnegative (argv[c])) - wload1 = atof (argv[c]); - else if (cload1 < 0 && is_nonnegative (argv[c])) - cload1 = atof (argv[c]); - else if (wload5 < 0 && is_nonnegative (argv[c])) - wload5 = atof (argv[c]); - else if (cload5 < 0 && is_nonnegative (argv[c])) - cload5 = atof (argv[c]); - else if (wload15 < 0 && is_nonnegative (argv[c])) - wload15 = atof (argv[c]); - else if (cload15 < 0 && is_nonnegative (argv[c])) - cload15 = atof (argv[c]); - } - - return validate_arguments (); -} - - - - - -int -call_getopt (int argc, char **argv) -{ - int c, i = 0; + int c = 0; #ifdef HAVE_GETOPT_H int option_index = 0; @@ -199,61 +164,55 @@ call_getopt (int argc, char **argv) }; #endif +#define OPTCHARS "Vhc:w:" + + if (argc < 2) + return ERROR; + while (1) { #ifdef HAVE_GETOPT_H - c = getopt_long (argc, argv, "+?Vhc:w:", long_options, &option_index); + c = getopt_long (argc, argv, OPTCHARS, long_options, &option_index); #else - c = getopt (argc, argv, "+?Vhc:w:"); + c = getopt (argc, argv, OPTCHARS); #endif - - i++; - if (c == -1 || c == EOF) break; - switch (c) { - case 'c': - case 'w': - i++; - } - switch (c) { case 'w': /* warning time threshold */ if (is_intnonneg (optarg)) { - if (wload1 < 0 && is_nonnegative (argv[c])) - wload1 = atof (argv[c]); - else if (wload5 < 0 && is_nonnegative (argv[c])) - wload5 = atof (argv[c]); - else if (wload15 < 0 && is_nonnegative (argv[c])) - wload15 = atof (argv[c]); + wload1 = atof (optarg); + wload5 = atof (optarg); + wload15 = atof (optarg); break; } else if (strstr (optarg, ",") && - sscanf (optarg, "%f,%f,%f", &wload1, &wload5, &wload15) == 3) { + sscanf (optarg, "%f,%f,%f", &wload1, &wload5, &wload15) == 3) break; - } - else { + else if (strstr (optarg, ":") && + sscanf (optarg, "%f:%f:%f", &wload1, &wload5, &wload15) == 3) + break; + else usage ("Warning threshold must be float or float triplet!\n"); - } + break; case 'c': /* critical time threshold */ if (is_intnonneg (optarg)) { - if (cload1 < 0 && is_nonnegative (argv[c])) - cload1 = atof (argv[c]); - else if (cload5 < 0 && is_nonnegative (argv[c])) - cload5 = atof (argv[c]); - else if (cload15 < 0 && is_nonnegative (argv[c])) - cload15 = atof (argv[c]); + cload1 = atof (optarg); + cload5 = atof (optarg); + cload15 = atof (optarg); break; } else if (strstr (optarg, ",") && - sscanf (optarg, "%f,%f,%f", &cload1, &cload5, &cload15) == 3) { + sscanf (optarg, "%f,%f,%f", &cload1, &cload5, &cload15) == 3) break; - } - else { + else if (strstr (optarg, ":") && + sscanf (optarg, "%f:%f:%f", &cload1, &cload5, &cload15) == 3) + break; + else usage ("Critical threshold must be float or float triplet!\n"); - } + break; case 'V': /* version */ - print_revision (my_basename (argv[0]), "$Revision$"); + print_revision (progname, "$Revision$"); exit (STATE_OK); case 'h': /* help */ print_help (); @@ -262,7 +221,39 @@ call_getopt (int argc, char **argv) usage ("Invalid argument\n"); } } - return i; + + c = optind; + if (c == argc) + return validate_arguments (); + if (wload1 < 0 && is_nonnegative (argv[c])) + wload1 = atof (argv[c++]); + + if (c == argc) + return validate_arguments (); + if (cload1 < 0 && is_nonnegative (argv[c])) + cload1 = atof (argv[c++]); + + if (c == argc) + return validate_arguments (); + if (wload5 < 0 && is_nonnegative (argv[c])) + wload5 = atof (argv[c++]); + + if (c == argc) + return validate_arguments (); + if (cload5 < 0 && is_nonnegative (argv[c])) + cload5 = atof (argv[c++]); + + if (c == argc) + return validate_arguments (); + if (wload15 < 0 && is_nonnegative (argv[c])) + wload15 = atof (argv[c++]); + + if (c == argc) + return validate_arguments (); + if (cload15 < 0 && is_nonnegative (argv[c])) + cload15 = atof (argv[c++]); + + return validate_arguments (); } @@ -272,12 +263,24 @@ call_getopt (int argc, char **argv) int validate_arguments (void) { - if ((wload1 > cload1) || (wload5 > cload5) || (wload15 > cload15)) { - printf - ("Inconsistence in parameters: \"warning load\" greater than \"critical load\".\n"); - return STATE_UNKNOWN; - } - + if (wload1 < 0) + usage ("Warning threshold for 1-minute load average is not specified\n"); + if (wload5 < 0) + usage ("Warning threshold for 5-minute load average is not specified\n"); + if (wload15 < 0) + usage ("Warning threshold for 15-minute load average is not specified\n"); + if (cload1 < 0) + usage ("Critical threshold for 1-minute load average is not specified\n"); + if (cload5 < 0) + usage ("Critical threshold for 5-minute load average is not specified\n"); + if (cload15 < 0) + usage ("Critical threshold for 15-minute load average is not specified\n"); + if (wload1 > cload1) + usage ("Parameter inconsistency: 1-minute \"warning load\" greater than \"critical load\".\n"); + if (wload5 > cload5) + usage ("Parameter inconsistency: 5-minute \"warning load\" greater than \"critical load\".\n"); + if (wload15 > cload15) + usage ("Parameter inconsistency: 15-minute \"warning load\" greater than \"critical load\".\n"); return OK; } @@ -300,7 +303,7 @@ print_usage (void) void print_help (void) { - print_revision (PROGNAME, "$Revision$"); + print_revision (progname, "$Revision$"); printf ("Copyright (c) 1999 Felipe Gustavo de Almeida \n" "Copyright (c) 2000 Karl DeBisschop\n\n"