Code

Reference to web site to get NSClient
[nagiosplug.git] / plugins / check_mrtgtraf.c
index 11f5146b86a484d51f8746051b04cf9de908a710..21791ae9f25f7b89db2012872c87368fad8b5669 100644 (file)
 #include "common.h"
 #include "utils.h"
 
-#define PROGNAME "check_mrtgtraf"
+const char *progname = "check_mrtgtraf";
 
 int process_arguments (int, char **);
-int call_getopt (int, char **);
 int validate_arguments (void);
 void print_help (void);
 void print_usage (void);
@@ -77,7 +76,7 @@ main (int argc, char **argv)
        char input_buffer[MAX_INPUT_BUFFER];
        char *temp_buffer;
        time_t current_time;
-       char error_message[MAX_INPUT_BUFFER];
+       char *error_message;
        time_t timestamp = 0L;
        unsigned long average_incoming_rate = 0L;
        unsigned long average_outgoing_rate = 0L;
@@ -198,27 +197,26 @@ main (int argc, char **argv)
        if (incoming_rate > incoming_critical_threshold
                        || outgoing_rate > outgoing_critical_threshold) {
                result = STATE_CRITICAL;
-               sprintf (error_message, "%s. In = %0.1f %s, %s. Out = %0.1f %s",
-                                                (use_average == TRUE) ? "Ave" : "Max", adjusted_incoming_rate,
-                                                incoming_speed_rating, (use_average == TRUE) ? "Ave" : "Max",
+               asprintf (&error_message, "Traffic CRITICAL %s. In = %0.1f %s, %s. Out = %0.1f %s",
+                                                (use_average == TRUE) ? "Avg" : "Max", adjusted_incoming_rate,
+                                                incoming_speed_rating, (use_average == TRUE) ? "Avg" : "Max",
                                                 adjusted_outgoing_rate, outgoing_speed_rating);
        }
        else if (incoming_rate > incoming_warning_threshold
                                         || outgoing_rate > outgoing_warning_threshold) {
                result = STATE_WARNING;
-               sprintf (error_message, "%s. In = %0.1f %s, %s. Out = %0.1f %s",
-                                                (use_average == TRUE) ? "Ave" : "Max", adjusted_incoming_rate,
-                                                incoming_speed_rating, (use_average == TRUE) ? "Ave" : "Max",
+               asprintf (&error_message, "Traffic WARNING %s. In = %0.1f %s, %s. Out = %0.1f %s",
+                                                (use_average == TRUE) ? "Avg" : "Max", adjusted_incoming_rate,
+                                                incoming_speed_rating, (use_average == TRUE) ? "Avg" : "Max",
                                                 adjusted_outgoing_rate, outgoing_speed_rating);
        }
-
-       if (result == STATE_OK)
-               printf ("Traffic ok - %s. In = %0.1f %s, %s. Out = %0.1f %s\n",
-                                               (use_average == TRUE) ? "Ave" : "Max", adjusted_incoming_rate,
-                                               incoming_speed_rating, (use_average == TRUE) ? "Ave" : "Max",
+       else if (result == STATE_OK)
+               printf ("Traffic OK - %s. In = %0.1f %s, %s. Out = %0.1f %s\n",
+                                               (use_average == TRUE) ? "Avg" : "Max", adjusted_incoming_rate,
+                                               incoming_speed_rating, (use_average == TRUE) ? "Avg" : "Max",
                                                adjusted_outgoing_rate, outgoing_speed_rating);
        else
-               printf ("%s\n", error_message);
+               printf ("UNKNOWN %s\n", error_message);
 
        return result;
 }
@@ -233,68 +231,8 @@ process_arguments (int argc, char **argv)
 {
        int c;
 
-       if (argc < 2)
-               return ERROR;
-
-       for (c = 1; c < argc; c++) {
-               if (strcmp ("-to", argv[c]) == 0)
-                       strcpy (argv[c], "-t");
-               else if (strcmp ("-wt", argv[c]) == 0)
-                       strcpy (argv[c], "-w");
-               else if (strcmp ("-ct", argv[c]) == 0)
-                       strcpy (argv[c], "-c");
-       }
-
-
-
-       c = 0;
-       while ((c += (call_getopt (argc - c, &argv[c]))) < argc) {
-
-               if (is_option (argv[c]))
-                       continue;
-
-               if (log_file == NULL) {
-                       log_file = argv[c];
-               }
-               else if (expire_minutes == -1) {
-                       expire_minutes = atoi (optarg);
-               }
-               else if (strcmp (argv[c], "MAX") == 0) {
-                       use_average = FALSE;
-               }
-               else if (strcmp (argv[c], "AVG") == 0) {
-                       use_average = TRUE;
-               }
-               else if (incoming_warning_threshold == 0) {
-                       incoming_warning_threshold = strtoul (argv[c], NULL, 10);
-               }
-               else if (incoming_critical_threshold == 0) {
-                       incoming_critical_threshold = strtoul (argv[c], NULL, 10);
-               }
-               else if (outgoing_warning_threshold == 0) {
-                       outgoing_warning_threshold = strtoul (argv[c], NULL, 10);
-               }
-               else if (outgoing_critical_threshold == 0) {
-                       outgoing_critical_threshold = strtoul (argv[c], NULL, 10);
-               }
-       }
-
-       return validate_arguments ();
-}
-
-
-
-
-
-
-int
-call_getopt (int argc, char **argv)
-{
-       int c, i = 0;
-
-#ifdef HAVE_GETOPT_H
        int option_index = 0;
-       static struct option long_options[] = {
+       static struct option longopts[] = {
                {"logfile", required_argument, 0, 'F'},
                {"expires", required_argument, 0, 'e'},
                {"aggregation", required_argument, 0, 'a'},
@@ -306,29 +244,24 @@ call_getopt (int argc, char **argv)
                {"help", no_argument, 0, 'h'},
                {0, 0, 0, 0}
        };
-#endif
 
-       while (1) {
-#ifdef HAVE_GETOPT_H
-               c =
-                       getopt_long (argc, argv, "+hVF:e:a:c:w:", long_options, &option_index);
-#else
-               c = getopt (argc, argv, "+hVF:e:a:c:w:");
-#endif
+       if (argc < 2)
+               return ERROR;
 
-               i++;
+       for (c = 1; c < argc; c++) {
+               if (strcmp ("-to", argv[c]) == 0)
+                       strcpy (argv[c], "-t");
+               else if (strcmp ("-wt", argv[c]) == 0)
+                       strcpy (argv[c], "-w");
+               else if (strcmp ("-ct", argv[c]) == 0)
+                       strcpy (argv[c], "-c");
+       }
 
-               if (c == -1 || c == EOF || c == 1)
-                       break;
+       while (1) {
+               c = getopt_long (argc, argv, "hVF:e:a:c:w:", longopts, &option_index);
 
-               switch (c) {
-               case 'F':
-               case 'e':
-               case 'a':
-               case 'c':
-               case 'w':
-                       i++;
-               }
+               if (c == -1 || c == EOF)
+                       break;
 
                switch (c) {
                case 'F':                                                                       /* input file */
@@ -352,7 +285,7 @@ call_getopt (int argc, char **argv)
                                                        &outgoing_warning_threshold);
                        break;
                case 'V':                                                                       /* version */
-                       print_revision (PROGNAME, "$Revision$");
+                       print_revision (progname, "$Revision$");
                        exit (STATE_OK);
                case 'h':                                                                       /* help */
                        print_help ();
@@ -361,7 +294,42 @@ call_getopt (int argc, char **argv)
                        usage ("Invalid argument\n");
                }
        }
-       return i;
+
+       c = optind;
+       if (argc > c && log_file == NULL) {
+               log_file = argv[c++];
+       }
+
+       if (argc > c && expire_minutes == -1) {
+               expire_minutes = atoi (argv[c++]);
+       }
+
+       if (argc > c && strcmp (argv[c], "MAX") == 0) {
+               use_average = FALSE;
+               c++;
+       }
+       else if (argc > c && strcmp (argv[c], "AVG") == 0) {
+               use_average = TRUE;
+               c++;
+       }
+
+       if (argc > c && incoming_warning_threshold == 0) {
+               incoming_warning_threshold = strtoul (argv[c++], NULL, 10);
+       }
+
+       if (argc > c && incoming_critical_threshold == 0) {
+               incoming_critical_threshold = strtoul (argv[c++], NULL, 10);
+       }
+
+       if (argc > c && outgoing_warning_threshold == 0) {
+               outgoing_warning_threshold = strtoul (argv[c++], NULL, 10);
+       }
+       
+       if (argc > c && outgoing_critical_threshold == 0) {
+               outgoing_critical_threshold = strtoul (argv[c++], NULL, 10);
+       }
+
+       return validate_arguments ();
 }
 
 
@@ -381,7 +349,7 @@ validate_arguments (void)
 void
 print_help (void)
 {
-       print_revision (PROGNAME, "$Revision$");
+       print_revision (progname, "$Revision$");
        printf
                ("Copyright (c) 2000 Tom Shields/Karl DeBisschop\n\n"
                 "This plugin tests the UPS service on the specified host.\n\n");
@@ -415,5 +383,5 @@ print_usage (void)
                ("Usage: %s  -F <log_file> -a <AVG | MAX> -v <variable> -w <warning_pair> -c <critical_pair>\n"
                 "            [-e expire_minutes] [-t timeout] [-v]\n"
                 "       %s --help\n"
-                "       %s --version\n", PROGNAME, PROGNAME, PROGNAME);
+                "       %s --version\n", progname, progname, progname);
 }