diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_ntp.c | 64 | 
1 files changed, 26 insertions, 38 deletions
diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c index abd254c8..6c7c1e7d 100644 --- a/plugins/check_ntp.c +++ b/plugins/check_ntp.c  | |||
| @@ -47,13 +47,16 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 47 | 47 | ||
| 48 | static char *server_address=NULL; | 48 | static char *server_address=NULL; | 
| 49 | static int verbose=0; | 49 | static int verbose=0; | 
| 50 | static double owarn=60; | 50 | static int stratum=-1; | 
| 51 | static double ocrit=120; | 51 | static char *owarn="60"; | 
| 52 | static char *ocrit="120"; | ||
| 52 | static short do_jitter=0; | 53 | static short do_jitter=0; | 
| 53 | static double jwarn=5000; | 54 | static char *jwarn="5000"; | 
| 54 | static double jcrit=10000; | 55 | static char *jcrit="10000"; | 
| 55 | 56 | ||
| 56 | int process_arguments (int, char **); | 57 | int process_arguments (int, char **); | 
| 58 | thresholds *offset_thresholds = NULL; | ||
| 59 | thresholds *jitter_thresholds = NULL; | ||
| 57 | void print_help (void); | 60 | void print_help (void); | 
| 58 | void print_usage (void); | 61 | void print_usage (void); | 
| 59 | 62 | ||
| @@ -686,18 +689,18 @@ int process_arguments(int argc, char **argv){ | |||
| 686 | verbose++; | 689 | verbose++; | 
| 687 | break; | 690 | break; | 
| 688 | case 'w': | 691 | case 'w': | 
| 689 | owarn = atof(optarg); | 692 | owarn = optarg; | 
| 690 | break; | 693 | break; | 
| 691 | case 'c': | 694 | case 'c': | 
| 692 | ocrit = atof(optarg); | 695 | ocrit = optarg; | 
| 693 | break; | 696 | break; | 
| 694 | case 'j': | 697 | case 'j': | 
| 695 | do_jitter=1; | 698 | do_jitter=1; | 
| 696 | jwarn = atof(optarg); | 699 | jwarn = optarg; | 
| 697 | break; | 700 | break; | 
| 698 | case 'k': | 701 | case 'k': | 
| 699 | do_jitter=1; | 702 | do_jitter=1; | 
| 700 | jcrit = atof(optarg); | 703 | jcrit = optarg; | 
| 701 | break; | 704 | break; | 
| 702 | case 'H': | 705 | case 'H': | 
| 703 | if(is_host(optarg) == FALSE) | 706 | if(is_host(optarg) == FALSE) | 
| @@ -724,14 +727,6 @@ int process_arguments(int argc, char **argv){ | |||
| 724 | } | 727 | } | 
| 725 | } | 728 | } | 
| 726 | 729 | ||
| 727 | if (ocrit < owarn){ | ||
| 728 | usage4(_("Critical offset should be larger than warning offset")); | ||
| 729 | } | ||
| 730 | |||
| 731 | if (jcrit < jwarn){ | ||
| 732 | usage4(_("Critical jitter should be larger than warning jitter")); | ||
| 733 | } | ||
| 734 | |||
| 735 | if(server_address == NULL){ | 730 | if(server_address == NULL){ | 
| 736 | usage4(_("Hostname was not supplied")); | 731 | usage4(_("Hostname was not supplied")); | 
| 737 | } | 732 | } | 
| @@ -742,16 +737,16 @@ int process_arguments(int argc, char **argv){ | |||
| 742 | char *perfd_offset (double offset) | 737 | char *perfd_offset (double offset) | 
| 743 | { | 738 | { | 
| 744 | return fperfdata ("offset", offset, "s", | 739 | return fperfdata ("offset", offset, "s", | 
| 745 | TRUE, owarn, | 740 | TRUE, offset_thresholds->warning->end, | 
| 746 | TRUE, ocrit, | 741 | TRUE, offset_thresholds->critical->end, | 
| 747 | FALSE, 0, FALSE, 0); | 742 | FALSE, 0, FALSE, 0); | 
| 748 | } | 743 | } | 
| 749 | 744 | ||
| 750 | char *perfd_jitter (double jitter) | 745 | char *perfd_jitter (double jitter) | 
| 751 | { | 746 | { | 
| 752 | return fperfdata ("jitter", jitter, "s", | 747 | return fperfdata ("jitter", jitter, "s", | 
| 753 | do_jitter, jwarn, | 748 | do_jitter, jitter_thresholds->warning->end, | 
| 754 | do_jitter, jcrit, | 749 | do_jitter, jitter_thresholds->critical->end, | 
| 755 | TRUE, 0, FALSE, 0); | 750 | TRUE, 0, FALSE, 0); | 
| 756 | } | 751 | } | 
| 757 | 752 | ||
| @@ -760,11 +755,14 @@ int main(int argc, char *argv[]){ | |||
| 760 | double offset=0, jitter=0; | 755 | double offset=0, jitter=0; | 
| 761 | char *result_line, *perfdata_line; | 756 | char *result_line, *perfdata_line; | 
| 762 | 757 | ||
| 763 | result=offset_result=jitter_result=STATE_UNKNOWN; | 758 | result = offset_result = jitter_result= STATE_UNKNOWN; | 
| 764 | 759 | ||
| 765 | if (process_arguments (argc, argv) == ERROR) | 760 | if (process_arguments (argc, argv) == ERROR) | 
| 766 | usage4 (_("Could not parse arguments")); | 761 | usage4 (_("Could not parse arguments")); | 
| 767 | 762 | ||
| 763 | set_thresholds(&offset_thresholds, owarn, ocrit); | ||
| 764 | set_thresholds(&jitter_thresholds, jwarn, jcrit); | ||
| 765 | |||
| 768 | /* initialize alarm signal handling */ | 766 | /* initialize alarm signal handling */ | 
| 769 | signal (SIGALRM, socket_timeout_alarm_handler); | 767 | signal (SIGALRM, socket_timeout_alarm_handler); | 
| 770 | 768 | ||
| @@ -772,14 +770,8 @@ int main(int argc, char *argv[]){ | |||
| 772 | alarm (socket_timeout); | 770 | alarm (socket_timeout); | 
| 773 | 771 | ||
| 774 | offset = offset_request(server_address, &offset_result); | 772 | offset = offset_request(server_address, &offset_result); | 
| 775 | if(fabs(offset) > ocrit){ | 773 | result = get_status(fabs(offset), offset_thresholds); | 
| 776 | result = STATE_CRITICAL; | 774 | result = max_state(result, offset_result); | 
| 777 | } else if(fabs(offset) > owarn) { | ||
| 778 | result = STATE_WARNING; | ||
| 779 | } else { | ||
| 780 | result = STATE_OK; | ||
| 781 | } | ||
| 782 | result=max_state(result, offset_result); | ||
| 783 | 775 | ||
| 784 | /* If not told to check the jitter, we don't even send packets. | 776 | /* If not told to check the jitter, we don't even send packets. | 
| 785 | * jitter is checked using NTP control packets, which not all | 777 | * jitter is checked using NTP control packets, which not all | 
| @@ -788,17 +780,13 @@ int main(int argc, char *argv[]){ | |||
| 788 | */ | 780 | */ | 
| 789 | if(do_jitter){ | 781 | if(do_jitter){ | 
| 790 | jitter=jitter_request(server_address, &jitter_result); | 782 | jitter=jitter_request(server_address, &jitter_result); | 
| 791 | if(jitter > jcrit){ | 783 | result = max_state(result, get_status(jitter, jitter_thresholds)); | 
| 792 | result = max_state(result, STATE_CRITICAL); | 784 | /* -1 indicates that we couldn't calculate the jitter | 
| 793 | } else if(jitter > jwarn) { | 785 | * Only overrides STATE_OK from the offset */ | 
| 794 | result = max_state(result, STATE_WARNING); | 786 | if(jitter == -1.0 && result == STATE_OK) | 
| 795 | } else if(jitter == -1.0 && result == STATE_OK){ | ||
| 796 | /* -1 indicates that we couldn't calculate the jitter | ||
| 797 | * Only overrides STATE_OK from the offset */ | ||
| 798 | result = STATE_UNKNOWN; | 787 | result = STATE_UNKNOWN; | 
| 799 | } | ||
| 800 | } | 788 | } | 
| 801 | result=max_state(result, jitter_result); | 789 | result = max_state(result, jitter_result); | 
| 802 | 790 | ||
| 803 | switch (result) { | 791 | switch (result) { | 
| 804 | case STATE_CRITICAL : | 792 | case STATE_CRITICAL : | 
