From cb275922729c0992644ee641838dde36c2cc791c Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Sun, 12 Apr 2026 18:14:54 -0300 Subject: [PATCH] monitoring(overview): reflow UPS/climate rows and add jenkins weather --- scripts/dashboards_render_atlas.py | 134 +++++++++--- .../monitoring/dashboards/atlas-overview.json | 196 ++++++++++++++---- .../grafana-dashboard-overview.yaml | 196 ++++++++++++++---- 3 files changed, 410 insertions(+), 116 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index e0ae6f18..bb2942a0 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -1302,13 +1302,39 @@ def build_overview(): }, } ] + jenkins_weather_mapping = [ + { + "type": "range", + "options": { + "from": 95, + "to": 101, + "result": {"text": "☀️ Sunny"}, + }, + }, + { + "type": "range", + "options": { + "from": 80, + "to": 95, + "result": {"text": "⛅ Cloudy"}, + }, + }, + { + "type": "range", + "options": { + "from": 0, + "to": 80, + "result": {"text": "⛈️ Storm"}, + }, + }, + ] panels.append( stat_panel( 40, "UPS Current Load", None, - {"h": 6, "w": 4, "x": 0, "y": 12}, + {"h": 5, "w": 6, "x": 0, "y": 7}, unit="none", decimals=1, text_mode="name_and_value", @@ -1355,15 +1381,15 @@ def build_overview(): 41, "UPS History (Power Draw)", None, - {"h": 6, "w": 4, "x": 4, "y": 12}, + {"h": 5, "w": 6, "x": 6, "y": 7}, unit="watt", targets=[ {"refId": "A", "expr": ANANKE_UPS_DRAW_WATTS_DB_SERIES, "legendFormat": ANANKE_UPS_DB_NAME}, {"refId": "B", "expr": ANANKE_UPS_DRAW_WATTS_TETHYS_SERIES, "legendFormat": ANANKE_UPS_TETHYS_NAME}, {"refId": "C", "expr": ANANKE_UPS_DRAW_WATTS_TOTAL_SERIES, "legendFormat": "combined"}, ], - legend_display="list", - legend_placement="bottom", + legend_display="table", + legend_placement="right", links=link_to("atlas-power"), ) ) @@ -1372,10 +1398,10 @@ def build_overview(): 42, "Current Climate", None, - {"h": 6, "w": 4, "x": 8, "y": 12}, + {"h": 6, "w": 6, "x": 0, "y": 12}, unit="none", decimals=2, - text_mode="value", + text_mode="name_and_value", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True}, {"refId": "B", "expr": CLIMATE_TEMP_FAHRENHEIT_MAX, "legendFormat": "Tent Temp (°F)", "instant": True}, @@ -1390,8 +1416,8 @@ def build_overview(): ], links=link_to("atlas-power"), description="Current tent temperature in C/F, humidity, and pressure proxy (VPD in kPa).", - orientation="vertical", - wide_layout=False, + orientation="horizontal", + wide_layout=True, ) ) panels.append( @@ -1399,7 +1425,7 @@ def build_overview(): 43, "Climate History", None, - {"h": 6, "w": 4, "x": 12, "y": 12}, + {"h": 6, "w": 6, "x": 6, "y": 12}, unit="celsius", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"}, @@ -1430,8 +1456,8 @@ def build_overview(): ], } ], - legend_display="list", - legend_placement="bottom", + legend_display="table", + legend_placement="right", links=link_to("atlas-power"), description="Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa).", ) @@ -1441,7 +1467,7 @@ def build_overview(): 140, "Fan Activity", None, - {"h": 6, "w": 4, "x": 16, "y": 12}, + {"h": 6, "w": 6, "x": 12, "y": 12}, unit="none", decimals=0, text_mode="name_and_value", @@ -1460,6 +1486,8 @@ def build_overview(): ], }, links=link_to("atlas-power"), + orientation="horizontal", + wide_layout=True, ) ) panels.append( @@ -1467,7 +1495,7 @@ def build_overview(): 141, "Fan History (0-10)", None, - {"h": 6, "w": 4, "x": 20, "y": 12}, + {"h": 6, "w": 6, "x": 18, "y": 12}, unit="none", max_value=10, targets=[ @@ -1476,8 +1504,8 @@ def build_overview(): {"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Outside Inlet"}, {"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior Fans"}, ], - legend_display="list", - legend_placement="bottom", + legend_display="table", + legend_placement="right", links=link_to("atlas-power"), ) ) @@ -1487,7 +1515,7 @@ def build_overview(): 44, "One-off Job Pods (age hours)", ONEOFF_JOB_POD_AGE_HOURS, - {"h": 5, "w": 6, "x": 0, "y": 7}, + {"h": 5, "w": 8, "x": 0, "y": 32}, unit="h", instant=True, legend="{{namespace}}/{{pod}}", @@ -1503,7 +1531,7 @@ def build_overview(): "type": "timeseries", "title": "Ariadne Attempts / Failures", "datasource": PROM_DS, - "gridPos": {"h": 5, "w": 6, "x": 6, "y": 7}, + "gridPos": {"h": 5, "w": 6, "x": 12, "y": 7}, "targets": [ {"expr": ARIADNE_TASK_ATTEMPTS_SERIES, "refId": "A", "legendFormat": "Attempts"}, {"expr": ARIADNE_TASK_FAILURES_SERIES, "refId": "B", "legendFormat": "Failures"}, @@ -1536,7 +1564,7 @@ def build_overview(): 46, "Platform Test Success Rate", None, - {"h": 5, "w": 6, "x": 12, "y": 7}, + {"h": 5, "w": 6, "x": 18, "y": 7}, unit="percent", targets=PLATFORM_TEST_SUCCESS_RATE_SUITE_TARGETS, legend_display="table", @@ -1565,7 +1593,7 @@ def build_overview(): 47, "PVC Backup Health / Age", PVC_BACKUP_AGE_HOURS_BY_PVC, - {"h": 5, "w": 6, "x": 18, "y": 7}, + {"h": 5, "w": 8, "x": 16, "y": 32}, unit="h", instant=True, legend="{{namespace}}/{{pvc}}", @@ -1585,6 +1613,52 @@ def build_overview(): panels[-1]["description"] = ( "Oldest successful backup age in hours by PVC. PVCs with missing or unhealthy backup state are forced to 999h so the red bars stay visible in the overview." ) + panels.append( + { + "id": 142, + "type": "stat", + "title": "Jenkins Build Weather (24h)", + "datasource": PROM_DS, + "gridPos": {"h": 5, "w": 8, "x": 8, "y": 32}, + "targets": [ + { + "expr": PLATFORM_TEST_SUCCESS_RATE_24H_BY_SUITE, + "refId": "A", + "legendFormat": "{{suite}}", + "instant": True, + } + ], + "fieldConfig": { + "defaults": { + "color": {"mode": "thresholds"}, + "mappings": jenkins_weather_mapping, + "thresholds": { + "mode": "absolute", + "steps": [ + {"color": "red", "value": None}, + {"color": "orange", "value": 80}, + {"color": "green", "value": 95}, + ], + }, + "unit": "percent", + "decimals": 1, + "custom": {"displayMode": "auto"}, + }, + "overrides": [], + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": {"calcs": ["lastNotNull"], "fields": "", "values": False}, + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": True, + }, + "links": link_to("atlas-jobs"), + "description": "24h build health by suite: sunny (>=95%), cloudy (80-95%), storm (<80%).", + } + ) panels.append( stat_panel( @@ -1734,7 +1808,7 @@ def build_overview(): 14, "Worker Node CPU", node_cpu_expr(worker_filter), - {"h": 12, "w": 12, "x": 0, "y": 39}, + {"h": 12, "w": 12, "x": 0, "y": 44}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1748,7 +1822,7 @@ def build_overview(): 15, "Worker Node RAM", node_mem_expr(worker_filter), - {"h": 12, "w": 12, "x": 12, "y": 39}, + {"h": 12, "w": 12, "x": 12, "y": 44}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1763,7 +1837,7 @@ def build_overview(): 16, "Control plane CPU", node_cpu_expr(CONTROL_ALL_REGEX), - {"h": 10, "w": 12, "x": 0, "y": 51}, + {"h": 10, "w": 12, "x": 0, "y": 56}, unit="percent", legend="{{node}}", legend_display="table", @@ -1775,7 +1849,7 @@ def build_overview(): 17, "Control plane RAM", node_mem_expr(CONTROL_ALL_REGEX), - {"h": 10, "w": 12, "x": 12, "y": 51}, + {"h": 10, "w": 12, "x": 12, "y": 56}, unit="percent", legend="{{node}}", legend_display="table", @@ -1788,7 +1862,7 @@ def build_overview(): 28, "Node Pod Share", '(sum(kube_pod_info{pod!="" , node!=""}) by (node) / clamp_min(sum(kube_pod_info{pod!="" , node!=""}), 1)) * 100', - {"h": 10, "w": 12, "x": 0, "y": 61}, + {"h": 10, "w": 12, "x": 0, "y": 66}, ) ) panels.append( @@ -1796,7 +1870,7 @@ def build_overview(): 29, "Top Nodes by Pod Count", 'topk(12, sum(kube_pod_info{pod!="" , node!=""}) by (node))', - {"h": 10, "w": 12, "x": 12, "y": 61}, + {"h": 10, "w": 12, "x": 12, "y": 66}, unit="none", limit=12, decimals=0, @@ -1818,7 +1892,7 @@ def build_overview(): 18, "Cluster Ingress Throughput", NET_INGRESS_EXPR, - {"h": 7, "w": 8, "x": 0, "y": 32}, + {"h": 7, "w": 8, "x": 0, "y": 37}, unit="Bps", legend="Ingress (Traefik)", legend_display="list", @@ -1831,7 +1905,7 @@ def build_overview(): 19, "Cluster Egress Throughput", NET_EGRESS_EXPR, - {"h": 7, "w": 8, "x": 8, "y": 32}, + {"h": 7, "w": 8, "x": 8, "y": 37}, unit="Bps", legend="Egress (Traefik)", legend_display="list", @@ -1844,7 +1918,7 @@ def build_overview(): 20, "Intra-Cluster Throughput", NET_INTERNAL_EXPR, - {"h": 7, "w": 8, "x": 16, "y": 32}, + {"h": 7, "w": 8, "x": 16, "y": 37}, unit="Bps", legend="Internal traffic", legend_display="list", @@ -1858,7 +1932,7 @@ def build_overview(): 21, "Root Filesystem Usage", root_usage_expr(), - {"h": 16, "w": 12, "x": 0, "y": 71}, + {"h": 16, "w": 12, "x": 0, "y": 76}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1873,7 +1947,7 @@ def build_overview(): 22, "Nodes Closest to Full Astraios Disks", astraios_usage_expr(), - {"h": 16, "w": 12, "x": 12, "y": 71}, + {"h": 16, "w": 12, "x": 12, "y": 76}, unit="percent", legend="{{node}}", legend_calcs=["last"], diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 7b860e4e..d3f5b966 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1079,10 +1079,10 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, + "h": 5, + "w": 6, "x": 0, - "y": 12 + "y": 7 }, "targets": [ { @@ -1301,10 +1301,10 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 12 + "h": 5, + "w": 6, + "x": 6, + "y": 7 }, "targets": [ { @@ -1331,8 +1331,8 @@ }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1356,8 +1356,8 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 8, + "w": 6, + "x": 0, "y": 12 }, "targets": [ @@ -1473,9 +1473,9 @@ "fields": "", "values": false }, - "textMode": "value", - "orientation": "vertical", - "wideLayout": false + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true }, "links": [ { @@ -1496,8 +1496,8 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 12, + "w": 6, + "x": 6, "y": 12 }, "targets": [ @@ -1579,8 +1579,8 @@ }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1605,8 +1605,8 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 16, + "w": 6, + "x": 12, "y": 12 }, "targets": [ @@ -1677,7 +1677,9 @@ "fields": "", "values": false }, - "textMode": "name_and_value" + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true }, "links": [ { @@ -1697,8 +1699,8 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 20, + "w": 6, + "x": 18, "y": 12 }, "targets": [ @@ -1732,8 +1734,8 @@ }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1757,9 +1759,9 @@ }, "gridPos": { "h": 5, - "w": 6, + "w": 8, "x": 0, - "y": 7 + "y": 32 }, "targets": [ { @@ -1846,7 +1848,7 @@ "gridPos": { "h": 5, "w": 6, - "x": 6, + "x": 12, "y": 7 }, "targets": [ @@ -1926,7 +1928,7 @@ "gridPos": { "h": 5, "w": 6, - "x": 12, + "x": 18, "y": 7 }, "targets": [ @@ -2035,9 +2037,9 @@ }, "gridPos": { "h": 5, - "w": 6, - "x": 18, - "y": 7 + "w": 8, + "x": 16, + "y": 32 }, "targets": [ { @@ -2107,6 +2109,114 @@ ], "description": "Oldest successful backup age in hours by PVC. PVCs with missing or unhealthy backup state are forced to 999h so the red bars stay visible in the overview." }, + { + "id": 142, + "type": "stat", + "title": "Jenkins Build Weather (24h)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 32 + }, + "targets": [ + { + "expr": "sort_desc((100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\",status=~\"ok|passed|success\"}[24h]))) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\"}[24h]))), 1)) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\"}[24h]))) > 0))", + "refId": "A", + "legendFormat": "{{suite}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "type": "range", + "options": { + "from": 95, + "to": 101, + "result": { + "text": "\u2600\ufe0f Sunny" + } + } + }, + { + "type": "range", + "options": { + "from": 80, + "to": 95, + "result": { + "text": "\u26c5 Cloudy" + } + } + }, + { + "type": "range", + "options": { + "from": 0, + "to": 80, + "result": { + "text": "\u26c8\ufe0f Storm" + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "green", + "value": 95 + } + ] + }, + "unit": "percent", + "decimals": 1, + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true + }, + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "24h build health by suite: sunny (>=95%), cloudy (80-95%), storm (<80%)." + }, { "id": 30, "type": "stat", @@ -2776,7 +2886,7 @@ "h": 12, "w": 12, "x": 0, - "y": 39 + "y": 44 }, "targets": [ { @@ -2823,7 +2933,7 @@ "h": 12, "w": 12, "x": 12, - "y": 39 + "y": 44 }, "targets": [ { @@ -2870,7 +2980,7 @@ "h": 10, "w": 12, "x": 0, - "y": 51 + "y": 56 }, "targets": [ { @@ -2907,7 +3017,7 @@ "h": 10, "w": 12, "x": 12, - "y": 51 + "y": 56 }, "targets": [ { @@ -2944,7 +3054,7 @@ "h": 10, "w": 12, "x": 0, - "y": 61 + "y": 66 }, "targets": [ { @@ -2995,7 +3105,7 @@ "h": 10, "w": 12, "x": 12, - "y": 61 + "y": 66 }, "targets": [ { @@ -3076,7 +3186,7 @@ "h": 7, "w": 8, "x": 0, - "y": 32 + "y": 37 }, "targets": [ { @@ -3120,7 +3230,7 @@ "h": 7, "w": 8, "x": 8, - "y": 32 + "y": 37 }, "targets": [ { @@ -3164,7 +3274,7 @@ "h": 7, "w": 8, "x": 16, - "y": 32 + "y": 37 }, "targets": [ { @@ -3208,7 +3318,7 @@ "h": 16, "w": 12, "x": 0, - "y": 71 + "y": 76 }, "targets": [ { @@ -3256,7 +3366,7 @@ "h": 16, "w": 12, "x": 12, - "y": 71 + "y": 76 }, "targets": [ { diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index d1e7264e..fdfcb0f5 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1088,10 +1088,10 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, + "h": 5, + "w": 6, "x": 0, - "y": 12 + "y": 7 }, "targets": [ { @@ -1310,10 +1310,10 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 4, - "y": 12 + "h": 5, + "w": 6, + "x": 6, + "y": 7 }, "targets": [ { @@ -1340,8 +1340,8 @@ data: }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1365,8 +1365,8 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 8, + "w": 6, + "x": 0, "y": 12 }, "targets": [ @@ -1482,9 +1482,9 @@ data: "fields": "", "values": false }, - "textMode": "value", - "orientation": "vertical", - "wideLayout": false + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true }, "links": [ { @@ -1505,8 +1505,8 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 12, + "w": 6, + "x": 6, "y": 12 }, "targets": [ @@ -1588,8 +1588,8 @@ data: }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1614,8 +1614,8 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 16, + "w": 6, + "x": 12, "y": 12 }, "targets": [ @@ -1686,7 +1686,9 @@ data: "fields": "", "values": false }, - "textMode": "name_and_value" + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true }, "links": [ { @@ -1706,8 +1708,8 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 20, + "w": 6, + "x": 18, "y": 12 }, "targets": [ @@ -1741,8 +1743,8 @@ data: }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1766,9 +1768,9 @@ data: }, "gridPos": { "h": 5, - "w": 6, + "w": 8, "x": 0, - "y": 7 + "y": 32 }, "targets": [ { @@ -1855,7 +1857,7 @@ data: "gridPos": { "h": 5, "w": 6, - "x": 6, + "x": 12, "y": 7 }, "targets": [ @@ -1935,7 +1937,7 @@ data: "gridPos": { "h": 5, "w": 6, - "x": 12, + "x": 18, "y": 7 }, "targets": [ @@ -2044,9 +2046,9 @@ data: }, "gridPos": { "h": 5, - "w": 6, - "x": 18, - "y": 7 + "w": 8, + "x": 16, + "y": 32 }, "targets": [ { @@ -2116,6 +2118,114 @@ data: ], "description": "Oldest successful backup age in hours by PVC. PVCs with missing or unhealthy backup state are forced to 999h so the red bars stay visible in the overview." }, + { + "id": 142, + "type": "stat", + "title": "Jenkins Build Weather (24h)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 32 + }, + "targets": [ + { + "expr": "sort_desc((100 * (sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\",status=~\"ok|passed|success\"}[24h]))) / clamp_min((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\"}[24h]))), 1)) and on(suite) ((sum by (suite) (increase(platform_quality_gate_runs_total{suite=~\"ariadne|metis|ananke|atlasbot|lesavka|pegasus|soteria|titan-iac|bstein-home|arcanagon|data-prepper\"}[24h]))) > 0))", + "refId": "A", + "legendFormat": "{{suite}}", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "type": "range", + "options": { + "from": 95, + "to": 101, + "result": { + "text": "\u2600\ufe0f Sunny" + } + } + }, + { + "type": "range", + "options": { + "from": 80, + "to": 95, + "result": { + "text": "\u26c5 Cloudy" + } + } + }, + { + "type": "range", + "options": { + "from": 0, + "to": 80, + "result": { + "text": "\u26c8\ufe0f Storm" + } + } + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "green", + "value": 95 + } + ] + }, + "unit": "percent", + "decimals": 1, + "custom": { + "displayMode": "auto" + } + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "orientation": "horizontal", + "wideLayout": true + }, + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "24h build health by suite: sunny (>=95%), cloudy (80-95%), storm (<80%)." + }, { "id": 30, "type": "stat", @@ -2785,7 +2895,7 @@ data: "h": 12, "w": 12, "x": 0, - "y": 39 + "y": 44 }, "targets": [ { @@ -2832,7 +2942,7 @@ data: "h": 12, "w": 12, "x": 12, - "y": 39 + "y": 44 }, "targets": [ { @@ -2879,7 +2989,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 51 + "y": 56 }, "targets": [ { @@ -2916,7 +3026,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 51 + "y": 56 }, "targets": [ { @@ -2953,7 +3063,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 61 + "y": 66 }, "targets": [ { @@ -3004,7 +3114,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 61 + "y": 66 }, "targets": [ { @@ -3085,7 +3195,7 @@ data: "h": 7, "w": 8, "x": 0, - "y": 32 + "y": 37 }, "targets": [ { @@ -3129,7 +3239,7 @@ data: "h": 7, "w": 8, "x": 8, - "y": 32 + "y": 37 }, "targets": [ { @@ -3173,7 +3283,7 @@ data: "h": 7, "w": 8, "x": 16, - "y": 32 + "y": 37 }, "targets": [ { @@ -3217,7 +3327,7 @@ data: "h": 16, "w": 12, "x": 0, - "y": 71 + "y": 76 }, "targets": [ { @@ -3265,7 +3375,7 @@ data: "h": 16, "w": 12, "x": 12, - "y": 71 + "y": 76 }, "targets": [ {