diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_ntp.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c index 12334f77..df6e02f8 100644 --- a/plugins/check_ntp.c +++ b/plugins/check_ntp.c | |||
@@ -47,6 +47,7 @@ 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 short do_offset=0; | ||
50 | static char *owarn="60"; | 51 | static char *owarn="60"; |
51 | static char *ocrit="120"; | 52 | static char *ocrit="120"; |
52 | static short do_stratum=0; | 53 | static short do_stratum=0; |
@@ -479,7 +480,7 @@ double offset_request(const char *host, int *stratum, int *status){ | |||
479 | /* now, pick the best server from the list */ | 480 | /* now, pick the best server from the list */ |
480 | best_index=best_offset_server(servers, num_hosts); | 481 | best_index=best_offset_server(servers, num_hosts); |
481 | if(best_index < 0){ | 482 | if(best_index < 0){ |
482 | *status=STATE_CRITICAL; | 483 | *status=STATE_UNKNOWN; |
483 | } else { | 484 | } else { |
484 | /* finally, calculate the average offset */ | 485 | /* finally, calculate the average offset */ |
485 | for(i=0; i<servers[best_index].num_responses;i++){ | 486 | for(i=0; i<servers[best_index].num_responses;i++){ |
@@ -582,7 +583,7 @@ double jitter_request(const char *host, int *status){ | |||
582 | if(verbose) printf("%d candiate peers available\n", num_candidates); | 583 | if(verbose) printf("%d candiate peers available\n", num_candidates); |
583 | if(verbose && syncsource_found) printf("synchronization source found\n"); | 584 | if(verbose && syncsource_found) printf("synchronization source found\n"); |
584 | if(! syncsource_found){ | 585 | if(! syncsource_found){ |
585 | *status = STATE_WARNING; | 586 | *status = STATE_UNKNOWN; |
586 | if(verbose) printf("warning: no synchronization source found\n"); | 587 | if(verbose) printf("warning: no synchronization source found\n"); |
587 | } | 588 | } |
588 | 589 | ||
@@ -632,7 +633,7 @@ double jitter_request(const char *host, int *status){ | |||
632 | } | 633 | } |
633 | if(startofvalue == NULL || startofvalue==nptr){ | 634 | if(startofvalue == NULL || startofvalue==nptr){ |
634 | printf("warning: unable to read server jitter response.\n"); | 635 | printf("warning: unable to read server jitter response.\n"); |
635 | *status = STATE_WARNING; | 636 | *status = STATE_UNKNOWN; |
636 | } else { | 637 | } else { |
637 | if(verbose) printf("%g\n", jitter); | 638 | if(verbose) printf("%g\n", jitter); |
638 | num_valid++; | 639 | num_valid++; |
@@ -695,9 +696,11 @@ int process_arguments(int argc, char **argv){ | |||
695 | verbose++; | 696 | verbose++; |
696 | break; | 697 | break; |
697 | case 'w': | 698 | case 'w': |
699 | do_offset=1; | ||
698 | owarn = optarg; | 700 | owarn = optarg; |
699 | break; | 701 | break; |
700 | case 'c': | 702 | case 'c': |
703 | do_offset=1; | ||
701 | ocrit = optarg; | 704 | ocrit = optarg; |
702 | break; | 705 | break; |
703 | case 'W': | 706 | case 'W': |
@@ -777,7 +780,7 @@ int main(int argc, char *argv[]){ | |||
777 | double offset=0, jitter=0; | 780 | double offset=0, jitter=0; |
778 | char *result_line, *perfdata_line; | 781 | char *result_line, *perfdata_line; |
779 | 782 | ||
780 | result = offset_result = jitter_result= STATE_UNKNOWN; | 783 | result = offset_result = jitter_result = STATE_OK; |
781 | 784 | ||
782 | if (process_arguments (argc, argv) == ERROR) | 785 | if (process_arguments (argc, argv) == ERROR) |
783 | usage4 (_("Could not parse arguments")); | 786 | usage4 (_("Could not parse arguments")); |
@@ -793,7 +796,11 @@ int main(int argc, char *argv[]){ | |||
793 | alarm (socket_timeout); | 796 | alarm (socket_timeout); |
794 | 797 | ||
795 | offset = offset_request(server_address, &stratum, &offset_result); | 798 | offset = offset_request(server_address, &stratum, &offset_result); |
796 | result = get_status(fabs(offset), offset_thresholds); | 799 | if (do_offset && offset_result == STATE_UNKNOWN) { |
800 | result = STATE_CRITICAL; | ||
801 | } else { | ||
802 | result = get_status(fabs(offset), offset_thresholds); | ||
803 | } | ||
797 | result = max_state(result, offset_result); | 804 | result = max_state(result, offset_result); |
798 | if(do_stratum) | 805 | if(do_stratum) |
799 | result = max_state(result, get_status(stratum, stratum_thresholds)); | 806 | result = max_state(result, get_status(stratum, stratum_thresholds)); |
@@ -827,13 +834,15 @@ int main(int argc, char *argv[]){ | |||
827 | asprintf(&result_line, "NTP UNKNOWN:"); | 834 | asprintf(&result_line, "NTP UNKNOWN:"); |
828 | break; | 835 | break; |
829 | } | 836 | } |
830 | if(offset_result==STATE_CRITICAL){ | 837 | if(offset_result == STATE_UNKNOWN){ |
831 | asprintf(&result_line, "%s %s", result_line, _("Offset unknown")); | 838 | asprintf(&result_line, "%s %s", result_line, _("Offset unknown")); |
832 | asprintf(&perfdata_line, ""); | 839 | asprintf(&perfdata_line, ""); |
833 | } else { | 840 | } else { |
841 | #if 0 /* 2007-10-25 This can't happen. Leftovers or uninplemented? */ | ||
834 | if(offset_result==STATE_WARNING){ | 842 | if(offset_result==STATE_WARNING){ |
835 | asprintf(&result_line, "%s %s", result_line, _("Unable to fully sample sync server")); | 843 | asprintf(&result_line, "%s %s", result_line, _("Unable to fully sample sync server")); |
836 | } | 844 | } |
845 | #endif | ||
837 | asprintf(&result_line, "%s Offset %.10g secs", result_line, offset); | 846 | asprintf(&result_line, "%s Offset %.10g secs", result_line, offset); |
838 | asprintf(&perfdata_line, "%s", perfd_offset(offset)); | 847 | asprintf(&perfdata_line, "%s", perfd_offset(offset)); |
839 | } | 848 | } |
@@ -887,6 +896,16 @@ void print_help(void){ | |||
887 | printf(" %s\n", ("http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT")); | 896 | printf(" %s\n", ("http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT")); |
888 | printf(" %s\n", _("for THRESHOLD format and examples.")); | 897 | printf(" %s\n", _("for THRESHOLD format and examples.")); |
889 | 898 | ||
899 | printf("\n"); | ||
900 | printf("%s\n", _("Examples:")); | ||
901 | printf(" %s\n", _("Normal offset check:")); | ||
902 | printf(" %s\n", ("./check_ntp -H ntpserv -w 0.5 -c 1")); | ||
903 | printf(" %s\n", _("Check jitter too, avoiding critical notifications if jitter isn't available")); | ||
904 | printf(" %s\n", _("(See Notes above for more details on thresholds formats):")); | ||
905 | printf(" %s\n", ("./check_ntp -H ntpserv -w 0.5 -c 1 -j -1:100 -k -1:200")); | ||
906 | printf(" %s\n", _("Check only stratum:")); | ||
907 | printf(" %s\n", ("./check_ntp -H ntpserv -W 4 -C 6")); | ||
908 | |||
890 | printf (_(UT_SUPPORT)); | 909 | printf (_(UT_SUPPORT)); |
891 | } | 910 | } |
892 | 911 | ||