diff options
Diffstat (limited to 'web/attachments/304650-check_ntp_peer.patch')
| -rw-r--r-- | web/attachments/304650-check_ntp_peer.patch | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/web/attachments/304650-check_ntp_peer.patch b/web/attachments/304650-check_ntp_peer.patch new file mode 100644 index 0000000..632a106 --- /dev/null +++ b/web/attachments/304650-check_ntp_peer.patch | |||
| @@ -0,0 +1,147 @@ | |||
| 1 | diff -Nur nagios-plugins-1.4.13.orig/plugins/check_ntp_peer.c nagios-plugins-1.4.13/plugins/check_ntp_peer.c | ||
| 2 | --- nagios-plugins-1.4.13.orig/plugins/check_ntp_peer.c 2008-09-02 14:28:04.000000000 +0200 | ||
| 3 | +++ nagios-plugins-1.4.13/plugins/check_ntp_peer.c 2008-12-09 14:12:32.000000000 +0100 | ||
| 4 | @@ -60,6 +60,9 @@ | ||
| 5 | static short do_jitter=0; | ||
| 6 | static char *jwarn="-1:5000"; | ||
| 7 | static char *jcrit="-1:10000"; | ||
| 8 | +static short do_peer=0; | ||
| 9 | +static char *pwarn="@1"; | ||
| 10 | +static char *pcrit="@1"; | ||
| 11 | static int syncsource_found=0; | ||
| 12 | static int li_alarm=0; | ||
| 13 | |||
| 14 | @@ -67,6 +70,7 @@ | ||
| 15 | thresholds *offset_thresholds = NULL; | ||
| 16 | thresholds *jitter_thresholds = NULL; | ||
| 17 | thresholds *stratum_thresholds = NULL; | ||
| 18 | +thresholds *peer_thresholds = NULL; | ||
| 19 | void print_help (void); | ||
| 20 | void print_usage (void); | ||
| 21 | |||
| 22 | @@ -252,7 +256,7 @@ | ||
| 23 | * status is pretty much useless as syncsource_found is a global variable | ||
| 24 | * used later in main to check is the server was synchronized. It works | ||
| 25 | * so I left it alone */ | ||
| 26 | -int ntp_request(const char *host, double *offset, int *offset_result, double *jitter, int *stratum){ | ||
| 27 | +int ntp_request(const char *host, double *offset, int *offset_result, double *jitter, int *stratum, int *peer){ | ||
| 28 | int conn=-1, i, npeers=0, num_candidates=0; | ||
| 29 | double tmp_offset = 0; | ||
| 30 | int min_peer_sel=PEER_INCLUDED; | ||
| 31 | @@ -266,7 +270,7 @@ | ||
| 32 | |||
| 33 | status = STATE_OK; | ||
| 34 | *offset_result = STATE_UNKNOWN; | ||
| 35 | - *jitter = *stratum = -1; | ||
| 36 | + *jitter = *stratum = *peer = -1; | ||
| 37 | |||
| 38 | /* Long-winded explanation: | ||
| 39 | * Getting the sync peer offset, jitter and stratum requires a number of | ||
| 40 | @@ -328,6 +332,7 @@ | ||
| 41 | } | ||
| 42 | } | ||
| 43 | if(verbose) printf("%d candiate peers available\n", num_candidates); | ||
| 44 | + *peer = num_candidates; | ||
| 45 | if(verbose && syncsource_found) printf("synchronization source found\n"); | ||
| 46 | if(! syncsource_found){ | ||
| 47 | status = STATE_WARNING; | ||
| 48 | @@ -471,6 +476,8 @@ | ||
| 49 | {"scrit", required_argument, 0, 'C'}, | ||
| 50 | {"jwarn", required_argument, 0, 'j'}, | ||
| 51 | {"jcrit", required_argument, 0, 'k'}, | ||
| 52 | + {"pwarn", required_argument, 0, 'o'}, | ||
| 53 | + {"pcrit", required_argument, 0, 'P'}, | ||
| 54 | {"timeout", required_argument, 0, 't'}, | ||
| 55 | {"hostname", required_argument, 0, 'H'}, | ||
| 56 | {"port", required_argument, 0, 'p'}, | ||
| 57 | @@ -482,7 +489,7 @@ | ||
| 58 | usage ("\n"); | ||
| 59 | |||
| 60 | while (1) { | ||
| 61 | - c = getopt_long (argc, argv, "Vhv46qw:c:W:C:j:k:t:H:p:", longopts, &option); | ||
| 62 | + c = getopt_long (argc, argv, "Vhv46qw:c:W:C:j:k:t:H:p:P:o:", longopts, &option); | ||
| 63 | if (c == -1 || c == EOF || c == 1) | ||
| 64 | break; | ||
| 65 | |||
| 66 | @@ -525,6 +532,14 @@ | ||
| 67 | do_jitter=1; | ||
| 68 | jcrit = optarg; | ||
| 69 | break; | ||
| 70 | + case 'o': | ||
| 71 | + do_peer=1; | ||
| 72 | + pwarn = optarg; | ||
| 73 | + break; | ||
| 74 | + case 'P': | ||
| 75 | + do_peer=1; | ||
| 76 | + pcrit = optarg; | ||
| 77 | + break; | ||
| 78 | case 'H': | ||
| 79 | if(is_host(optarg) == FALSE) | ||
| 80 | usage2(_("Invalid hostname/address"), optarg); | ||
| 81 | @@ -584,8 +599,16 @@ | ||
| 82 | TRUE, 0, TRUE, 16); | ||
| 83 | } | ||
| 84 | |||
| 85 | +char *perfd_peer (int num_peer) | ||
| 86 | +{ | ||
| 87 | + return perfdata ("num_peer", num_peer, "", | ||
| 88 | + do_peer, (int)peer_thresholds->warning->end, | ||
| 89 | + do_peer, (int)peer_thresholds->critical->end, | ||
| 90 | + TRUE, 0, TRUE, 16); | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | int main(int argc, char *argv[]){ | ||
| 94 | - int result, offset_result, stratum; | ||
| 95 | + int result, offset_result, stratum, peer; | ||
| 96 | double offset=0, jitter=0; | ||
| 97 | char *result_line, *perfdata_line; | ||
| 98 | |||
| 99 | @@ -602,6 +625,7 @@ | ||
| 100 | set_thresholds(&offset_thresholds, owarn, ocrit); | ||
| 101 | set_thresholds(&jitter_thresholds, jwarn, jcrit); | ||
| 102 | set_thresholds(&stratum_thresholds, swarn, scrit); | ||
| 103 | + set_thresholds(&peer_thresholds, pwarn, pcrit); | ||
| 104 | |||
| 105 | /* initialize alarm signal handling */ | ||
| 106 | signal (SIGALRM, socket_timeout_alarm_handler); | ||
| 107 | @@ -610,7 +634,7 @@ | ||
| 108 | alarm (socket_timeout); | ||
| 109 | |||
| 110 | /* This returns either OK or WARNING (See comment preceeding ntp_request) */ | ||
| 111 | - result = ntp_request(server_address, &offset, &offset_result, &jitter, &stratum); | ||
| 112 | + result = ntp_request(server_address, &offset, &offset_result, &jitter, &stratum, &peer); | ||
| 113 | |||
| 114 | if(offset_result == STATE_UNKNOWN) { | ||
| 115 | /* if there's no sync peer (this overrides ntp_request output): */ | ||
| 116 | @@ -628,6 +652,9 @@ | ||
| 117 | if(do_jitter) | ||
| 118 | result = max_state_alt(result, get_status(jitter, jitter_thresholds)); | ||
| 119 | |||
| 120 | + if(do_peer) | ||
| 121 | + result = max_state_alt(result, get_status(peer, peer_thresholds)); | ||
| 122 | + | ||
| 123 | switch (result) { | ||
| 124 | case STATE_CRITICAL : | ||
| 125 | asprintf(&result_line, _("NTP CRITICAL:")); | ||
| 126 | @@ -662,6 +689,10 @@ | ||
| 127 | asprintf(&result_line, "%s, stratum=%i", result_line, stratum); | ||
| 128 | asprintf(&perfdata_line, "%s %s", perfdata_line, perfd_stratum(stratum)); | ||
| 129 | } | ||
| 130 | + if (do_peer) { | ||
| 131 | + asprintf(&result_line, "%s, num_peer=%i", result_line, peer); | ||
| 132 | + asprintf(&perfdata_line, "%s %s", perfdata_line, perfd_peer(peer)); | ||
| 133 | + } | ||
| 134 | printf("%s|%s\n", result_line, perfdata_line); | ||
| 135 | |||
| 136 | if(server_address!=NULL) free(server_address); | ||
| 137 | @@ -698,6 +729,10 @@ | ||
| 138 | printf (" %s\n", _("Warning threshold for jitter")); | ||
| 139 | printf (" %s\n", "-k, --jcrit=THRESHOLD"); | ||
| 140 | printf (" %s\n", _("Critical threshold for jitter")); | ||
| 141 | + printf (" %s\n", "-o, --pwarn=THRESHOLD"); | ||
| 142 | + printf (" %s\n", _("Warning threshold for peer")); | ||
| 143 | + printf (" %s\n", "-P, --pcrit=THRESHOLD"); | ||
| 144 | + printf (" %s\n", _("Critical threshold for peer")); | ||
| 145 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
| 146 | printf (_(UT_VERBOSE)); | ||
| 147 | |||
