Code

use float for time in perf data
[nagiosplug.git] / plugins / check_mrtg.c
index 21efac2e901f32c22e64d49c96c3dd3eb3841a87..e13826446553254a56e17ed6a3746ed4867d5080 100644 (file)
@@ -35,8 +35,8 @@ int use_average = TRUE;
 int variable_number = -1;
 unsigned long value_warning_threshold = 0L;
 unsigned long value_critical_threshold = 0L;
-char *value_label;
-char *units_label;
+char *label;
+char *units;
 
 int
 main (int argc, char **argv)
@@ -47,11 +47,15 @@ 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* message;
        time_t timestamp = 0L;
        unsigned long average_value_rate = 0L;
        unsigned long maximum_value_rate = 0L;
-       unsigned long value_rate = 0L;
+       unsigned long rate = 0L;
+
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
 
        if (process_arguments (argc, argv) != OK)
                usage (_("Invalid command arguments supplied\n"));
@@ -107,7 +111,7 @@ main (int argc, char **argv)
        /* if we couldn't read enough data, return an unknown error */
        if (line <= 2) {
                result = STATE_UNKNOWN;
-               sprintf (error_message, _("Unable to process MRTG log file\n"));
+               asprintf (&message, _("Unable to process MRTG log file\n"));
        }
 
        /* make sure the MRTG data isn't too old */
@@ -116,29 +120,33 @@ main (int argc, char **argv)
                if (expire_minutes > 0
                                && (current_time - timestamp) > (expire_minutes * 60)) {
                        result = STATE_WARNING;
-                       sprintf (error_message, _("MRTG data has expired (%d minutes old)\n"),
+                       asprintf (&message, _("MRTG data has expired (%d minutes old)\n"),
                                                         (int) ((current_time - timestamp) / 60));
                }
        }
 
        /* else check the incoming/outgoing rates */
        if (result == STATE_OK) {
-
                if (use_average == TRUE)
-                       value_rate = average_value_rate;
+                       rate = average_value_rate;
                else
-                       value_rate = maximum_value_rate;
+                       rate = maximum_value_rate;
 
-               if (value_rate > value_critical_threshold)
+               if (rate > value_critical_threshold)
                        result = STATE_CRITICAL;
-               else if (value_rate > value_warning_threshold)
+               else if (rate > value_warning_threshold)
                        result = STATE_WARNING;
+
+               asprintf (&message, "%s. %s = %lu %s|%s",
+                         (use_average == TRUE) ? _("Avg") : _("Max"),
+                         label, rate, units,
+                         perfdata(label, (long) rate, units,
+                                  (int) value_warning_threshold, (long) value_warning_threshold,
+                                  (int) value_critical_threshold, (long) value_critical_threshold,
+                                  0, 0, 0, 0));
        }
 
-       sprintf (error_message, "%s. %s = %lu %s",
-                                        (use_average == TRUE) ? _("Ave") : _("Max"), value_label, value_rate,
-                                        units_label);
-       printf ("%s\n", error_message);
+       printf ("%s\n", message);
 
        return result;
 }
@@ -149,8 +157,8 @@ process_arguments (int argc, char **argv)
 {
        int c;
 
-       int option_index = 0;
-       static struct option long_options[] = {
+       int option = 0;
+       static struct option longopts[] = {
                {"logfile", required_argument, 0, 'F'},
                {"expires", required_argument, 0, 'e'},
                {"aggregation", required_argument, 0, 'a'},
@@ -178,8 +186,8 @@ process_arguments (int argc, char **argv)
        }
 
        while (1) {
-               c = getopt_long (argc, argv, "hVF:e:a:v:c:w:l:u:", long_options,
-                                                                        &option_index);
+               c = getopt_long (argc, argv, "hVF:e:a:v:c:w:l:u:", longopts,
+                                                                        &option);
 
                if (c == -1 || c == EOF)
                        break;
@@ -209,10 +217,10 @@ process_arguments (int argc, char **argv)
                        value_critical_threshold = strtoul (optarg, NULL, 10);
                        break;
                case 'l':                                                                       /* label */
-                       value_label = optarg;
+                       label = optarg;
                        break;
                case 'u':                                                                       /* timeout */
-                       units_label = optarg;
+                       units = optarg;
                        break;
                case 'V':                                                                       /* version */
                        print_revision (progname, revision);
@@ -264,12 +272,12 @@ process_arguments (int argc, char **argv)
                value_critical_threshold = strtoul (argv[c++], NULL, 10);
        }
 
-       if (argc > c && strlen (value_label) == 0) {
-               value_label = argv[c++];
+       if (argc > c && strlen (label) == 0) {
+               label = argv[c++];
        }
 
-       if (argc > c && strlen (units_label) == 0) {
-               units_label = argv[c++];
+       if (argc > c && strlen (units) == 0) {
+               units = argv[c++];
        }
 
        return validate_arguments ();
@@ -281,11 +289,11 @@ validate_arguments (void)
        if (variable_number == -1)
                usage (_("You must supply the variable number\n"));
 
-       if (value_label == NULL)
-               value_label = strdup ("");
+       if (label == NULL)
+               label = strdup ("value");
 
-       if (units_label == NULL)
-               units_label = strdup ("");
+       if (units == NULL)
+               units = strdup ("");
 
        return OK;
 }