From 0b117899b77fe3af675a96ef7550c40117348856 Mon Sep 17 00:00:00 2001 From: Rob Thijssen Date: Fri, 4 Sep 2026 08:59:43 +0300 Subject: [PATCH] =?UTF-8?q?dashboard:=20visual=20leaderboard=20columns=20?= =?UTF-8?q?=E2=80=94=20MH/s=20bar,=20threshold=20colours,=20burst=20ratio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit est. MH/s as a bar on its own scale; gap p10 and drift median as threshold-coloured cells (low gap and positive drift are the suspicious directions); a burst ratio column, consecutive self-blocks over the count expected from the author's share, coloured amber above 2 and red above 4 and shown only where the expected count exceeds one. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01CBgs2nSi4H2mdh8kD8vMX5 --- asset/grafana/quantus.json | 166 ++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 4 deletions(-) diff --git a/asset/grafana/quantus.json b/asset/grafana/quantus.json index d4d6f9d..64eef6c 100644 --- a/asset/grafana/quantus.json +++ b/asset/grafana/quantus.json @@ -9,7 +9,7 @@ ], "timezone": "browser", "schemaVersion": 39, - "version": 15, + "version": 16, "refresh": "30s", "time": { "from": "now-6h", @@ -1716,7 +1716,7 @@ "x": 0, "y": 62 }, - "description": "Blocks observed authored within the selected time range, by reward preimage (cumulative counter, exists from the exporter's restart onward). est. MH/s is the author's share of blocks times the network hashrate estimate over the range: a statistical figure, \u00b110% or so at a few hundred blocks. gap p10: the 10th percentile of seconds between the author's block and the previous one; near zero means blocks released right after others' (withheld). drift median: the author's block timestamp minus when we first saw it; a few seconds negative is normal, positive is future-dated. consecutive: blocks authored directly after the author's own previous block. Timing columns fill in from when the exporter started recording them.", + "description": "Blocks observed authored within the selected time range, by reward preimage (cumulative counter, exists from the exporter's restart onward). est. MH/s is the author's share of blocks times the network hashrate estimate over the range: a statistical figure, \u00b110% or so at a few hundred blocks. gap p10: the 10th percentile of seconds between the author's block and the previous one; near zero means blocks released right after others' (withheld). drift median: the author's block timestamp minus when we first saw it; a few seconds negative is normal, positive is future-dated. consecutive: blocks authored directly after the author's own previous block. Timing columns fill in from when the exporter started recording them. burst \u00d7: consecutive self-blocks divided by the count expected from the author's share (blocks \u00d7 share); about 1 is normal, sustained values above 2 mean blocks held and released together. Shown only where the expected count exceeds one. Cell colours: gap p10 red under 1 s and amber under 3 s; drift green in the normal negative band, amber once future-dated, red past 5 s, blue when more than 20 s in the past; burst amber above 2, red above 4.", "targets": [ { "datasource": { @@ -1777,6 +1777,18 @@ "instant": true, "range": false, "format": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "refId": "F", + "instant": true, + "range": false, + "format": "table", + "expr": "sum by (preimage) (increase(quantus_consecutive_self_blocks_total{preimage!=\"other\"}[$__range])) / on(preimage) group_left() ((increase(quantus_blocks_authored_total[$__range]) * increase(quantus_blocks_authored_total[$__range]) / scalar(sum(increase(quantus_blocks_authored_total[$__range])))) > 1)" } ], "transformations": [ @@ -1835,7 +1847,8 @@ "Value #B": "est. MH/s", "Value #C": "gap p10 (s)", "Value #D": "drift median (s)", - "Value #E": "consecutive" + "Value #E": "consecutive", + "Value #F": "burst \u00d7" }, "indexByName": { "preimage": 0, @@ -1845,7 +1858,8 @@ "Value #B": 3, "Value #C": 4, "Value #D": 5, - "Value #E": 6 + "Value #E": 6, + "Value #F": 7 } } }, @@ -1967,6 +1981,31 @@ { "id": "unit", "value": "none" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "fieldMinMax", + "value": true + }, + { + "id": "custom.cellOptions", + "value": { + "type": "gauge", + "mode": "gradient" + } + }, + { + "id": "custom.width", + "value": 200 + }, + { + "id": "color", + "value": { + "mode": "continuous-BlPu" + } } ] }, @@ -1983,6 +2022,39 @@ { "id": "unit", "value": "none" + }, + { + "id": "color", + "value": { + "mode": "thresholds" + } + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-background", + "mode": "basic" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "green", + "value": 3 + } + ] + } } ] }, @@ -1999,6 +2071,43 @@ { "id": "unit", "value": "none" + }, + { + "id": "color", + "value": { + "mode": "thresholds" + } + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-background", + "mode": "basic" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": -20 + }, + { + "color": "orange", + "value": 0.5 + }, + { + "color": "red", + "value": 5 + } + ] + } } ] }, @@ -2017,6 +2126,55 @@ "value": "none" } ] + }, + { + "matcher": { + "id": "byName", + "options": "burst \u00d7" + }, + "properties": [ + { + "id": "decimals", + "value": 1 + }, + { + "id": "unit", + "value": "none" + }, + { + "id": "color", + "value": { + "mode": "thresholds" + } + }, + { + "id": "custom.cellOptions", + "value": { + "type": "color-background", + "mode": "basic" + } + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 2 + }, + { + "color": "red", + "value": 4 + } + ] + } + } + ] } ] }, -- 2.52.0