From 6392a0f77635d82b9b68bcbd1be4c6acc478767f Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Tue, 4 Nov 2025 10:13:39 +0100 Subject: check_ntp_peer: implement new output functionality --- plugins/check_ntp_peer.d/config.h | 58 ++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 25 deletions(-) (limited to 'plugins/check_ntp_peer.d/config.h') diff --git a/plugins/check_ntp_peer.d/config.h b/plugins/check_ntp_peer.d/config.h index 00e6b05d..396edea6 100644 --- a/plugins/check_ntp_peer.d/config.h +++ b/plugins/check_ntp_peer.d/config.h @@ -1,6 +1,7 @@ #pragma once #include "../../config.h" +#include "perfdata.h" #include "thresholds.h" #include @@ -16,26 +17,18 @@ typedef struct { // truechimer stuff bool do_truechimers; - char *twarn; - char *tcrit; - thresholds *truechimer_thresholds; + mp_thresholds truechimer_thresholds; - char *owarn; - char *ocrit; - thresholds *offset_thresholds; + // offset thresholds + mp_thresholds offset_thresholds; // stratum stuff bool do_stratum; - char *swarn; - char *scrit; - thresholds *stratum_thresholds; + mp_thresholds stratum_thresholds; // jitter stuff bool do_jitter; - char *jwarn; - char *jcrit; - thresholds *jitter_thresholds; - + mp_thresholds jitter_thresholds; } check_ntp_peer_config; check_ntp_peer_config check_ntp_peer_config_init() { @@ -45,23 +38,38 @@ check_ntp_peer_config check_ntp_peer_config_init() { .quiet = false, .do_truechimers = false, - .twarn = "0:", - .tcrit = "0:", - .truechimer_thresholds = NULL, + .truechimer_thresholds = mp_thresholds_init(), - .owarn = "60", - .ocrit = "120", - .offset_thresholds = NULL, + .offset_thresholds = mp_thresholds_init(), .do_stratum = false, - .swarn = "-1:16", - .scrit = "-1:16", - .stratum_thresholds = NULL, + .stratum_thresholds = mp_thresholds_init(), .do_jitter = false, - .jwarn = "-1:5000", - .jcrit = "-1:10000", - .jitter_thresholds = NULL, + .jitter_thresholds = mp_thresholds_init(), }; + + mp_range stratum_default = mp_range_init(); + stratum_default = mp_range_set_start(stratum_default, mp_create_pd_value(-1)); + stratum_default = mp_range_set_end(stratum_default, mp_create_pd_value(16)); + tmp.stratum_thresholds = mp_thresholds_set_warn(tmp.stratum_thresholds, stratum_default); + tmp.stratum_thresholds = mp_thresholds_set_crit(tmp.stratum_thresholds, stratum_default); + + mp_range jitter_w_default = mp_range_init(); + jitter_w_default = mp_range_set_start(jitter_w_default, mp_create_pd_value(-1)); + jitter_w_default = mp_range_set_end(jitter_w_default, mp_create_pd_value(5000)); + tmp.jitter_thresholds = mp_thresholds_set_warn(tmp.jitter_thresholds, jitter_w_default); + + mp_range jitter_c_default = mp_range_init(); + jitter_c_default = mp_range_set_start(jitter_c_default, mp_create_pd_value(-1)); + jitter_c_default = mp_range_set_end(jitter_c_default, mp_create_pd_value(10000)); + tmp.jitter_thresholds = mp_thresholds_set_crit(tmp.jitter_thresholds, jitter_c_default); + + mp_range offset_w_default = mp_range_init(); + offset_w_default = mp_range_set_start(offset_w_default, mp_create_pd_value(60)); + tmp.offset_thresholds = mp_thresholds_set_warn(tmp.offset_thresholds, offset_w_default); + mp_range offset_c_default = mp_range_init(); + offset_c_default = mp_range_set_start(offset_c_default, mp_create_pd_value(120)); + tmp.offset_thresholds = mp_thresholds_set_crit(tmp.offset_thresholds, offset_c_default); return tmp; } -- cgit v1.2.3-74-g34f1 From 99351f0560a5f457e499417366bdfdec0172a428 Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Wed, 5 Nov 2025 11:54:34 +0100 Subject: check_ntp_peer: fix several missing things and errors --- plugins/check_ntp_peer.c | 16 ++++++++++++++-- plugins/check_ntp_peer.d/config.h | 5 +++-- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'plugins/check_ntp_peer.d/config.h') diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index 68b2fa9c..032f8ea4 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c @@ -689,6 +689,7 @@ int main(int argc, char *argv[]) { /* if there's no sync peer (this overrides ntp_request output): */ sc_offset = mp_set_subcheck_state(sc_offset, (config.quiet ? STATE_UNKNOWN : STATE_CRITICAL)); + xasprintf(&sc_offset.output, "%s unknown", sc_offset.output); } else { /* Be quiet if there's no candidates either */ mp_state_enum tmp = STATE_OK; @@ -696,9 +697,14 @@ int main(int argc, char *argv[]) { tmp = STATE_UNKNOWN; } + xasprintf(&sc_offset.output, "%s: %.6fs", sc_offset.output, ntp_res.offset); + mp_perfdata pd_offset = perfdata_init(); pd_offset.value = mp_create_pd_value(fabs(ntp_res.offset)); pd_offset = mp_pd_set_thresholds(pd_offset, config.offset_thresholds); + pd_offset.label = "offset"; + pd_offset.uom = "s"; + mp_add_perfdata_to_subcheck(&sc_offset, pd_offset); tmp = max_state_alt(tmp, mp_get_pd_status(pd_offset)); sc_offset = mp_set_subcheck_state(sc_offset, tmp); @@ -708,12 +714,14 @@ int main(int argc, char *argv[]) { // truechimers if (config.do_truechimers) { - mp_subcheck sc_truechimers; + mp_subcheck sc_truechimers = mp_subcheck_init(); xasprintf(&sc_truechimers.output, "truechimers: %i", ntp_res.num_truechimers); mp_perfdata pd_truechimers = perfdata_init(); pd_truechimers.value = mp_create_pd_value(ntp_res.num_truechimers); - mp_pd_set_thresholds(pd_truechimers, config.truechimer_thresholds); + pd_truechimers.label = "truechimers"; + pd_truechimers = mp_pd_set_thresholds(pd_truechimers, config.truechimer_thresholds); + mp_add_perfdata_to_subcheck(&sc_truechimers, pd_truechimers); sc_truechimers = mp_set_subcheck_state(sc_truechimers, mp_get_pd_status(pd_truechimers)); @@ -728,6 +736,8 @@ int main(int argc, char *argv[]) { mp_perfdata pd_stratum = perfdata_init(); pd_stratum.value = mp_create_pd_value(ntp_res.stratum); pd_stratum = mp_pd_set_thresholds(pd_stratum, config.stratum_thresholds); + pd_stratum.label = "stratum"; + mp_add_perfdata_to_subcheck(&sc_stratum, pd_stratum); sc_stratum = mp_set_subcheck_state(sc_stratum, mp_get_pd_status(pd_stratum)); @@ -742,6 +752,8 @@ int main(int argc, char *argv[]) { mp_perfdata pd_jitter = perfdata_init(); pd_jitter.value = mp_create_pd_value(ntp_res.jitter); pd_jitter = mp_pd_set_thresholds(pd_jitter, config.jitter_thresholds); + pd_jitter.label = "jitter"; + mp_add_perfdata_to_subcheck(&sc_jitter, pd_jitter); sc_jitter = mp_set_subcheck_state(sc_jitter, mp_get_pd_status(pd_jitter)); diff --git a/plugins/check_ntp_peer.d/config.h b/plugins/check_ntp_peer.d/config.h index 396edea6..a6dd5c4c 100644 --- a/plugins/check_ntp_peer.d/config.h +++ b/plugins/check_ntp_peer.d/config.h @@ -66,10 +66,11 @@ check_ntp_peer_config check_ntp_peer_config_init() { tmp.jitter_thresholds = mp_thresholds_set_crit(tmp.jitter_thresholds, jitter_c_default); mp_range offset_w_default = mp_range_init(); - offset_w_default = mp_range_set_start(offset_w_default, mp_create_pd_value(60)); + offset_w_default = mp_range_set_end(offset_w_default, mp_create_pd_value(60)); tmp.offset_thresholds = mp_thresholds_set_warn(tmp.offset_thresholds, offset_w_default); + mp_range offset_c_default = mp_range_init(); - offset_c_default = mp_range_set_start(offset_c_default, mp_create_pd_value(120)); + offset_c_default = mp_range_set_end(offset_c_default, mp_create_pd_value(120)); tmp.offset_thresholds = mp_thresholds_set_crit(tmp.offset_thresholds, offset_c_default); return tmp; } -- cgit v1.2.3-74-g34f1 From a9b63deedb1775271fa1335a5d3eb034d0628e91 Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Wed, 5 Nov 2025 12:04:30 +0100 Subject: check_ntp_peer: add cli param to set output format --- plugins/check_ntp_peer.c | 50 +++++++++++++++++++++++++++++++-------- plugins/check_ntp_peer.d/config.h | 6 +++++ 2 files changed, 46 insertions(+), 10 deletions(-) (limited to 'plugins/check_ntp_peer.d/config.h') diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index 032f8ea4..f7cad630 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c @@ -478,16 +478,30 @@ ntp_request_result ntp_request(const check_ntp_peer_config config) { } check_ntp_peer_config_wrapper process_arguments(int argc, char **argv) { - static struct option longopts[] = { - {"version", no_argument, 0, 'V'}, {"help", no_argument, 0, 'h'}, - {"verbose", no_argument, 0, 'v'}, {"use-ipv4", no_argument, 0, '4'}, - {"use-ipv6", no_argument, 0, '6'}, {"quiet", no_argument, 0, 'q'}, - {"warning", required_argument, 0, 'w'}, {"critical", required_argument, 0, 'c'}, - {"swarn", required_argument, 0, 'W'}, {"scrit", required_argument, 0, 'C'}, - {"jwarn", required_argument, 0, 'j'}, {"jcrit", required_argument, 0, 'k'}, - {"twarn", required_argument, 0, 'm'}, {"tcrit", required_argument, 0, 'n'}, - {"timeout", required_argument, 0, 't'}, {"hostname", required_argument, 0, 'H'}, - {"port", required_argument, 0, 'p'}, {0, 0, 0, 0}}; + + enum { + output_format_index = CHAR_MAX + 1, + }; + + static struct option longopts[] = {{"version", no_argument, 0, 'V'}, + {"help", no_argument, 0, 'h'}, + {"verbose", no_argument, 0, 'v'}, + {"use-ipv4", no_argument, 0, '4'}, + {"use-ipv6", no_argument, 0, '6'}, + {"quiet", no_argument, 0, 'q'}, + {"warning", required_argument, 0, 'w'}, + {"critical", required_argument, 0, 'c'}, + {"swarn", required_argument, 0, 'W'}, + {"scrit", required_argument, 0, 'C'}, + {"jwarn", required_argument, 0, 'j'}, + {"jcrit", required_argument, 0, 'k'}, + {"twarn", required_argument, 0, 'm'}, + {"tcrit", required_argument, 0, 'n'}, + {"timeout", required_argument, 0, 't'}, + {"hostname", required_argument, 0, 'H'}, + {"port", required_argument, 0, 'p'}, + {"output-format", required_argument, 0, output_format_index}, + {0, 0, 0, 0}}; if (argc < 2) { usage("\n"); @@ -507,6 +521,17 @@ check_ntp_peer_config_wrapper process_arguments(int argc, char **argv) { } switch (option_char) { + case output_format_index: { + parsed_output_format parser = mp_parse_output_format(optarg); + if (!parser.parsing_success) { + printf("Invalid output format: %s\n", optarg); + exit(STATE_UNKNOWN); + } + + result.config.output_format_is_set = true; + result.config.output_format = parser.output_format; + break; + } case 'h': print_help(); exit(STATE_UNKNOWN); @@ -673,6 +698,10 @@ int main(int argc, char *argv[]) { const check_ntp_peer_config config = tmp_config.config; + if (config.output_format_is_set) { + mp_set_format(config.output_format); + } + /* initialize alarm signal handling */ signal(SIGALRM, socket_timeout_alarm_handler); @@ -825,6 +854,7 @@ void print_help(void) { printf(" %s\n", _("Critical threshold for number of usable time sources (\"truechimers\")")); printf(UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); printf(UT_VERBOSE); + printf(UT_OUTPUT_FORMAT); printf("\n"); printf("%s\n", _("This plugin checks an NTP server independent of any commandline")); diff --git a/plugins/check_ntp_peer.d/config.h b/plugins/check_ntp_peer.d/config.h index a6dd5c4c..488d936c 100644 --- a/plugins/check_ntp_peer.d/config.h +++ b/plugins/check_ntp_peer.d/config.h @@ -1,6 +1,7 @@ #pragma once #include "../../config.h" +#include "output.h" #include "perfdata.h" #include "thresholds.h" #include @@ -29,6 +30,9 @@ typedef struct { // jitter stuff bool do_jitter; mp_thresholds jitter_thresholds; + + bool output_format_is_set; + mp_output_format output_format; } check_ntp_peer_config; check_ntp_peer_config check_ntp_peer_config_init() { @@ -47,6 +51,8 @@ check_ntp_peer_config check_ntp_peer_config_init() { .do_jitter = false, .jitter_thresholds = mp_thresholds_init(), + + .output_format_is_set = false, }; mp_range stratum_default = mp_range_init(); -- cgit v1.2.3-74-g34f1