[monitoring-plugins] check_disk - show all disks if state is ok and ...

Oliver Skibbe git at monitoring-plugins.org
Sat Nov 19 16:40:11 CET 2016


 Module: monitoring-plugins
 Branch: master
 Commit: 5663b037170da16802918eb57e73c6fb27a825f3
 Author: Oliver Skibbe <oliskibbe at gmail.com>
   Date: Fri Nov  4 11:35:12 2016 +0100
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=5663b03

check_disk - show all disks if state is ok and option error only is used

This fix changes output of check_disk in case of --error-only/-e option
is used and state is ok

 - Old output: DISK OK
 - New output: DISK OK - free space: / 159731 MB (83% inode=61%);
   /dev/shm 2926 MB (100% inode=99%); /boot 58 MB (32% inode=99%);

Resolves: #1420

---

 plugins/check_disk.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/plugins/check_disk.c b/plugins/check_disk.c
index 874a0ee..8e793c9 100644
--- a/plugins/check_disk.c
+++ b/plugins/check_disk.c
@@ -168,6 +168,7 @@ main (int argc, char **argv)
   int result = STATE_UNKNOWN;
   int disk_result = STATE_UNKNOWN;
   char *output;
+  char *ko_output;
   char *details;
   char *perf;
   char *preamble;
@@ -187,6 +188,7 @@ main (int argc, char **argv)
 
   preamble = strdup (" - free space:");
   output = strdup ("");
+  ko_output = strdup ("");
   details = strdup ("");
   perf = strdup ("");
   stat_buf = malloc(sizeof *stat_buf);
@@ -351,9 +353,6 @@ main (int argc, char **argv)
                           TRUE, 0,
                           TRUE, path->dtotal_units));
 
-      if (disk_result==STATE_OK && erronly && !verbose)
-        continue;
-
       if(disk_result && verbose >= 1) {
 	xasprintf(&flag_header, " %s [", state_text (disk_result));
       } else {
@@ -379,15 +378,27 @@ main (int argc, char **argv)
                 (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp);
       */
 
+      /* OS: #1420 save all not ok paths to different output, but only in case of error only option */
+      if (disk_result!=STATE_OK && erronly) {
+        xasprintf (&ko_output, "%s%s %s %.0f %s (%.0f%%",
+                ko_output, flag_header,
+                (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir,
+                path->dfree_units,
+                units,
+                path->dfree_pct);
+      }
+
     }
 
+    /* OS: #1420 only show offending paths if error only option is set, but show all paths if everything is ok */
+    output = (erronly && result!=STATE_OK) ? ko_output : output;
   }
 
   if (verbose >= 2)
     xasprintf (&output, "%s%s", output, details);
 
 
-  printf ("DISK %s%s%s|%s\n", state_text (result), (erronly && result==STATE_OK) ? "" : preamble, output, perf);
+  printf ("DISK %s%s%s|%s\n", state_text (result), preamble, output, perf);
   return result;
 }
 



More information about the Commits mailing list