diff options
Diffstat (limited to 'plugins/check_ntp.c')
-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 : |