diff options
| author | Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> | 2007-12-04 12:08:34 +0000 |
|---|---|---|
| committer | Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> | 2007-12-04 12:08:34 +0000 |
| commit | d358f1cc95a4c75b8ab443b9e5ce0c5b8b3c8d43 (patch) | |
| tree | 0c4afa08b2c53c9fb782bb16f6a2f26e5073f44a | |
| parent | 6157cdf6e514b23ee20e2bde67eb62757bcdd2f2 (diff) | |
| download | monitoring-plugins-d358f1cc95a4c75b8ab443b9e5ce0c5b8b3c8d43.tar.gz | |
Add a quiet mode to avoid notification when NTP server isn't sync (check_ntp_peer and heck_ntp_time)
Fix default jitter and stratum ranges not including -1
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/branches/dermoth_ntp_rework@1840 f882894a-f735-0410-b71e-b25c423dba1c
| -rw-r--r-- | plugins/check_ntp_peer.c | 41 | ||||
| -rw-r--r-- | plugins/check_ntp_time.c | 11 |
2 files changed, 36 insertions, 16 deletions
diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index edef66a8..83fa8aba 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c | |||
| @@ -52,15 +52,16 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 52 | 52 | ||
| 53 | static char *server_address=NULL; | 53 | static char *server_address=NULL; |
| 54 | static int verbose=0; | 54 | static int verbose=0; |
| 55 | static int quiet=0; | ||
| 55 | static short do_offset=0; | 56 | static short do_offset=0; |
| 56 | static char *owarn="60"; | 57 | static char *owarn="60"; |
| 57 | static char *ocrit="120"; | 58 | static char *ocrit="120"; |
| 58 | static short do_stratum=0; | 59 | static short do_stratum=0; |
| 59 | static char *swarn="16"; | 60 | static char *swarn="-1:16"; |
| 60 | static char *scrit="16"; | 61 | static char *scrit="-1:16"; |
| 61 | static short do_jitter=0; | 62 | static short do_jitter=0; |
| 62 | static char *jwarn="5000"; | 63 | static char *jwarn="-1:5000"; |
| 63 | static char *jcrit="10000"; | 64 | static char *jcrit="-1:10000"; |
| 64 | static int syncsource_found=0; | 65 | static int syncsource_found=0; |
| 65 | 66 | ||
| 66 | int process_arguments (int, char **); | 67 | int process_arguments (int, char **); |
| @@ -358,7 +359,7 @@ int ntp_request(const char *host, double *offset, int *offset_result, double *ji | |||
| 358 | if(value == NULL || value==nptr) { | 359 | if(value == NULL || value==nptr) { |
| 359 | if(verbose) printf("error: unable to read server offset response.\n"); | 360 | if(verbose) printf("error: unable to read server offset response.\n"); |
| 360 | } else { | 361 | } else { |
| 361 | if(verbose) printf("%g\n", *offset); | 362 | if(verbose) printf("%.10g\n", tmp_offset); |
| 362 | if(*offset_result == STATE_UNKNOWN || fabs(tmp_offset) < fabs(*offset)) { | 363 | if(*offset_result == STATE_UNKNOWN || fabs(tmp_offset) < fabs(*offset)) { |
| 363 | *offset = tmp_offset; | 364 | *offset = tmp_offset; |
| 364 | *offset_result = STATE_OK; | 365 | *offset_result = STATE_OK; |
| @@ -379,11 +380,11 @@ int ntp_request(const char *host, double *offset, int *offset_result, double *ji | |||
| 379 | if(value != NULL) | 380 | if(value != NULL) |
| 380 | *jitter = strtod(value, &nptr); | 381 | *jitter = strtod(value, &nptr); |
| 381 | /* If value is null or no conversion was performed */ | 382 | /* If value is null or no conversion was performed */ |
| 382 | if(value == NULL || value==nptr){ | 383 | if(value == NULL || value==nptr) { |
| 383 | if(verbose) printf("error: unable to read server jitter/dispersion response.\n"); | 384 | if(verbose) printf("error: unable to read server jitter/dispersion response.\n"); |
| 384 | *jitter = -1; | 385 | *jitter = -1; |
| 385 | } else { | 386 | } else if(verbose) { |
| 386 | if(verbose) printf("%g\n", *jitter); | 387 | printf("%.10g\n", *jitter); |
| 387 | } | 388 | } |
| 388 | } | 389 | } |
| 389 | 390 | ||
| @@ -397,7 +398,7 @@ int ntp_request(const char *host, double *offset, int *offset_result, double *ji | |||
| 397 | /* Convert the value if we have one */ | 398 | /* Convert the value if we have one */ |
| 398 | if(value != NULL) | 399 | if(value != NULL) |
| 399 | *stratum = strtol(value, &nptr, 10); | 400 | *stratum = strtol(value, &nptr, 10); |
| 400 | if(value == NULL || value==nptr){ | 401 | if(value == NULL || value==nptr) { |
| 401 | if(verbose) printf("error: unable to read server stratum response.\n"); | 402 | if(verbose) printf("error: unable to read server stratum response.\n"); |
| 402 | *stratum = -1; | 403 | *stratum = -1; |
| 403 | } else { | 404 | } else { |
| @@ -422,6 +423,7 @@ int process_arguments(int argc, char **argv){ | |||
| 422 | {"verbose", no_argument, 0, 'v'}, | 423 | {"verbose", no_argument, 0, 'v'}, |
| 423 | {"use-ipv4", no_argument, 0, '4'}, | 424 | {"use-ipv4", no_argument, 0, '4'}, |
| 424 | {"use-ipv6", no_argument, 0, '6'}, | 425 | {"use-ipv6", no_argument, 0, '6'}, |
| 426 | {"quiet", no_argument, 0, 'q'}, | ||
| 425 | {"warning", required_argument, 0, 'w'}, | 427 | {"warning", required_argument, 0, 'w'}, |
| 426 | {"critical", required_argument, 0, 'c'}, | 428 | {"critical", required_argument, 0, 'c'}, |
| 427 | {"swarn", required_argument, 0, 'W'}, | 429 | {"swarn", required_argument, 0, 'W'}, |
| @@ -438,7 +440,7 @@ int process_arguments(int argc, char **argv){ | |||
| 438 | usage ("\n"); | 440 | usage ("\n"); |
| 439 | 441 | ||
| 440 | while (1) { | 442 | while (1) { |
| 441 | c = getopt_long (argc, argv, "Vhv46w:c:W:C:j:k:t:H:", longopts, &option); | 443 | c = getopt_long (argc, argv, "Vhv46qw:c:W:C:j:k:t:H:", longopts, &option); |
| 442 | if (c == -1 || c == EOF || c == 1) | 444 | if (c == -1 || c == EOF || c == 1) |
| 443 | break; | 445 | break; |
| 444 | 446 | ||
| @@ -454,6 +456,9 @@ int process_arguments(int argc, char **argv){ | |||
| 454 | case 'v': | 456 | case 'v': |
| 455 | verbose++; | 457 | verbose++; |
| 456 | break; | 458 | break; |
| 459 | case 'q': | ||
| 460 | quiet = 1; | ||
| 461 | break; | ||
| 457 | case 'w': | 462 | case 'w': |
| 458 | do_offset=1; | 463 | do_offset=1; |
| 459 | owarn = optarg; | 464 | owarn = optarg; |
| @@ -520,7 +525,7 @@ char *perfd_offset (double offset) | |||
| 520 | 525 | ||
| 521 | char *perfd_jitter (double jitter) | 526 | char *perfd_jitter (double jitter) |
| 522 | { | 527 | { |
| 523 | return fperfdata ("jitter", jitter, "s", | 528 | return fperfdata ("jitter", jitter, "", |
| 524 | do_jitter, jitter_thresholds->warning->end, | 529 | do_jitter, jitter_thresholds->warning->end, |
| 525 | do_jitter, jitter_thresholds->critical->end, | 530 | do_jitter, jitter_thresholds->critical->end, |
| 526 | TRUE, 0, FALSE, 0); | 531 | TRUE, 0, FALSE, 0); |
| @@ -554,10 +559,16 @@ int main(int argc, char *argv[]){ | |||
| 554 | 559 | ||
| 555 | /* This returns either OK or WARNING (See comment preceeding ntp_request) */ | 560 | /* This returns either OK or WARNING (See comment preceeding ntp_request) */ |
| 556 | result = ntp_request(server_address, &offset, &offset_result, &jitter, &stratum); | 561 | result = ntp_request(server_address, &offset, &offset_result, &jitter, &stratum); |
| 557 | if(offset_result == STATE_UNKNOWN) | ||
| 558 | result = STATE_CRITICAL; | ||
| 559 | 562 | ||
| 560 | result = max_state_alt(result, get_status(fabs(offset), offset_thresholds)); | 563 | if(offset_result == STATE_UNKNOWN) { |
| 564 | /* if there's no sync peer (this overrides ntp_request output): */ | ||
| 565 | result = (quiet == 1 ? STATE_UNKNOWN : STATE_CRITICAL); | ||
| 566 | } else { | ||
| 567 | /* Be quiet if there's no candidates either */ | ||
| 568 | if (quiet == 1 && result == STATE_WARNING) | ||
| 569 | result = STATE_UNKNOWN; | ||
| 570 | result = max_state_alt(result, get_status(fabs(offset), offset_thresholds)); | ||
| 571 | } | ||
| 561 | 572 | ||
| 562 | if(do_stratum) | 573 | if(do_stratum) |
| 563 | result = max_state_alt(result, get_status(stratum, stratum_thresholds)); | 574 | result = max_state_alt(result, get_status(stratum, stratum_thresholds)); |
| @@ -618,6 +629,8 @@ void print_help(void){ | |||
| 618 | print_usage(); | 629 | print_usage(); |
| 619 | printf (_(UT_HELP_VRSN)); | 630 | printf (_(UT_HELP_VRSN)); |
| 620 | printf (_(UT_HOST_PORT), 'p', "123"); | 631 | printf (_(UT_HOST_PORT), 'p', "123"); |
| 632 | printf (" %s\n", "-q, --quiet"); | ||
| 633 | printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL or WARNING if server isn't synchronized")); | ||
| 621 | printf (" %s\n", "-w, --warning=THRESHOLD"); | 634 | printf (" %s\n", "-w, --warning=THRESHOLD"); |
| 622 | printf (" %s\n", _("Offset to result in warning status (seconds)")); | 635 | printf (" %s\n", _("Offset to result in warning status (seconds)")); |
| 623 | printf (" %s\n", "-c, --critical=THRESHOLD"); | 636 | printf (" %s\n", "-c, --critical=THRESHOLD"); |
diff --git a/plugins/check_ntp_time.c b/plugins/check_ntp_time.c index 85015d65..042d3037 100644 --- a/plugins/check_ntp_time.c +++ b/plugins/check_ntp_time.c | |||
| @@ -51,6 +51,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 51 | 51 | ||
| 52 | static char *server_address=NULL; | 52 | static char *server_address=NULL; |
| 53 | static int verbose=0; | 53 | static int verbose=0; |
| 54 | static int quiet=0; | ||
| 54 | static char *owarn="60"; | 55 | static char *owarn="60"; |
| 55 | static char *ocrit="120"; | 56 | static char *ocrit="120"; |
| 56 | 57 | ||
| @@ -450,6 +451,7 @@ int process_arguments(int argc, char **argv){ | |||
| 450 | {"verbose", no_argument, 0, 'v'}, | 451 | {"verbose", no_argument, 0, 'v'}, |
| 451 | {"use-ipv4", no_argument, 0, '4'}, | 452 | {"use-ipv4", no_argument, 0, '4'}, |
| 452 | {"use-ipv6", no_argument, 0, '6'}, | 453 | {"use-ipv6", no_argument, 0, '6'}, |
| 454 | {"quiet", no_argument, 0, 'q'}, | ||
| 453 | {"warning", required_argument, 0, 'w'}, | 455 | {"warning", required_argument, 0, 'w'}, |
| 454 | {"critical", required_argument, 0, 'c'}, | 456 | {"critical", required_argument, 0, 'c'}, |
| 455 | {"timeout", required_argument, 0, 't'}, | 457 | {"timeout", required_argument, 0, 't'}, |
| @@ -462,7 +464,7 @@ int process_arguments(int argc, char **argv){ | |||
| 462 | usage ("\n"); | 464 | usage ("\n"); |
| 463 | 465 | ||
| 464 | while (1) { | 466 | while (1) { |
| 465 | c = getopt_long (argc, argv, "Vhv46w:c:t:H:", longopts, &option); | 467 | c = getopt_long (argc, argv, "Vhv46qw:c:t:H:", longopts, &option); |
| 466 | if (c == -1 || c == EOF || c == 1) | 468 | if (c == -1 || c == EOF || c == 1) |
| 467 | break; | 469 | break; |
| 468 | 470 | ||
| @@ -478,6 +480,9 @@ int process_arguments(int argc, char **argv){ | |||
| 478 | case 'v': | 480 | case 'v': |
| 479 | verbose++; | 481 | verbose++; |
| 480 | break; | 482 | break; |
| 483 | case 'q': | ||
| 484 | quiet = 1; | ||
| 485 | break; | ||
| 481 | case 'w': | 486 | case 'w': |
| 482 | owarn = optarg; | 487 | owarn = optarg; |
| 483 | break; | 488 | break; |
| @@ -544,7 +549,7 @@ int main(int argc, char *argv[]){ | |||
| 544 | 549 | ||
| 545 | offset = offset_request(server_address, &offset_result); | 550 | offset = offset_request(server_address, &offset_result); |
| 546 | if (offset_result == STATE_UNKNOWN) { | 551 | if (offset_result == STATE_UNKNOWN) { |
| 547 | result = STATE_CRITICAL; | 552 | result = (quiet == 1 ? STATE_UNKNOWN : STATE_CRITICAL); |
| 548 | } else { | 553 | } else { |
| 549 | result = get_status(fabs(offset), offset_thresholds); | 554 | result = get_status(fabs(offset), offset_thresholds); |
| 550 | } | 555 | } |
| @@ -589,6 +594,8 @@ void print_help(void){ | |||
| 589 | print_usage(); | 594 | print_usage(); |
| 590 | printf (_(UT_HELP_VRSN)); | 595 | printf (_(UT_HELP_VRSN)); |
| 591 | printf (_(UT_HOST_PORT), 'p', "123"); | 596 | printf (_(UT_HOST_PORT), 'p', "123"); |
| 597 | printf (" %s\n", "-q, --quiet"); | ||
| 598 | printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL if offset cannot be found")); | ||
| 592 | printf (" %s\n", "-w, --warning=THRESHOLD"); | 599 | printf (" %s\n", "-w, --warning=THRESHOLD"); |
| 593 | printf (" %s\n", _("Offset to result in warning status (seconds)")); | 600 | printf (" %s\n", _("Offset to result in warning status (seconds)")); |
| 594 | printf (" %s\n", "-c, --critical=THRESHOLD"); | 601 | printf (" %s\n", "-c, --critical=THRESHOLD"); |
