--- 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