From c7f6c3332134691909c9c6e33d9f35863024ce53 Mon Sep 17 00:00:00 2001 From: iris Date: Fri, 18 Sep 2026 01:25:29 +0200 Subject: [PATCH] swarm-grafana: sort multi-series bargauge panels by value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bargauge panels display series in the order the datasource returns them — Grafana has no native sort for that (long-standing upstream gap, grafana#17245). The reliable fix is sorting at the PromQL level with sort_desc() on an instant vector, which forge.json's 'Issues by label' panel already does. Applies the same pattern to the other 14 multi-series bargauge panels across agents.json, claude-usage.json, and authelia.json (the latter two also needed instant: true added, since sort_desc only works on instant vectors). logstore.json's two VictoriaLogs-backed bargauge panels use LogsQL, not PromQL, and are left out of this pass — LogsQL's sort-after-stats has a documented ordering bug in some versions; needs its own verification. --- .../swarm-grafana/dashboards/agents.json | 8 ++++---- .../swarm-grafana/dashboards/authelia.json | 6 ++++-- .../swarm-grafana/dashboards/claude-usage.json | 16 ++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/nix/host-modules/swarm-grafana/dashboards/agents.json b/nix/host-modules/swarm-grafana/dashboards/agents.json index 5fb28105..c4e80216 100644 --- a/nix/host-modules/swarm-grafana/dashboards/agents.json +++ b/nix/host-modules/swarm-grafana/dashboards/agents.json @@ -644,7 +644,7 @@ "name": "@datasourceUid@" }, "spec": { - "expr": "sum by (agent) ({__name__=\"hyperhive.container.storage.usage\", hive=~\"$hive\", agent=~\"$agent\"})", + "expr": "sort_desc(sum by (agent) ({__name__=\"hyperhive.container.storage.usage\", hive=~\"$hive\", agent=~\"$agent\"}))", "instant": true, "legendFormat": "{{agent}}" } @@ -795,7 +795,7 @@ "name": "@datasourceUid@" }, "spec": { - "expr": "sum by (agent) (increase({__name__=\"claude_code.active_time.total\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (agent) (increase({__name__=\"claude_code.active_time.total\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{agent}}" } @@ -1209,7 +1209,7 @@ "name": "@datasourceUid@" }, "spec": { - "expr": "sum by (subagent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\", subagent!=\"\"}[$__range]))", + "expr": "sort_desc(sum by (subagent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\", subagent!=\"\"}[$__range])))", "instant": true, "legendFormat": "{{subagent}}" } @@ -1285,7 +1285,7 @@ "name": "@datasourceUid@" }, "spec": { - "expr": "sum by (agent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\", subagent!=\"\"}[$__range]))", + "expr": "sort_desc(sum by (agent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\", subagent!=\"\"}[$__range])))", "instant": true, "legendFormat": "{{agent}}" } diff --git a/nix/host-modules/swarm-grafana/dashboards/authelia.json b/nix/host-modules/swarm-grafana/dashboards/authelia.json index e0c1e98d..dc72bab4 100644 --- a/nix/host-modules/swarm-grafana/dashboards/authelia.json +++ b/nix/host-modules/swarm-grafana/dashboards/authelia.json @@ -255,7 +255,8 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (code) (increase(authelia_request[$__range]))", + "expr": "sort_desc(sum by (code) (increase(authelia_request[$__range])))", + "instant": true, "legendFormat": "{{code}}" } ], @@ -302,7 +303,8 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (code) (increase(authelia_authz[$__range]))", + "expr": "sort_desc(sum by (code) (increase(authelia_authz[$__range])))", + "instant": true, "legendFormat": "{{code}}" } ], diff --git a/nix/host-modules/swarm-grafana/dashboards/claude-usage.json b/nix/host-modules/swarm-grafana/dashboards/claude-usage.json index b76b9328..06a22fbc 100644 --- a/nix/host-modules/swarm-grafana/dashboards/claude-usage.json +++ b/nix/host-modules/swarm-grafana/dashboards/claude-usage.json @@ -331,7 +331,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (model) (increase({__name__=\"claude_code.token.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (model) (increase({__name__=\"claude_code.token.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{model}}" } @@ -448,7 +448,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (effort) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (effort) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{effort}}" } @@ -507,7 +507,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (query_source) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (query_source) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{query_source}}" } @@ -566,7 +566,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (language, decision) (increase({__name__=\"claude_code.code_edit_tool.decision\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (language, decision) (increase({__name__=\"claude_code.code_edit_tool.decision\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{language}} · {{decision}}" } @@ -625,7 +625,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (tool_name, decision) (increase({__name__=\"claude_code.code_edit_tool.decision\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (tool_name, decision) (increase({__name__=\"claude_code.code_edit_tool.decision\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{tool_name}} · {{decision}}" } @@ -838,7 +838,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (agent) (increase({__name__=\"claude_code.active_time.total\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])) / sum by (agent) (increase({__name__=\"claude_code.session.count\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (agent) (increase({__name__=\"claude_code.active_time.total\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])) / sum by (agent) (increase({__name__=\"claude_code.session.count\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{agent}}" } @@ -897,7 +897,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (agent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (agent) (increase({__name__=\"claude_code.cost.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{agent}}" } @@ -956,7 +956,7 @@ "type": "prometheus", "uid": "@datasourceUid@" }, - "expr": "sum by (agent) (increase({__name__=\"claude_code.token.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range]))", + "expr": "sort_desc(sum by (agent) (increase({__name__=\"claude_code.token.usage\", hive=~\"$hive\", agent=~\"$agent\"}[$__range])))", "instant": true, "legendFormat": "{{agent}}" }