summaryrefslogtreecommitdiff
blob: 9daceedac56e42ceb74e21a45a81972e7702efdd (plain)
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