From: Michael Tremer Date: Fri, 10 Jul 2026 15:05:49 +0000 (+0000) Subject: graphs: knot-resolver: Add a response codes graph X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2dc78b9d239611ec48ee8d941236205eb204bc2f;p=collecty.git graphs: knot-resolver: Add a response codes graph Signed-off-by: Michael Tremer --- diff --git a/src/daemon/colors.h b/src/daemon/colors.h index ba44238..83e0ffd 100644 --- a/src/daemon/colors.h +++ b/src/daemon/colors.h @@ -137,6 +137,12 @@ #define COLOR_DNS_ITERATOR COLOR_CLEAN_GREEN #define COLOR_DNS_VALIDATOR COLOR_PURPLE_MAGENTA +// DNS Responses +#define COLOR_RCODE_NOERROR COLOR_CLEAN_GREEN +#define COLOR_RCODE_NXDOMAIN COLOR_CLEAN_AMBER +#define COLOR_RCODE_SERVFAIL COLOR_SOFT_RED +#define COLOR_RCODE_NODATA COLOR_COOL_CYAN + // CPU Colors static inline const char* COLOR_CPU(long i) { const char* cpu_colors[] = { diff --git a/src/daemon/graphs.c b/src/daemon/graphs.c index 0b9b5fa..edc6ed2 100644 --- a/src/daemon/graphs.c +++ b/src/daemon/graphs.c @@ -97,6 +97,7 @@ static const td_graph_impl* graph_impls[] = { &knot_resolver_queries_graph, &knot_resolver_cache_graph, &knot_resolver_transports_graph, + &knot_resolver_responses_graph, // Unbound &unbound_cache_performance_graph, diff --git a/src/daemon/graphs/knot-resolver.c b/src/daemon/graphs/knot-resolver.c index 1793fc5..fa3554d 100644 --- a/src/daemon/graphs/knot-resolver.c +++ b/src/daemon/graphs/knot-resolver.c @@ -188,3 +188,69 @@ const td_graph_impl knot_resolver_transports_graph = { .lower_limit = 0, .upper_limit = LONG_MAX, }; + +// Responses + +static int knot_resolver_responses_title(td_ctx* ctx, td_graph* graph, + const char* object, char* title, size_t length) { + return __td_string_set(title, length, _("Response Codes")); +} + +static int knot_resolver_responses_render(td_ctx* ctx, td_graph* graph, + const td_graph_render_options* options, td_args* args, const char* object) { + int r; + + // Load all sources + r = td_graph_load_source(graph, args, "knot-resolver", NULL); + if (r < 0) + return r; + + // Draw the stacked backgrounds first + DRAW_AREA_BACKGROUND(args, "answer_servfail", NULL, COLOR_RCODE_SERVFAIL, 0); + DRAW_AREA_BACKGROUND(args, "answer_nxdomain", NULL, COLOR_RCODE_NXDOMAIN, STACKED); + DRAW_AREA_BACKGROUND(args, "answer_nodata", NULL, COLOR_RCODE_NODATA, STACKED); + DRAW_AREA_BACKGROUND(args, "answer_noerror", NULL, COLOR_RCODE_NOERROR, STACKED); + + // Draw the area outlines afterwards + DRAW_AREA_OUTLINE_WITH_LABEL(args, "answer_servfail", NULL, + COLOR_RCODE_SERVFAIL, 0, _("SERVFAIL")); + PRINT_CAMM(args, "answer_servfail", NULL, QPS, QPS_UNIT); + + DRAW_AREA_OUTLINE_WITH_LABEL(args, "answer_nxdomain", NULL, + COLOR_RCODE_NXDOMAIN, STACKED, _("NXDOMAIN")); + PRINT_CAMM(args, "answer_nxdomain", NULL, QPS, QPS_UNIT); + + DRAW_AREA_OUTLINE_WITH_LABEL(args, "answer_nodata", NULL, + COLOR_RCODE_NODATA, STACKED, _("NODATA")); + PRINT_CAMM(args, "answer_nodata", NULL, QPS, QPS_UNIT); + + DRAW_AREA_OUTLINE_WITH_LABEL(args, "answer_noerror", NULL, + COLOR_RCODE_NOERROR, STACKED, _("NOERROR")); + PRINT_CAMM(args, "answer_noerror", NULL, QPS, QPS_UNIT); + + PRINT_EMPTY_LINE(args); + + // Show the total queries + PRINT_LABEL(args, _("Total")); + PRINT_CAMM(args, "answer_total", NULL, QPS, QPS_UNIT); + + // Header + PRINT_HEADER4(args, _("Current"), _("Average"), _("Minimum"), _("Maximum")); + + return 0; +} + +const td_graph_impl knot_resolver_responses_graph = { + .name = "KnotResolverResponses", + .can_render = knot_resolver_can_render, + .render = knot_resolver_responses_render, + .title = knot_resolver_responses_title, + .vlabel = td_graph_vlabel_qps, + + // Flags + .flags = TELEMETRY_GRAPH_REVERSE, + + // Limits + .lower_limit = 0, + .upper_limit = LONG_MAX, +}; diff --git a/src/daemon/graphs/knot-resolver.h b/src/daemon/graphs/knot-resolver.h index 9a998d3..cd8dd09 100644 --- a/src/daemon/graphs/knot-resolver.h +++ b/src/daemon/graphs/knot-resolver.h @@ -26,5 +26,6 @@ extern const td_graph_impl knot_resolver_queries_graph; extern const td_graph_impl knot_resolver_cache_graph; extern const td_graph_impl knot_resolver_transports_graph; +extern const td_graph_impl knot_resolver_responses_graph; #endif /* TELEMETRY_GRAPH_KNOT_RESOLVER_H */