Code

Added perfdata
[nagiosplug.git] / plugins / check_swap.c
index 367c720d2d2a8313d7c51b07920e0c2174ab79f7..3bf7d432c9f63839bdcde92cd759c833fdcbea00 100644 (file)
@@ -40,8 +40,8 @@ int validate_arguments (void);
 void print_usage (void);
 void print_help (void);
 
-int warn_percent = 200;
-int crit_percent = 200;
+int warn_percent = 0;
+int crit_percent = 0;
 long unsigned int warn_size = 0;
 long unsigned int crit_size = 0;
 int verbose;
@@ -55,6 +55,7 @@ main (int argc, char **argv)
        long unsigned int dsktotal, dskused, dskfree;
        int result = STATE_OK;
        char input_buffer[MAX_INPUT_BUFFER];
+       char *perf;
 #ifdef HAVE_PROC_MEMINFO
        FILE *fp;
 #else
@@ -73,6 +74,7 @@ main (int argc, char **argv)
        textdomain (PACKAGE);
 
        status = strdup("");
+       perf = strdup("");
 
        if (process_arguments (argc, argv) != OK)
                usage (_("Invalid command arguments supplied\n"));
@@ -222,7 +224,12 @@ main (int argc, char **argv)
        asprintf (&status, _(" %d%% free (%lu MB out of %lu MB)%s"),
                                                (100 - percent_used), free_swap, total_swap, status);
 
-       die (result, "SWAP %s:%s\n", state_text (result), status);
+       asprintf (&perf, "%s", perfdata ("swap", free_swap, "MB",
+               TRUE, max (warn_size/1024, warn_percent/100.0*total_swap),
+               TRUE, max (crit_size/1024, crit_percent/100.0*total_swap),
+               TRUE, 0,
+               TRUE, total_swap));
+       die (result, "SWAP %s:%s |%s\n", state_text (result), status, perf);
        return STATE_UNKNOWN;
 }
 
@@ -233,11 +240,12 @@ int
 check_swap (int usp, long unsigned int free_swap)
 {
        int result = STATE_UNKNOWN;
-       if (usp >= 0 && usp >= (100.0 - crit_percent))
+       free_swap = free_swap * 1024;           /* Convert back to bytes as warn and crit specified in bytes */
+       if (usp >= 0 && crit_percent != 0 && usp >= (100.0 - crit_percent))
                result = STATE_CRITICAL;
        else if (crit_size > 0 && free_swap <= crit_size)
                result = STATE_CRITICAL;
-       else if (usp >= 0 && usp >= (100.0 - warn_percent))
+       else if (usp >= 0 && warn_percent != 0 && usp >= (100.0 - warn_percent))
                result = STATE_WARNING;
        else if (warn_size > 0 && free_swap <= warn_size)
                result = STATE_WARNING;
@@ -328,12 +336,12 @@ process_arguments (int argc, char **argv)
        c = optind;
        if (c == argc)
                return validate_arguments ();
-       if (warn_percent > 100 && is_intnonneg (argv[c]))
+       if (warn_percent == 0 && is_intnonneg (argv[c]))
                warn_percent = atoi (argv[c++]);
 
        if (c == argc)
                return validate_arguments ();
-       if (crit_percent > 100 && is_intnonneg (argv[c]))
+       if (crit_percent == 0 && is_intnonneg (argv[c]))
                crit_percent = atoi (argv[c++]);
 
        if (c == argc)
@@ -356,7 +364,7 @@ process_arguments (int argc, char **argv)
 int
 validate_arguments (void)
 {
-       if (warn_percent > 100 && crit_percent > 100 && warn_size == 0
+       if (warn_percent == 0 && crit_percent == 0 && warn_size == 0
                        && crit_size == 0) {
                return ERROR;
        }