From: Michael Tremer Date: Fri, 3 Oct 2025 10:22:51 +0000 (+0000) Subject: loadavg: Add a simple graph X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a76d90b61e7c4c17ffd1ec04f65a5c55a8d0b029;p=telemetry.git loadavg: Add a simple graph Signed-off-by: Michael Tremer --- diff --git a/src/daemon/graphs/loadavg.c b/src/daemon/graphs/loadavg.c index 0c72fca..dbb92a5 100644 --- a/src/daemon/graphs/loadavg.c +++ b/src/daemon/graphs/loadavg.c @@ -18,9 +18,135 @@ # # #############################################################################*/ +#include "../colors.h" #include "../graph.h" +#include "../i18n.h" #include "loadavg.h" +// Set some colors +#define COLOR_LOAD15 COLOR_RED +#define COLOR_LOAD5 COLOR_ORANGE +#define COLOR_LOAD1 COLOR_YELLOW + +static int loadavg_render(collecty_ctx* ctx, + collecty_graph* graph, collecty_args* args, const char* object) { + int r; + + // This requires the loadavg module + r = collecty_graph_require_module(graph, args, "loadavg", object); + if (r < 0) + return r; + + // Add 15-minute load average + r = collecty_args_push(args, + DRAW("AREA", "load15", COLOR_WITH_ALPHA(COLOR_LOAD15, OPACITY_25P))); + if (r < 0) + return r; + + r = collecty_args_push(args, + DRAW_WITH_LABEL("LINE1", "load15", COLOR_LOAD15), _("15 Minutes")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load15_cur")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load15_avg")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load15_min")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load15_max") EOL); + if (r < 0) + return r; + + // Add 5-minute load average + r = collecty_args_push(args, + DRAW("AREA", "load5", COLOR_WITH_ALPHA(COLOR_LOAD5, OPACITY_25P))); + if (r < 0) + return r; + + r = collecty_args_push(args, + DRAW_WITH_LABEL("LINE1", "load5", COLOR_LOAD5), _("5 Minutes")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load5_cur")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load5_avg")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load5_min")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load5_max") EOL); + if (r < 0) + return r; + + // Add 1-minute load average + r = collecty_args_push(args, + DRAW("AREA", "load1", COLOR_WITH_ALPHA(COLOR_LOAD1, OPACITY_25P))); + if (r < 0) + return r; + + r = collecty_args_push(args, + DRAW_WITH_LABEL("LINE1", "load1", COLOR_LOAD1), _("1 Minute")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load1_cur")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load1_avg")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load1_min")); + if (r < 0) + return r; + + r = collecty_args_push(args, PRINT_FLOAT("load1_max") EOL); + if (r < 0) + return r; + + // Add an empty line + r = collecty_args_push(args, EMPTY_COLUMN); + if (r < 0) + return r; + + // Add the headline for the "Current" column + r = collecty_args_push(args, HEADER, _("Current")); + if (r < 0) + return r; + + // Add the headline for the "Average" column + r = collecty_args_push(args, HEADER, _("Average")); + if (r < 0) + return r; + + // Add the headline for the "Minimum" column + r = collecty_args_push(args, HEADER, _("Minimum")); + if (r < 0) + return r; + + // Add the headline for the "Maximum" column + r = collecty_args_push(args, HEADER EOL, _("Maximum")); + if (r < 0) + return r; + + return 0; +} + const collecty_graph_impl loadavg_graph = { .name = "LoadAverage", + .render = loadavg_render, };