]> git.ipfire.org Git - collecty.git/commitdiff
loadavg: Add a simple graph
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 3 Oct 2025 10:22:51 +0000 (10:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 3 Oct 2025 10:22:51 +0000 (10:22 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/graphs/loadavg.c

index 0c72fcaeded8b83b347733a1ed0d00ae94bfbc97..dbb92a5cf160d27a878143e315427534a50a3e86 100644 (file)
 #                                                                             #
 #############################################################################*/
 
+#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,
 };