diff options
Diffstat (limited to 'plugins/check_swap.c')
-rw-r--r-- | plugins/check_swap.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/plugins/check_swap.c b/plugins/check_swap.c index 1155ed0e..f6bbd335 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c | |||
@@ -52,7 +52,7 @@ main (int argc, char **argv) | |||
52 | { | 52 | { |
53 | int percent_used, percent; | 53 | int percent_used, percent; |
54 | unsigned long long total_swap = 0, used_swap = 0, free_swap = 0; | 54 | unsigned long long total_swap = 0, used_swap = 0, free_swap = 0; |
55 | unsigned long long dsktotal, dskused, dskfree, tmp; | 55 | unsigned long long dsktotal = 0, dskused = 0, dskfree = 0, tmp = 0; |
56 | int result = STATE_OK; | 56 | int result = STATE_OK; |
57 | char input_buffer[MAX_INPUT_BUFFER]; | 57 | char input_buffer[MAX_INPUT_BUFFER]; |
58 | char *perf; | 58 | char *perf; |
@@ -64,6 +64,11 @@ main (int argc, char **argv) | |||
64 | char *temp_buffer; | 64 | char *temp_buffer; |
65 | char *swap_command; | 65 | char *swap_command; |
66 | char *swap_format; | 66 | char *swap_format; |
67 | # else | ||
68 | # ifdef HAVE_DECL_SWAPCTL | ||
69 | int i=0, nswaps=0; | ||
70 | swaptbl_t tbl; | ||
71 | # endif /* HAVE_DECL_SWAPCTL */ | ||
67 | # endif | 72 | # endif |
68 | #endif | 73 | #endif |
69 | char str[32]; | 74 | char str[32]; |
@@ -230,6 +235,43 @@ main (int argc, char **argv) | |||
230 | /* close the pipe */ | 235 | /* close the pipe */ |
231 | if (spclose (child_process)) | 236 | if (spclose (child_process)) |
232 | result = max_state (result, STATE_WARNING); | 237 | result = max_state (result, STATE_WARNING); |
238 | # else | ||
239 | # ifdef HAVE_DECL_SWAPCTL | ||
240 | |||
241 | /* initialize swap table entries */ | ||
242 | memset(&tbl, 0, sizeof(swaptbl_t)); | ||
243 | tbl.swt_ent[0].ste_path=(char*)malloc(sizeof(char)*(MAXPATHLEN+1)); | ||
244 | memset(tbl.swt_ent[0].ste_path, 0, sizeof(char)*(MAXPATHLEN+1)); | ||
245 | tbl.swt_n=1; | ||
246 | |||
247 | /* get the number of active swap devices */ | ||
248 | nswaps=swapctl(SC_GETNSWP, NULL); | ||
249 | |||
250 | /* and now, tally 'em up */ | ||
251 | for(i=0;i<nswaps;i++){ | ||
252 | swapctl(SC_LIST, &tbl); | ||
253 | /* on tru64, swap is stored in 8k pages. i'd | ||
254 | use conv_factor or SWAP_CONVERSION, but they're | ||
255 | both buried under a bunch of ifdef's. ideally | ||
256 | all functions could call getpagesize(2)... */ | ||
257 | dsktotal = tbl.swt_ent[0].ste_pages / 128; | ||
258 | dskfree = tbl.swt_ent[0].ste_free / 128; | ||
259 | dskused = ( total_swap - free_swap ); | ||
260 | |||
261 | if(allswaps && dsktotal > 0){ | ||
262 | percent = 100 * (((double) dskused) / ((double) dsktotal)); | ||
263 | result = max_state (result, check_swap (percent, dskfree)); | ||
264 | } | ||
265 | |||
266 | total_swap += dsktotal; | ||
267 | free_swap += dskfree; | ||
268 | used_swap += dskused; | ||
269 | } | ||
270 | |||
271 | /* and clean up after ourselves */ | ||
272 | free(tbl.swt_ent[0].ste_path); | ||
273 | |||
274 | # endif /* HAVE_DECL_SWAPCTL */ | ||
233 | # endif /* HAVE_SWAP */ | 275 | # endif /* HAVE_SWAP */ |
234 | #endif /* HAVE_PROC_MEMINFO */ | 276 | #endif /* HAVE_PROC_MEMINFO */ |
235 | 277 | ||