diff options
Diffstat (limited to 'plugins/check_disk.c')
-rw-r--r-- | plugins/check_disk.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 3c7b0ecf..a88d2a1b 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c @@ -159,6 +159,8 @@ main (int argc, char **argv) double dfree_pct = -1, dused_pct = -1; double dused_units, dfree_units, dtotal_units; double dused_inodes_percent, dfree_inodes_percent; + double warning_high_tide = UINT_MAX; + double critical_high_tide = UINT_MAX; int temp_result; struct mount_entry *me; @@ -284,13 +286,30 @@ main (int argc, char **argv) result = max_state(result, disk_result); + /* What a mess of units. The output shows free space, the perf data shows used space. Yikes! + Hack here. Trying to get warn/crit levels from freespace_(units|percent) for perf + data. Assumption that start=0. Roll on new syntax... + */ + if (path->freespace_units->warning != NULL) { + warning_high_tide = dtotal_units - path->freespace_units->warning->end; + } + if (path->freespace_percent->warning != NULL) { + warning_high_tide = abs( min( (double) warning_high_tide, (double) (1.0 - path->freespace_percent->warning->end/100)*dtotal_units )); + } + if (path->freespace_units->critical != NULL) { + critical_high_tide = dtotal_units - path->freespace_units->critical->end; + } + if (path->freespace_percent->critical != NULL) { + critical_high_tide = abs( min( (double) critical_high_tide, (double) (1.0 - path->freespace_percent->critical->end/100)*dtotal_units )); + } + asprintf (&perf, "%s %s", perf, perfdata ((!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, dused_units, units, - FALSE, 0, /* min ((uintmax_t)dtotal_units-(uintmax_t)w_df, (uintmax_t)((1.0-w_dfp/100.0)*dtotal_units)), */ - FALSE, 0, /* min ((uintmax_t)dtotal_units-(uintmax_t)c_df, (uintmax_t)((1.0-c_dfp/100.0)*dtotal_units)), */ - FALSE, 0, /* inode_space_pct - this is not meant to be here???, */ - FALSE, 0));; /* dtotal_units)); */ + TRUE, warning_high_tide, + TRUE, critical_high_tide, + TRUE, 0, + TRUE, dtotal_units)); if (disk_result==STATE_OK && erronly && !verbose) continue; |