diff options
Diffstat (limited to 'plugins/check_disk.c')
-rw-r--r-- | plugins/check_disk.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 36f30a59..44b32866 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
@@ -142,14 +142,17 @@ main (int argc, char **argv) | |||
142 | char file_system[MAX_INPUT_BUFFER]; | 142 | char file_system[MAX_INPUT_BUFFER]; |
143 | char *output; | 143 | char *output; |
144 | char *details; | 144 | char *details; |
145 | char *perf; | ||
146 | uintmax_t psize; | ||
145 | float free_space, free_space_pct, total_space; | 147 | float free_space, free_space_pct, total_space; |
146 | 148 | ||
147 | struct mount_entry *me; | 149 | struct mount_entry *me; |
148 | struct fs_usage fsp; | 150 | struct fs_usage fsp; |
149 | struct name_list *temp_list; | 151 | struct name_list *temp_list; |
150 | 152 | ||
151 | output = strdup (""); | 153 | output = strdup (" - free space:"); |
152 | details = strdup (""); | 154 | details = strdup (""); |
155 | perf = strdup (""); | ||
153 | 156 | ||
154 | setlocale (LC_ALL, ""); | 157 | setlocale (LC_ALL, ""); |
155 | bindtextdomain (PACKAGE, LOCALEDIR); | 158 | bindtextdomain (PACKAGE, LOCALEDIR); |
@@ -185,6 +188,14 @@ main (int argc, char **argv) | |||
185 | usp = (double)(fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks; | 188 | usp = (double)(fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks; |
186 | disk_result = check_disk (usp, fsp.fsu_bavail); | 189 | disk_result = check_disk (usp, fsp.fsu_bavail); |
187 | result = max_state (disk_result, result); | 190 | result = max_state (disk_result, result); |
191 | psize = fsp.fsu_blocks*fsp.fsu_blocksize/mult; | ||
192 | asprintf (&perf, "%s %s", perf, | ||
193 | perfdata ((!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | ||
194 | fsp.fsu_bavail*fsp.fsu_blocksize/mult, units, | ||
195 | TRUE, min ((uintmax_t)psize-(uintmax_t)w_df, (uintmax_t)((1.0-w_dfp/100.0)*psize)), | ||
196 | TRUE, min ((uintmax_t)psize-(uintmax_t)c_df, (uintmax_t)((1.0-c_dfp/100.0)*psize)), | ||
197 | TRUE, 0, | ||
198 | TRUE, psize)); | ||
188 | if (disk_result==STATE_OK && erronly && !verbose) | 199 | if (disk_result==STATE_OK && erronly && !verbose) |
189 | continue; | 200 | continue; |
190 | 201 | ||
@@ -192,12 +203,12 @@ main (int argc, char **argv) | |||
192 | free_space_pct = (float)fsp.fsu_bavail*100/fsp.fsu_blocks; | 203 | free_space_pct = (float)fsp.fsu_bavail*100/fsp.fsu_blocks; |
193 | total_space = (float)fsp.fsu_blocks*fsp.fsu_blocksize/mult; | 204 | total_space = (float)fsp.fsu_blocks*fsp.fsu_blocksize/mult; |
194 | if (disk_result!=STATE_OK || verbose>=0) | 205 | if (disk_result!=STATE_OK || verbose>=0) |
195 | asprintf (&output, ("%s [%.0f %s (%.0f%%) free on %s]"), | 206 | asprintf (&output, ("%s %s %.0f %s (%.0f%%);"), |
196 | output, | 207 | output, |
208 | (!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | ||
197 | free_space, | 209 | free_space, |
198 | units, | 210 | units, |
199 | free_space_pct, | 211 | free_space_pct); |
200 | (!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir); | ||
201 | asprintf (&details, _("%s\n\ | 212 | asprintf (&details, _("%s\n\ |
202 | %.0f of %.0f %s (%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), | 213 | %.0f of %.0f %s (%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), |
203 | details, free_space, total_space, units, free_space_pct, | 214 | details, free_space, total_space, units, free_space_pct, |
@@ -207,6 +218,8 @@ main (int argc, char **argv) | |||
207 | 218 | ||
208 | } | 219 | } |
209 | 220 | ||
221 | asprintf (&output, "%s|%s", output, perf); | ||
222 | |||
210 | if (verbose > 2) | 223 | if (verbose > 2) |
211 | asprintf (&output, "%s%s", output, details); | 224 | asprintf (&output, "%s%s", output, details); |
212 | 225 | ||
@@ -220,8 +233,8 @@ main (int argc, char **argv) | |||
220 | temp_list = temp_list->name_next; | 233 | temp_list = temp_list->name_next; |
221 | } | 234 | } |
222 | 235 | ||
223 | die (result, "DISK %s%s%s\n", state_text (result), output, details); | 236 | printf ("DISK %s%s\n", state_text (result), output); |
224 | return STATE_UNKNOWN; | 237 | return result; |
225 | } | 238 | } |
226 | 239 | ||
227 | 240 | ||
@@ -507,11 +520,11 @@ check_disk (double usp, uintmax_t free_disk) | |||
507 | { | 520 | { |
508 | int result = STATE_UNKNOWN; | 521 | int result = STATE_UNKNOWN; |
509 | /* check the percent used space against thresholds */ | 522 | /* check the percent used space against thresholds */ |
510 | if (usp >= 0.0 && usp >= (100.0 - c_dfp)) | 523 | if (usp >= 0.0 && c_dfp >=0.0 && usp >= (100.0 - c_dfp)) |
511 | result = STATE_CRITICAL; | 524 | result = STATE_CRITICAL; |
512 | else if (c_df > 0 && free_disk <= c_df) | 525 | else if (c_df > 0 && free_disk <= c_df) |
513 | result = STATE_CRITICAL; | 526 | result = STATE_CRITICAL; |
514 | else if (usp >= 0.0 && usp >= (100.0 - w_dfp)) | 527 | else if (usp >= 0.0 && w_dfp >=0.0 && usp >= (100.0 - w_dfp)) |
515 | result = STATE_WARNING; | 528 | result = STATE_WARNING; |
516 | else if (w_df > 0 && free_disk <= w_df) | 529 | else if (w_df > 0 && free_disk <= w_df) |
517 | result = STATE_WARNING; | 530 | result = STATE_WARNING; |