From 4b74d7d24eecf4740241b73314ee70f3fdd76636 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 11 Nov 2025 21:13:10 +0000 Subject: [PATCH] legacy-gateway-latency4: Add the packet loss to the graph's background Signed-off-by: Michael Tremer --- src/daemon/colors.h | 9 ++++++++ src/daemon/graphs/graph.h | 18 +++++++++++++++ src/daemon/graphs/legacy-gateway-latency4.c | 23 ++++++++++++++++++++ src/daemon/sources/legacy-gateway-latency4.c | 3 --- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/daemon/colors.h b/src/daemon/colors.h index fbbdba4..70ae99b 100644 --- a/src/daemon/colors.h +++ b/src/daemon/colors.h @@ -79,6 +79,11 @@ // Latency #define COLOR_LATENCY COLOR_LIGHT_BLUE +#define COLOR_LOSS_0 COLOR_TRANSPARENT +#define COLOR_LOSS_5 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_20P) +#define COLOR_LOSS_10 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_40P) +#define COLOR_LOSS_25 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_60P) +#define COLOR_LOSS_50 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_80P) // Temperature #define COLOR_TEMPERATURE COLOR_RED @@ -101,9 +106,13 @@ static inline const char* COLOR_CPU(long i) { #define COLOR_WITH_ALPHA(base, alpha) base alpha #define COLOR_OPACITY_100P "ff" +#define COLOR_OPACITY_80P "cc" #define COLOR_OPACITY_75P "c0" +#define COLOR_OPACITY_60P "66" #define COLOR_OPACITY_50P "80" +#define COLOR_OPACITY_40P "66" #define COLOR_OPACITY_25P "40" +#define COLOR_OPACITY_20P "33" #define COLOR_OPACITY_0P "00" // Fill areas very lightly diff --git a/src/daemon/graphs/graph.h b/src/daemon/graphs/graph.h index dd1af01..88a0800 100644 --- a/src/daemon/graphs/graph.h +++ b/src/daemon/graphs/graph.h @@ -234,6 +234,7 @@ static inline int __DRAW(td_args* args, const char* what, const char* field, // Handles for fields #define FIELD_SPACER(field) field "_spacer" +#define FIELD_BACKGROUND(field) field "_background" #define FIELD_CURRENT(field) field "_cur" #define FIELD_AVERAGE(field) field "_avg" #define FIELD_MINIMUM(field) field "_min" @@ -344,6 +345,14 @@ static inline int __DRAW(td_args* args, const char* what, const char* field, ); \ } while (0) +#define COMPUTE_BACKGROUND(args, background, field, object) \ + do { \ + COMPUTE_CDEF(args, FIELD "=" FIELD ",UN,UNKN,INF,IF", \ + FIELD_AND_OBJECT(background, object), \ + FIELD_AND_OBJECT(field, object) \ + ); \ + } while (0) + #define COMPUTE_BYTES_FROM_SECTORS(args, field, object) \ do { \ COMPUTE_CDEF(args, FIELD "=" FIELD ",512,*", \ @@ -364,6 +373,15 @@ static inline int __DRAW(td_args* args, const char* what, const char* field, DRAW_AREA_BACKGROUND(args, FIELD_STDDEV2(stddev), object, color, STACKED); \ } while (0) +/* + Fills the background with the given color if there is any value +*/ +#define DRAW_BACKGROUND_WITH_LABEL(args, field, object, color, ...) \ + do { \ + COMPUTE_BACKGROUND(args, FIELD_BACKGROUND(field), field, object); \ + DRAW_WITH_LABEL(args, "AREA", FIELD_BACKGROUND(field), object, color, 0, ##__VA_ARGS__); \ + } while (0) + /* This draws an I/O graph */ diff --git a/src/daemon/graphs/legacy-gateway-latency4.c b/src/daemon/graphs/legacy-gateway-latency4.c index 82ba30f..c058ce6 100644 --- a/src/daemon/graphs/legacy-gateway-latency4.c +++ b/src/daemon/graphs/legacy-gateway-latency4.c @@ -37,6 +37,29 @@ static int legacy_gateway_latency4_render(td_ctx* ctx, td_graph* graph, if (r < 0) return r; + // Compute packet losses + COMPUTE_LIMIT(args, "loss0", "loss", NULL, 0L, 5L); + COMPUTE_LIMIT(args, "loss5", "loss", NULL, 5L, 10L); + COMPUTE_LIMIT(args, "loss10", "loss", NULL, 10L, 25L); + COMPUTE_LIMIT(args, "loss25", "loss", NULL, 25L, 50L); + COMPUTE_LIMIT(args, "loss50", "loss", NULL, 50L, 100L); + + // Fill the background if the loss is within the range + DRAW_BACKGROUND_WITH_LABEL(args, "loss0", NULL, COLOR_LOSS_0, "%s", _("Packet Loss > 0%")); + PRINT_EOL(args); + + DRAW_BACKGROUND_WITH_LABEL(args, "loss5", NULL, COLOR_LOSS_5, "%s", _("Packet Loss > 5%")); + PRINT_EOL(args); + + DRAW_BACKGROUND_WITH_LABEL(args, "loss10", NULL, COLOR_LOSS_10, "%s", _("Packet Loss > 10%")); + PRINT_EOL(args); + + DRAW_BACKGROUND_WITH_LABEL(args, "loss25", NULL, COLOR_LOSS_25, "%s", _("Packet Loss > 25%")); + PRINT_EOL(args); + + DRAW_BACKGROUND_WITH_LABEL(args, "loss50", NULL, COLOR_LOSS_50, "%s", _("Packet Loss > 50%")); + PRINT_EOL(args); + PRINT_EMPTY_LINE(args); // Draw a horizontal line of the average diff --git a/src/daemon/sources/legacy-gateway-latency4.c b/src/daemon/sources/legacy-gateway-latency4.c index 26cc995..62183a6 100644 --- a/src/daemon/sources/legacy-gateway-latency4.c +++ b/src/daemon/sources/legacy-gateway-latency4.c @@ -161,9 +161,6 @@ static int legacy_gateway_latency_on_success(td_ctx* ctx, avg = MSEC_TO_SEC(avg); mdev = MSEC_TO_SEC(mdev); - // Convert the loss - loss /= 100.0; - // Submit values return td_source_submit_values(source, NULL, VALUES( VALUE_FLOAT("latency", &avg), -- 2.47.3