diff options
-rw-r--r-- | plugins/check_swap.c | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/plugins/check_swap.c b/plugins/check_swap.c index 8e0a589..da18ccb 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c | |||
@@ -26,7 +26,8 @@ int warn_percent = 200, crit_percent = 200, warn_size = -1, crit_size = -1; | |||
26 | int | 26 | int |
27 | main (int argc, char **argv) | 27 | main (int argc, char **argv) |
28 | { | 28 | { |
29 | int total_swap, used_swap, free_swap, percent_used; | 29 | int total_swap = 0, used_swap = 0, free_swap = 0, percent_used; |
30 | int total, used, free; | ||
30 | int result = STATE_OK; | 31 | int result = STATE_OK; |
31 | char input_buffer[MAX_INPUT_BUFFER]; | 32 | char input_buffer[MAX_INPUT_BUFFER]; |
32 | #ifdef HAVE_SWAP | 33 | #ifdef HAVE_SWAP |
@@ -36,7 +37,7 @@ main (int argc, char **argv) | |||
36 | FILE *fp; | 37 | FILE *fp; |
37 | #endif | 38 | #endif |
38 | char str[32]; | 39 | char str[32]; |
39 | char *status = NULL; | 40 | char *status = ""; |
40 | 41 | ||
41 | if (process_arguments (argc, argv) != OK) | 42 | if (process_arguments (argc, argv) != OK) |
42 | usage ("Invalid command arguments supplied\n"); | 43 | usage ("Invalid command arguments supplied\n"); |
@@ -45,19 +46,21 @@ main (int argc, char **argv) | |||
45 | fp = fopen (PROC_MEMINFO, "r"); | 46 | fp = fopen (PROC_MEMINFO, "r"); |
46 | asprintf (&status, "%s", "Swap used:"); | 47 | asprintf (&status, "%s", "Swap used:"); |
47 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { | 48 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) { |
48 | sscanf (input_buffer, " %s %d %d %d", str, &total_swap, &used_swap, | 49 | if (sscanf (input_buffer, " %s %d %d %d", str, &total, &used, &free) == 4 && |
49 | &free_swap); | 50 | strstr (str, "Swap")) { |
50 | if (strstr (str, "Swap")) { | 51 | /* asprintf (&status, "%s [%d/%d]", status, used, total); */ |
51 | percent_used = 100 * (((float) used_swap) / ((float) total_swap)); | 52 | total_swap += total; |
52 | asprintf (&status, "%s %2d%% (%d bytes out of %d)", | 53 | used_swap += used; |
53 | status, percent_used, used_swap, total_swap); | 54 | free_swap += free; |
54 | if (percent_used >= crit_percent || free_swap <= crit_size) | ||
55 | result = STATE_CRITICAL; | ||
56 | else if (percent_used >= warn_percent || free_swap <= warn_size) | ||
57 | result = STATE_WARNING; | ||
58 | break; | ||
59 | } | 55 | } |
60 | } | 56 | } |
57 | percent_used = 100 * (((float) used_swap) / ((float) total_swap)); | ||
58 | if (percent_used >= crit_percent || free_swap <= crit_size) | ||
59 | result = STATE_CRITICAL; | ||
60 | else if (percent_used >= warn_percent || free_swap <= warn_size) | ||
61 | result = STATE_WARNING; | ||
62 | asprintf (&status, "%s %2d%% (%d out of %d)", status, percent_used, | ||
63 | used_swap, total_swap); | ||
61 | fclose (fp); | 64 | fclose (fp); |
62 | #else | 65 | #else |
63 | #ifdef HAVE_SWAP | 66 | #ifdef HAVE_SWAP |
@@ -89,16 +92,20 @@ main (int argc, char **argv) | |||
89 | 92 | ||
90 | asprintf (&status, "%s", "Swap used:"); | 93 | asprintf (&status, "%s", "Swap used:"); |
91 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { | 94 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { |
92 | sscanf (input_buffer, SWAP_FORMAT, &total_swap, &free_swap); | 95 | sscanf (input_buffer, SWAP_FORMAT, &total, &free); |
93 | used_swap = total_swap - free_swap; | 96 | used = total - free; |
94 | percent_used = 100 * ((float) used_swap) / ((float) total_swap); | 97 | /* asprintf (&status, "%s [%d/%d]", status, used, total); */ |
95 | asprintf (&status, "%s %2d%% (%d bytes out of %d)", | 98 | total_swap += total; |
96 | status, percent_used, used_swap, total_swap); | 99 | used_swap += used; |
97 | if (percent_used >= crit_percent || free_swap <= crit_size) | 100 | free_swap += free; |
98 | result = STATE_CRITICAL; | ||
99 | else if (percent_used >= warn_percent || free_swap <= warn_size) | ||
100 | result = STATE_WARNING; | ||
101 | } | 101 | } |
102 | percent_used = 100 * ((float) used_swap) / ((float) total_swap); | ||
103 | asprintf (&status, "%s %2d%% (%d out of %d)", | ||
104 | status, percent_used, used_swap, total_swap); | ||
105 | if (percent_used >= crit_percent || free_swap <= crit_size) | ||
106 | result = STATE_CRITICAL; | ||
107 | else if (percent_used >= warn_percent || free_swap <= warn_size) | ||
108 | result = STATE_WARNING; | ||
102 | 109 | ||
103 | /* If we get anything on STDERR, at least set warning */ | 110 | /* If we get anything on STDERR, at least set warning */ |
104 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) | 111 | while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) |