diff options
| author | Matthias Eble <psychotrahe@users.sourceforge.net> | 2007-03-30 08:48:50 +0000 |
|---|---|---|
| committer | Matthias Eble <psychotrahe@users.sourceforge.net> | 2007-03-30 08:48:50 +0000 |
| commit | a1fea1eafd63ca47cc1227c2ba3e0264e56c6f0d (patch) | |
| tree | c45dccf0192bed1977a73e5e74d83287450a0621 | |
| parent | b809d23c81021ab39000196af87e1dcac4ac291d (diff) | |
| download | monitoring-plugins-a1fea1eafd63ca47cc1227c2ba3e0264e56c6f0d.tar.gz | |
check_disk -C is more flexible now. See np-devel post (2007-02-10)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1656 f882894a-f735-0410-b71e-b25c423dba1c
| -rw-r--r-- | lib/utils_disk.c | 59 | ||||
| -rw-r--r-- | lib/utils_disk.h | 1 | ||||
| -rw-r--r-- | plugins/check_disk.c | 82 |
3 files changed, 90 insertions, 52 deletions
diff --git a/lib/utils_disk.c b/lib/utils_disk.c index 74708c0e..fd768b20 100644 --- a/lib/utils_disk.c +++ b/lib/utils_disk.c | |||
| @@ -73,39 +73,54 @@ np_add_parameter(struct parameter_list **list, const char *name) | |||
| 73 | return new_path; | 73 | return new_path; |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | /* returns a pointer to the struct found in the list */ | ||
| 77 | struct parameter_list * | ||
| 78 | np_find_parameter(struct parameter_list *list, const char *name) | ||
| 79 | { | ||
| 80 | struct parameter_list *temp_list; | ||
| 81 | for (temp_list = list; temp_list; temp_list = temp_list->name_next) { | ||
| 82 | if (! strcmp(temp_list->name, name)) | ||
| 83 | return temp_list; | ||
| 84 | } | ||
| 85 | |||
| 86 | return NULL; | ||
| 87 | } | ||
| 88 | |||
| 76 | void | 89 | void |
| 77 | np_set_best_match(struct parameter_list *desired, struct mount_entry *mount_list, int exact) | 90 | np_set_best_match(struct parameter_list *desired, struct mount_entry *mount_list, int exact) |
| 78 | { | 91 | { |
| 79 | struct parameter_list *d; | 92 | struct parameter_list *d; |
| 80 | for (d = desired; d; d= d->name_next) { | 93 | for (d = desired; d; d= d->name_next) { |
| 81 | struct mount_entry *me; | 94 | if (! d->best_match) { |
| 82 | size_t name_len = strlen(d->name); | 95 | struct mount_entry *me; |
| 83 | size_t best_match_len = 0; | 96 | size_t name_len = strlen(d->name); |
| 84 | struct mount_entry *best_match = NULL; | 97 | size_t best_match_len = 0; |
| 98 | struct mount_entry *best_match = NULL; | ||
| 85 | 99 | ||
| 86 | for (me = mount_list; me; me = me->me_next) { | 100 | for (me = mount_list; me; me = me->me_next) { |
| 87 | size_t len = strlen (me->me_mountdir); | 101 | size_t len = strlen (me->me_mountdir); |
| 88 | if ((exact == FALSE && (best_match_len <= len && len <= name_len && | 102 | if ((exact == FALSE && (best_match_len <= len && len <= name_len && |
| 89 | (len == 1 || strncmp (me->me_mountdir, d->name, len) == 0))) | 103 | (len == 1 || strncmp (me->me_mountdir, d->name, len) == 0))) |
| 90 | || (exact == TRUE && strcmp(me->me_mountdir, d->name)==0)) | 104 | || (exact == TRUE && strcmp(me->me_mountdir, d->name)==0)) |
| 91 | { | ||
| 92 | best_match = me; | ||
| 93 | best_match_len = len; | ||
| 94 | } else { | ||
| 95 | len = strlen (me->me_devname); | ||
| 96 | if ((exact == FALSE && (best_match_len <= len && len <= name_len && | ||
| 97 | (len == 1 || strncmp (me->me_devname, d->name, len) == 0))) | ||
| 98 | || (exact == TRUE && strcmp(me->me_devname, d->name)==0)) | ||
| 99 | { | 105 | { |
| 100 | best_match = me; | 106 | best_match = me; |
| 101 | best_match_len = len; | 107 | best_match_len = len; |
| 108 | } else { | ||
| 109 | len = strlen (me->me_devname); | ||
| 110 | if ((exact == FALSE && (best_match_len <= len && len <= name_len && | ||
| 111 | (len == 1 || strncmp (me->me_devname, d->name, len) == 0))) | ||
| 112 | || (exact == TRUE && strcmp(me->me_devname, d->name)==0)) | ||
| 113 | { | ||
| 114 | best_match = me; | ||
| 115 | best_match_len = len; | ||
| 116 | } | ||
| 102 | } | 117 | } |
| 103 | } | 118 | } |
| 104 | } | 119 | if (best_match) { |
| 105 | if (best_match) { | 120 | d->best_match = best_match; |
| 106 | d->best_match = best_match; | 121 | } else { |
| 107 | } else { | 122 | d->best_match = NULL; /* Not sure why this is needed as it should be null on initialisation */ |
| 108 | d->best_match = NULL; /* Not sure why this is needed as it should be null on initialisation */ | 123 | } |
| 109 | } | 124 | } |
| 110 | } | 125 | } |
| 111 | } | 126 | } |
diff --git a/lib/utils_disk.h b/lib/utils_disk.h index 8bf4f113..55de9385 100644 --- a/lib/utils_disk.h +++ b/lib/utils_disk.h | |||
| @@ -28,5 +28,6 @@ void np_add_name (struct name_list **list, const char *name); | |||
| 28 | int np_find_name (struct name_list *list, const char *name); | 28 | int np_find_name (struct name_list *list, const char *name); |
| 29 | int np_seen_name (struct name_list *list, const char *name); | 29 | int np_seen_name (struct name_list *list, const char *name); |
| 30 | struct parameter_list *np_add_parameter(struct parameter_list **list, const char *name); | 30 | struct parameter_list *np_add_parameter(struct parameter_list **list, const char *name); |
| 31 | struct parameter_list *np_find_parameter(struct parameter_list *list, const char *name); | ||
| 31 | int search_parameter_list (struct parameter_list *list, const char *name); | 32 | int search_parameter_list (struct parameter_list *list, const char *name); |
| 32 | void np_set_best_match(struct parameter_list *desired, struct mount_entry *mount_list, int exact); | 33 | void np_set_best_match(struct parameter_list *desired, struct mount_entry *mount_list, int exact); |
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 88a17692..7bd044ad 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
| @@ -121,6 +121,7 @@ static struct mount_entry *mount_list; | |||
| 121 | 121 | ||
| 122 | int process_arguments (int, char **); | 122 | int process_arguments (int, char **); |
| 123 | void print_path (const char *mypath); | 123 | void print_path (const char *mypath); |
| 124 | void set_all_thresholds (struct parameter_list *path); | ||
| 124 | int validate_arguments (uintmax_t, uintmax_t, double, double, double, double, char *); | 125 | int validate_arguments (uintmax_t, uintmax_t, double, double, double, double, char *); |
| 125 | void print_help (void); | 126 | void print_help (void); |
| 126 | void print_usage (void); | 127 | void print_usage (void); |
| @@ -148,6 +149,7 @@ char *warn_usedinodes_percent = NULL; | |||
| 148 | char *crit_usedinodes_percent = NULL; | 149 | char *crit_usedinodes_percent = NULL; |
| 149 | char *warn_freeinodes_percent = NULL; | 150 | char *warn_freeinodes_percent = NULL; |
| 150 | char *crit_freeinodes_percent = NULL; | 151 | char *crit_freeinodes_percent = NULL; |
| 152 | bool path_selected = false; | ||
| 151 | 153 | ||
| 152 | 154 | ||
| 153 | int | 155 | int |
| @@ -190,33 +192,34 @@ main (int argc, char **argv) | |||
| 190 | /* If a list of paths has not been selected, find entire | 192 | /* If a list of paths has not been selected, find entire |
| 191 | mount list and create list of paths | 193 | mount list and create list of paths |
| 192 | */ | 194 | */ |
| 193 | if (! path_select_list) { | 195 | if (path_selected == false) { |
| 194 | for (me = mount_list; me; me = me->me_next) { | 196 | for (me = mount_list; me; me = me->me_next) { |
| 195 | path = np_add_parameter(&path_select_list, me->me_mountdir); | 197 | if (! (path = np_find_parameter(path_select_list, me->me_mountdir))) { |
| 198 | path = np_add_parameter(&path_select_list, me->me_mountdir); | ||
| 199 | } | ||
| 196 | path->best_match = me; | 200 | path->best_match = me; |
| 197 | set_thresholds(&path->freespace_units, warn_freespace_units, crit_freespace_units); | 201 | set_all_thresholds(path); |
| 198 | set_thresholds(&path->freespace_percent, warn_freespace_percent, crit_freespace_percent); | ||
| 199 | set_thresholds(&path->usedspace_units, warn_usedspace_units, crit_usedspace_units); | ||
| 200 | set_thresholds(&path->usedspace_percent, warn_usedspace_percent, crit_usedspace_percent); | ||
| 201 | set_thresholds(&path->usedinodes_percent, warn_usedinodes_percent, crit_usedinodes_percent); | ||
| 202 | set_thresholds(&path->freeinodes_percent, warn_freeinodes_percent, crit_freeinodes_percent); | ||
| 203 | } | 202 | } |
| 204 | } else { | 203 | } |
| 205 | np_set_best_match(path_select_list, mount_list, exact_match); | 204 | np_set_best_match(path_select_list, mount_list, exact_match); |
| 206 | 205 | ||
| 207 | /* Error if no match found for specified paths */ | 206 | /* Error if no match found for specified paths */ |
| 208 | temp_list = path_select_list; | 207 | temp_list = path_select_list; |
| 209 | while (temp_list) { | 208 | while (temp_list) { |
| 210 | if (! temp_list->best_match) { | 209 | if (! temp_list->best_match) { |
| 211 | die (STATE_CRITICAL, _("DISK %s: %s not found\n"), _("CRITICAL"), temp_list->name); | 210 | die (STATE_CRITICAL, _("DISK %s: %s not found\n"), _("CRITICAL"), temp_list->name); |
| 212 | } | ||
| 213 | temp_list = temp_list->name_next; | ||
| 214 | } | 211 | } |
| 212 | temp_list = temp_list->name_next; | ||
| 215 | } | 213 | } |
| 214 | |||
| 216 | 215 | ||
| 217 | /* Process for every path in list */ | 216 | /* Process for every path in list */ |
| 218 | for (path = path_select_list; path; path=path->name_next) { | 217 | for (path = path_select_list; path; path=path->name_next) { |
| 219 | 218 | ||
| 219 | if (verbose > 3 && path->freespace_percent->warning != NULL && path->freespace_percent->critical != NULL) | ||
| 220 | printf("Thresholds(pct) for %s warn: %f crit %f\n",path->name, path->freespace_percent->warning->end, | ||
| 221 | path->freespace_percent->critical->end); | ||
| 222 | |||
| 220 | /* reset disk result */ | 223 | /* reset disk result */ |
| 221 | disk_result = STATE_UNKNOWN; | 224 | disk_result = STATE_UNKNOWN; |
| 222 | 225 | ||
| @@ -548,13 +551,14 @@ process_arguments (int argc, char **argv) | |||
| 548 | crit_usedinodes_percent || warn_freeinodes_percent || crit_freeinodes_percent )) { | 551 | crit_usedinodes_percent || warn_freeinodes_percent || crit_freeinodes_percent )) { |
| 549 | die (STATE_UNKNOWN, "DISK %s: %s", _("UNKNOWN"), _("Must set a threshold value before using -p\n")); | 552 | die (STATE_UNKNOWN, "DISK %s: %s", _("UNKNOWN"), _("Must set a threshold value before using -p\n")); |
| 550 | } | 553 | } |
| 551 | se = np_add_parameter(&path_select_list, optarg); | 554 | |
| 552 | set_thresholds(&se->freespace_units, warn_freespace_units, crit_freespace_units); | 555 | /* add parameter if not found. overwrite thresholds if path has already been added */ |
| 553 | set_thresholds(&se->freespace_percent, warn_freespace_percent, crit_freespace_percent); | 556 | if (! (se = np_find_parameter(path_select_list, optarg))) { |
| 554 | set_thresholds(&se->usedspace_units, warn_usedspace_units, crit_usedspace_units); | 557 | se = np_add_parameter(&path_select_list, optarg); |
| 555 | set_thresholds(&se->usedspace_percent, warn_usedspace_percent, crit_usedspace_percent); | 558 | } |
| 556 | set_thresholds(&se->usedinodes_percent, warn_usedinodes_percent, crit_usedinodes_percent); | 559 | |
| 557 | set_thresholds(&se->freeinodes_percent, warn_freeinodes_percent, crit_freeinodes_percent); | 560 | set_all_thresholds(se); |
| 561 | path_selected = true; | ||
| 558 | break; | 562 | break; |
| 559 | case 'x': /* exclude path or partition */ | 563 | case 'x': /* exclude path or partition */ |
| 560 | np_add_name(&dp_exclude_list, optarg); | 564 | np_add_name(&dp_exclude_list, optarg); |
| @@ -578,6 +582,17 @@ process_arguments (int argc, char **argv) | |||
| 578 | display_mntp = TRUE; | 582 | display_mntp = TRUE; |
| 579 | break; | 583 | break; |
| 580 | case 'C': | 584 | case 'C': |
| 585 | /* add all mount entries to path_select list if no partitions have been explicitly defined using -p */ | ||
| 586 | if (path_selected == false) { | ||
| 587 | struct mount_entry *me; | ||
| 588 | struct parameter_list *path; | ||
| 589 | for (me = mount_list; me; me = me->me_next) { | ||
| 590 | if (! (path = np_find_parameter(path_select_list, me->me_mountdir))) | ||
| 591 | path = np_add_parameter(&path_select_list, me->me_mountdir); | ||
| 592 | path->best_match = me; | ||
| 593 | set_all_thresholds(path); | ||
| 594 | } | ||
| 595 | } | ||
| 581 | warn_freespace_units = NULL; | 596 | warn_freespace_units = NULL; |
| 582 | crit_freespace_units = NULL; | 597 | crit_freespace_units = NULL; |
| 583 | warn_usedspace_units = NULL; | 598 | warn_usedspace_units = NULL; |
| @@ -590,6 +605,8 @@ process_arguments (int argc, char **argv) | |||
| 590 | crit_usedinodes_percent = NULL; | 605 | crit_usedinodes_percent = NULL; |
| 591 | warn_freeinodes_percent = NULL; | 606 | warn_freeinodes_percent = NULL; |
| 592 | crit_freeinodes_percent = NULL; | 607 | crit_freeinodes_percent = NULL; |
| 608 | |||
| 609 | path_selected = false; | ||
| 593 | break; | 610 | break; |
| 594 | case 'V': /* version */ | 611 | case 'V': /* version */ |
| 595 | print_revision (progname, revision); | 612 | print_revision (progname, revision); |
| @@ -612,12 +629,7 @@ process_arguments (int argc, char **argv) | |||
| 612 | 629 | ||
| 613 | if (argc > c && path == NULL) { | 630 | if (argc > c && path == NULL) { |
| 614 | se = np_add_parameter(&path_select_list, strdup(argv[c++])); | 631 | se = np_add_parameter(&path_select_list, strdup(argv[c++])); |
| 615 | set_thresholds(&se->freespace_units, warn_freespace_units, crit_freespace_units); | 632 | set_all_thresholds(se); |
| 616 | set_thresholds(&se->freespace_percent, warn_freespace_percent, crit_freespace_percent); | ||
| 617 | set_thresholds(&se->usedspace_units, warn_usedspace_units, crit_usedspace_units); | ||
| 618 | set_thresholds(&se->usedspace_percent, warn_usedspace_percent, crit_usedspace_percent); | ||
| 619 | set_thresholds(&se->usedinodes_percent, warn_usedinodes_percent, crit_usedinodes_percent); | ||
| 620 | set_thresholds(&se->freeinodes_percent, warn_freeinodes_percent, crit_freeinodes_percent); | ||
| 621 | } | 633 | } |
| 622 | 634 | ||
| 623 | if (units == NULL) { | 635 | if (units == NULL) { |
| @@ -665,6 +677,16 @@ print_path (const char *mypath) | |||
| 665 | } | 677 | } |
| 666 | 678 | ||
| 667 | 679 | ||
| 680 | void | ||
| 681 | set_all_thresholds (struct parameter_list *path) | ||
| 682 | { | ||
| 683 | set_thresholds(&path->freespace_units, warn_freespace_units, crit_freespace_units); | ||
| 684 | set_thresholds(&path->freespace_percent, warn_freespace_percent, crit_freespace_percent); | ||
| 685 | set_thresholds(&path->usedspace_units, warn_usedspace_units, crit_usedspace_units); | ||
| 686 | set_thresholds(&path->usedspace_percent, warn_usedspace_percent, crit_usedspace_percent); | ||
| 687 | set_thresholds(&path->usedinodes_percent, warn_usedinodes_percent, crit_usedinodes_percent); | ||
| 688 | set_thresholds(&path->freeinodes_percent, warn_freeinodes_percent, crit_freeinodes_percent); | ||
| 689 | } | ||
| 668 | 690 | ||
| 669 | /* TODO: Remove? | 691 | /* TODO: Remove? |
| 670 | 692 | ||
