]> git.ipfire.org Git - telemetry.git/commitdiff
loadavg: Make the graph make sense
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 Oct 2025 08:11:24 +0000 (08:11 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 7 Oct 2025 08:11:24 +0000 (08:11 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/graphs/loadavg.c

index ffc691b58ae9ece33ed1f1ae73355a880d36180f..7bf1534e2c3d6de5c86ab27e04a46c33aa22f7ed 100644 (file)
@@ -42,22 +42,32 @@ static int loadavg_render(collecty_ctx* ctx,
        if (r < 0)
                return r;
 
-       // Add 15-minute load average
-       DRAW_AREA_WITH_LABEL(args, "load15", COLOR_LOAD15, _("15 Minutes"));
+       // Compute the difference
+       COMPUTE_CDEF(args, "delta5=load5,load15,-");
+       COMPUTE_CDEF(args, "delta1=load1,load5,-");
+
+       // Compute the area where load1/load5 is larger than load5/load15 respectively
+       COMPUTE_CDEF(args, "delta5+=delta5,0,delta5,LIMIT");
+       COMPUTE_CDEF(args, "delta1+=delta1,0,delta1,LIMIT");
+
+       // Draw the area backgrouns
+       DRAW_AREA_BACKGROUND(args, "load15", COLOR_LOAD15);
+       DRAW_AREA_BACKGROUND(args, "delta5+", COLOR_LOAD5, STACK);
+       DRAW_AREA_BACKGROUND(args, "delta1+", COLOR_LOAD1, STACK);
+
+       DRAW_AREA_OUTLINE_WITH_LABEL(args, "load15", COLOR_LOAD15, _("15 Minutes"));
        PRINT_FLOAT(args, "load15_cur");
        PRINT_FLOAT(args, "load15_avg");
        PRINT_FLOAT(args, "load15_min");
        PRINT_FLOAT(args, "load15_max", EOL);
 
-       // Add 5-minute load average
-       DRAW_AREA_WITH_LABEL(args, "load5", COLOR_LOAD5, _("5 Minutes"));
+       DRAW_AREA_OUTLINE_WITH_LABEL(args, "load5", COLOR_LOAD5, _("5 Minutes"));
        PRINT_FLOAT(args, "load5_cur");
        PRINT_FLOAT(args, "load5_avg");
        PRINT_FLOAT(args, "load5_min");
        PRINT_FLOAT(args, "load5_max", EOL);
 
-       // Add 1-minute load average
-       DRAW_AREA_WITH_LABEL(args, "load1", COLOR_LOAD1, _("1 Minute"));
+       DRAW_AREA_OUTLINE_WITH_LABEL(args, "load1", COLOR_LOAD1, _("1 Minute"));
        PRINT_FLOAT(args, "load1_cur");
        PRINT_FLOAT(args, "load1_avg");
        PRINT_FLOAT(args, "load1_min");