1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
--- plugins/check_swap.c.orig 2003-02-18 05:46:15.000000000 +0200
+++ plugins/check_swap.c 2004-08-23 17:08:21.328421472 +0300
@@ -70,30 +70,37 @@
#ifdef HAVE_PROC_MEMINFO
fp = fopen (PROC_MEMINFO, "r");
+ if (!fp) {
+ printf ("Could not open meminfo proc file\n");
+ return STATE_UNKNOWN;
+ }
asprintf (&status, "%s", "Swap used:");
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp)) {
- if (sscanf (input_buffer, " %s %lu %lu %lu", str, &total, &used, &free) == 4 &&
- strstr (str, "Swap")) {
- total_swap += total;
- used_swap += used;
+ if (sscanf (input_buffer, "%s %lu", str, &total) == 2 &&
+ strstr (str, "SwapTotal:")) {
+ total *= 1024;
+ total_swap += total;
+ used_swap += total_swap;
+ } else
+ if (sscanf (input_buffer, "%s %lu", str, &free) == 2 &&
+ strstr (str, "SwapFree:")) {
+ free *= 1024;
free_swap += free;
- if (allswaps) {
- percent = 100 * (((double) used) / ((double) total));
- if (percent >= crit_percent || free <= crit_size)
- result = max_state (STATE_CRITICAL, result);
- else if (percent >= warn_percent || free <= warn_size)
- result = max_state (STATE_WARNING, result);
- if (verbose)
- asprintf (&status, "%s [%lu/%lu]", status, used, total);
- }
+ used_swap -= free_swap;
}
}
- percent_used = 100 * (((double) used_swap) / ((double) total_swap));
- if (percent_used >= crit_percent || free_swap <= crit_size)
+
+ if (total_swap == 0) {
+ percent_used = 100;
result = max_state (STATE_CRITICAL, result);
- else if (percent_used >= warn_percent || free_swap <= warn_size)
- result = max_state (STATE_WARNING, result);
- asprintf (&status, "%s %2d%% (%lu out of %lu)", status, percent_used,
+ } else {
+ percent_used = 100 * (0.005 + ((double) used_swap) / ((double) total_swap));
+ if (percent_used >= crit_percent || free_swap <= crit_size)
+ result = max_state (STATE_CRITICAL, result);
+ else if (percent_used >= warn_percent || free_swap <= warn_size)
+ result = max_state (STATE_WARNING, result);
+ }
+ asprintf (&status, "%s %2d%% (%lu out of %lu)", status, percent_used,
used_swap, total_swap);
fclose (fp);
#else
|