From c5acc3dc137741d861b4f68310e63f87dd2f008e Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 3 Apr 2026 22:16:02 -0300 Subject: [PATCH] monitoring(overview): replace power/climate summary row with six-panel layout --- scripts/dashboards_render_atlas.py | 218 +++-- .../monitoring/dashboards/atlas-overview.json | 780 ++++++++++++------ .../grafana-dashboard-overview.yaml | 780 ++++++++++++------ 3 files changed, 1214 insertions(+), 564 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index 4167d576..b1b3cb22 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -1252,84 +1252,162 @@ def build_overview(): ) ) + status_mapping = [ + { + "type": "value", + "options": { + "0": {"text": "⚡ Charging"}, + "1": {"text": "🔋 Discharging"}, + }, + } + ] + panels.append( stat_panel( 40, - "titan-db UPS Runtime", - HECATE_UPS_RUNTIME_DB, - {"h": 3, "w": 6, "x": 0, "y": 11}, - unit="s", - decimals=0, - instant=True, - thresholds={ - "mode": "absolute", - "steps": [ - {"color": "red", "value": None}, - {"color": "orange", "value": 600}, - {"color": "yellow", "value": 1200}, - {"color": "green", "value": 1800}, - ], - }, + "UPS Current Load", + None, + {"h": 5, "w": 8, "x": 0, "y": 11}, + unit="none", + decimals=1, + text_mode="name_and_value", + targets=[ + {"refId": "A", "expr": HECATE_UPS_DRAW_WATTS_DB, "legendFormat": "titan-db Draw (W)", "instant": True}, + {"refId": "B", "expr": HECATE_UPS_RUNTIME_DB, "legendFormat": "titan-db Discharge ETA", "instant": True}, + {"refId": "C", "expr": HECATE_UPS_ON_BATTERY_DB, "legendFormat": "titan-db Status", "instant": True}, + {"refId": "D", "expr": HECATE_UPS_DRAW_WATTS_TETHYS, "legendFormat": "tethys Draw (W)", "instant": True}, + {"refId": "E", "expr": HECATE_UPS_RUNTIME_TETHYS, "legendFormat": "tethys Discharge ETA", "instant": True}, + {"refId": "F", "expr": HECATE_UPS_ON_BATTERY_TETHYS, "legendFormat": "tethys Status", "instant": True}, + ], + field_overrides=[ + {"matcher": {"id": "byName", "options": "titan-db Draw (W)"}, "properties": [{"id": "unit", "value": "watt"}]}, + {"matcher": {"id": "byName", "options": "tethys Draw (W)"}, "properties": [{"id": "unit", "value": "watt"}]}, + {"matcher": {"id": "byName", "options": "titan-db Discharge ETA"}, "properties": [{"id": "unit", "value": "s"}]}, + {"matcher": {"id": "byName", "options": "tethys Discharge ETA"}, "properties": [{"id": "unit", "value": "s"}]}, + {"matcher": {"id": "byName", "options": "titan-db Status"}, "properties": [{"id": "mappings", "value": status_mapping}]}, + {"matcher": {"id": "byName", "options": "tethys Status"}, "properties": [{"id": "mappings", "value": status_mapping}]}, + ], links=link_to("atlas-power"), + description="Per-UPS live snapshot: current draw, discharge ETA, and charging/discharging status.", ) ) panels.append( - stat_panel( + timeseries_panel( 41, - "tethys UPS Runtime", - HECATE_UPS_RUNTIME_TETHYS, - {"h": 3, "w": 6, "x": 6, "y": 11}, - unit="s", - decimals=0, + "UPS History (Power Draw)", + None, + {"h": 5, "w": 8, "x": 8, "y": 11}, + unit="watt", + targets=[ + {"refId": "A", "expr": HECATE_UPS_DRAW_WATTS_DB_SERIES, "legendFormat": "titan-db"}, + {"refId": "B", "expr": HECATE_UPS_DRAW_WATTS_TETHYS_SERIES, "legendFormat": "tethys"}, + {"refId": "C", "expr": HECATE_UPS_DRAW_WATTS_TOTAL_SERIES, "legendFormat": "combined"}, + ], + legend_display="table", + legend_placement="right", links=link_to("atlas-power"), - thresholds={ - "mode": "absolute", - "steps": [ - {"color": "red", "value": None}, - {"color": "orange", "value": 600}, - {"color": "yellow", "value": 1200}, - {"color": "green", "value": 1800}, - ], - }, ) ) panels.append( stat_panel( 42, - "UPS Sources On Battery", - HECATE_UPS_ON_BATTERY, - {"h": 3, "w": 6, "x": 12, "y": 11}, + "Current Climate", + None, + {"h": 5, "w": 8, "x": 16, "y": 11}, unit="none", - instant=True, + decimals=2, + text_mode="name_and_value", + targets=[ + {"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True}, + {"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent Pressure (kPa)", "instant": True}, + ], + field_overrides=[ + {"matcher": {"id": "byName", "options": "Tent Temp (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]}, + {"matcher": {"id": "byName", "options": "Tent Pressure (kPa)"}, "properties": [{"id": "unit", "value": "none"}]}, + ], links=link_to("atlas-power"), + description="Current tent temperature and pressure.", + ) + ) + panels.append( + timeseries_panel( + 43, + "Climate History", + None, + {"h": 5, "w": 8, "x": 0, "y": 16}, + unit="celsius", + targets=[ + {"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"}, + {"refId": "B", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "Pressure (kPa)"}, + ], + field_overrides=[ + { + "matcher": {"id": "byName", "options": "Pressure (kPa)"}, + "properties": [ + {"id": "unit", "value": "none"}, + {"id": "custom.axisPlacement", "value": "right"}, + {"id": "custom.axisLabel", "value": "kPa"}, + {"id": "decimals", "value": 2}, + ], + } + ], + legend_display="table", + legend_placement="right", + links=link_to("atlas-power"), + ) + ) + panels.append( + stat_panel( + 140, + "Fan Activity", + None, + {"h": 5, "w": 8, "x": 8, "y": 16}, + unit="none", + decimals=1, + text_mode="name_and_value", + targets=[ + {"refId": "A", "expr": CLIMATE_FAN_OUTLET_CURRENT, "legendFormat": "Outlet", "instant": True}, + {"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_CURRENT, "legendFormat": "Inside Inlet", "instant": True}, + {"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_CURRENT, "legendFormat": "Outside Inlet", "instant": True}, + {"refId": "D", "expr": CLIMATE_FAN_INTERIOR_CURRENT, "legendFormat": "Interior", "instant": True}, + ], thresholds={ "mode": "absolute", "steps": [ {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "red", "value": 2}, + {"color": "yellow", "value": 7}, + {"color": "red", "value": 9}, ], }, + links=link_to("atlas-power"), ) ) - climate_panel = stat_panel( - 43, - "Current Tent Temperature", - CLIMATE_TEMP_MAX, - {"h": 3, "w": 6, "x": 18, "y": 11}, - unit="celsius", - decimals=1, - links=link_to("atlas-power"), + panels.append( + timeseries_panel( + 141, + "Fan History (0-10)", + None, + {"h": 5, "w": 8, "x": 16, "y": 16}, + unit="none", + max_value=10, + targets=[ + {"refId": "A", "expr": CLIMATE_FAN_OUTLET_SERIES, "legendFormat": "Outlet"}, + {"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_SERIES, "legendFormat": "Inside Inlet"}, + {"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Outside Inlet"}, + {"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior"}, + ], + legend_display="table", + legend_placement="right", + links=link_to("atlas-power"), + ) ) - climate_panel["description"] = "Future climate collector metric (will read 0/no data until instrumentation is live)." - panels.append(climate_panel) panels.append( stat_panel( 44, "One-off Job Pods >1h", f"sum(({ONEOFF_JOB_POD_AGE_HOURS}) > bool 1) or on() vector(0)", - {"h": 3, "w": 6, "x": 0, "y": 14}, + {"h": 3, "w": 6, "x": 0, "y": 21}, unit="none", instant=True, thresholds=count_thresholds, @@ -1341,7 +1419,7 @@ def build_overview(): 45, "Ariadne Attempts (24h)", "sum(increase(ariadne_task_runs_total[24h]))", - {"h": 3, "w": 6, "x": 6, "y": 14}, + {"h": 3, "w": 6, "x": 6, "y": 21}, unit="none", decimals=0, links=link_to("atlas-jobs"), @@ -1351,7 +1429,7 @@ def build_overview(): 46, "Platform Test Success Rate", TEST_SUCCESS_RATE, - {"h": 3, "w": 6, "x": 12, "y": 14}, + {"h": 3, "w": 6, "x": 12, "y": 21}, unit="percent", decimals=2, thresholds={ @@ -1374,7 +1452,7 @@ def build_overview(): 47, "Platform Test Failures (24h)", "sum(max_over_time(ariadne_ci_tests_total{repo=~\"ariadne|metis\",result=~\"failed|error\"}[24h]))", - {"h": 3, "w": 6, "x": 18, "y": 14}, + {"h": 3, "w": 6, "x": 18, "y": 21}, unit="none", decimals=0, instant=True, @@ -1391,7 +1469,7 @@ def build_overview(): 30, "Mail Sent (1d)", 'max(postmark_outbound_sent{window="1d"})', - {"h": 3, "w": 4, "x": 0, "y": 17}, + {"h": 3, "w": 4, "x": 0, "y": 24}, unit="none", links=link_to("atlas-mail"), ) @@ -1402,7 +1480,7 @@ def build_overview(): "type": "stat", "title": "Mail Bounces (1d)", "datasource": PROM_DS, - "gridPos": {"h": 3, "w": 4, "x": 8, "y": 17}, + "gridPos": {"h": 3, "w": 4, "x": 8, "y": 24}, "targets": [ { "expr": 'max(postmark_outbound_bounce_rate{window="1d"})', @@ -1448,7 +1526,7 @@ def build_overview(): 32, "Mail Success Rate (1d)", 'clamp_min(100 - max(postmark_outbound_bounce_rate{window="1d"}), 0)', - {"h": 3, "w": 4, "x": 4, "y": 17}, + {"h": 3, "w": 4, "x": 4, "y": 24}, unit="percent", thresholds=mail_success_thresholds, decimals=1, @@ -1460,7 +1538,7 @@ def build_overview(): 33, "Mail Limit Used (30d)", "max(postmark_sending_limit_used_percent)", - {"h": 3, "w": 4, "x": 12, "y": 17}, + {"h": 3, "w": 4, "x": 12, "y": 24}, unit="percent", thresholds=mail_limit_thresholds, decimals=1, @@ -1472,7 +1550,7 @@ def build_overview(): 34, "Postgres Connections Used", POSTGRES_CONN_USED, - {"h": 3, "w": 4, "x": 16, "y": 17}, + {"h": 3, "w": 4, "x": 16, "y": 24}, decimals=0, text_mode="name_and_value", legend="{{conn}}", @@ -1484,7 +1562,7 @@ def build_overview(): 35, "Postgres Hottest Connections", POSTGRES_CONN_HOTTEST, - {"h": 3, "w": 4, "x": 20, "y": 17}, + {"h": 3, "w": 4, "x": 20, "y": 24}, unit="none", decimals=0, text_mode="name_and_value", @@ -1502,7 +1580,7 @@ def build_overview(): 11, "Namespace CPU Share", namespace_cpu_share_expr(cpu_scope), - {"h": 9, "w": 8, "x": 0, "y": 20}, + {"h": 9, "w": 8, "x": 0, "y": 27}, links=namespace_scope_links("namespace_scope_cpu"), description="Shares are normalized within the selected filter. Switching scope changes the denominator.", ) @@ -1512,7 +1590,7 @@ def build_overview(): 12, "Namespace GPU Share", namespace_gpu_share_expr(gpu_scope), - {"h": 9, "w": 8, "x": 8, "y": 20}, + {"h": 9, "w": 8, "x": 8, "y": 27}, links=namespace_scope_links("namespace_scope_gpu"), description="Shares are normalized within the selected filter. Switching scope changes the denominator.", ) @@ -1522,7 +1600,7 @@ def build_overview(): 13, "Namespace RAM Share", namespace_ram_share_expr(ram_scope), - {"h": 9, "w": 8, "x": 16, "y": 20}, + {"h": 9, "w": 8, "x": 16, "y": 27}, links=namespace_scope_links("namespace_scope_ram"), description="Shares are normalized within the selected filter. Switching scope changes the denominator.", ) @@ -1534,7 +1612,7 @@ def build_overview(): 14, "Worker Node CPU", node_cpu_expr(worker_filter), - {"h": 12, "w": 12, "x": 0, "y": 36}, + {"h": 12, "w": 12, "x": 0, "y": 43}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1548,7 +1626,7 @@ def build_overview(): 15, "Worker Node RAM", node_mem_expr(worker_filter), - {"h": 12, "w": 12, "x": 12, "y": 36}, + {"h": 12, "w": 12, "x": 12, "y": 43}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1563,7 +1641,7 @@ def build_overview(): 16, "Control plane CPU", node_cpu_expr(CONTROL_ALL_REGEX), - {"h": 10, "w": 12, "x": 0, "y": 48}, + {"h": 10, "w": 12, "x": 0, "y": 55}, unit="percent", legend="{{node}}", legend_display="table", @@ -1575,7 +1653,7 @@ def build_overview(): 17, "Control plane RAM", node_mem_expr(CONTROL_ALL_REGEX), - {"h": 10, "w": 12, "x": 12, "y": 48}, + {"h": 10, "w": 12, "x": 12, "y": 55}, unit="percent", legend="{{node}}", legend_display="table", @@ -1588,7 +1666,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": 58}, + {"h": 10, "w": 12, "x": 0, "y": 65}, ) ) panels.append( @@ -1596,7 +1674,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": 58}, + {"h": 10, "w": 12, "x": 12, "y": 65}, unit="none", limit=12, decimals=0, @@ -1618,7 +1696,7 @@ def build_overview(): 18, "Cluster Ingress Throughput", NET_INGRESS_EXPR, - {"h": 7, "w": 8, "x": 0, "y": 29}, + {"h": 7, "w": 8, "x": 0, "y": 36}, unit="Bps", legend="Ingress (Traefik)", legend_display="list", @@ -1631,7 +1709,7 @@ def build_overview(): 19, "Cluster Egress Throughput", NET_EGRESS_EXPR, - {"h": 7, "w": 8, "x": 8, "y": 29}, + {"h": 7, "w": 8, "x": 8, "y": 36}, unit="Bps", legend="Egress (Traefik)", legend_display="list", @@ -1644,7 +1722,7 @@ def build_overview(): 20, "Intra-Cluster Throughput", NET_INTERNAL_EXPR, - {"h": 7, "w": 8, "x": 16, "y": 29}, + {"h": 7, "w": 8, "x": 16, "y": 36}, unit="Bps", legend="Internal traffic", legend_display="list", @@ -1658,7 +1736,7 @@ def build_overview(): 21, "Root Filesystem Usage", root_usage_expr(), - {"h": 16, "w": 12, "x": 0, "y": 68}, + {"h": 16, "w": 12, "x": 0, "y": 75}, unit="percent", legend="{{node}}", legend_calcs=["last"], @@ -1673,7 +1751,7 @@ def build_overview(): 22, "Nodes Closest to Full Root Disks", f"topk(12, {root_usage_expr()})", - {"h": 16, "w": 12, "x": 12, "y": 68}, + {"h": 16, "w": 12, "x": 12, "y": 75}, unit="percent", thresholds=PERCENT_THRESHOLDS, links=link_to("atlas-storage"), diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 16fa81f6..0fdc5fa3 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1073,246 +1073,53 @@ { "id": 40, "type": "stat", - "title": "titan-db UPS Runtime", + "title": "UPS Current Load", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 3, - "w": 6, + "h": 5, + "w": 8, "x": 0, "y": 11 }, "targets": [ { + "refId": "A", + "expr": "max((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-db\"}) / 100) or on() vector(0)", + "legendFormat": "titan-db Draw (W)", + "instant": true + }, + { + "refId": "B", "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", - "refId": "A", + "legendFormat": "titan-db Discharge ETA", "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "orange", - "value": 600 - }, - { - "color": "yellow", - "value": 1200 - }, - { - "color": "green", - "value": 1800 - } - ] - }, - "unit": "s", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + { + "refId": "C", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", + "legendFormat": "titan-db Status", + "instant": true }, - "textMode": "value" - }, - "links": [ { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 41, - "type": "stat", - "title": "tethys UPS Runtime", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 11 - }, - "targets": [ + "refId": "D", + "expr": "max((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-24\"}) / 100) or on() vector(0)", + "legendFormat": "tethys Draw (W)", + "instant": true + }, { + "refId": "E", "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "orange", - "value": 600 - }, - { - "color": "yellow", - "value": 1200 - }, - { - "color": "green", - "value": 1800 - } - ] - }, - "unit": "s", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - }, - "links": [ - { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 42, - "type": "stat", - "title": "UPS Sources On Battery", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 11 - }, - "targets": [ - { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", - "refId": "A", + "legendFormat": "tethys Discharge ETA", "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "red", - "value": 2 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - }, - "links": [ { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 43, - "type": "stat", - "title": "Current Tent Temperature", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 11 - }, - "targets": [ - { - "expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)", - "refId": "A" + "refId": "F", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", + "legendFormat": "tethys Status", + "instant": true } ], "fieldConfig": { @@ -1334,7 +1141,427 @@ } ] }, - "unit": "celsius", + "unit": "none", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "titan-db Draw (W)" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Draw (W)" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "titan-db Discharge ETA" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Discharge ETA" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "titan-db Status" + }, + "properties": [ + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "\u26a1 Charging" + }, + "1": { + "text": "\ud83d\udd0b Discharging" + } + } + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Status" + }, + "properties": [ + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "\u26a1 Charging" + }, + "1": { + "text": "\ud83d\udd0b Discharging" + } + } + } + ] + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ], + "description": "Per-UPS live snapshot: current draw, discharge ETA, and charging/discharging status." + }, + { + "id": 41, + "type": "timeseries", + "title": "UPS History (Power Draw)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 11 + }, + "targets": [ + { + "refId": "A", + "expr": "((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-db\"}) / 100)", + "legendFormat": "titan-db" + }, + { + "refId": "B", + "expr": "((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-24\"}) / 100)", + "legendFormat": "tethys" + }, + { + "refId": "C", + "expr": "sum((hecate_ups_load_percent{job=\"hecate-power\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\"}) / 100)", + "legendFormat": "combined" + } + ], + "fieldConfig": { + "defaults": { + "unit": "watt" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 42, + "type": "stat", + "title": "Current Climate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 11 + }, + "targets": [ + { + "refId": "A", + "expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0C)", + "instant": true + }, + { + "refId": "B", + "expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)", + "legendFormat": "Tent Pressure (kPa)", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + }, + "decimals": 2 + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Tent Temp (\u00b0C)" + }, + "properties": [ + { + "id": "unit", + "value": "celsius" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Tent Pressure (kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "none" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ], + "description": "Current tent temperature and pressure." + }, + { + "id": 43, + "type": "timeseries", + "title": "Climate History", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)", + "legendFormat": "Temperature (\u00b0C)" + }, + { + "refId": "B", + "expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)", + "legendFormat": "Pressure (kPa)" + } + ], + "fieldConfig": { + "defaults": { + "unit": "celsius" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pressure (kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "none" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "kPa" + }, + { + "id": "decimals", + "value": 2 + } + ] + } + ] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 140, + "type": "stat", + "title": "Fan Activity", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0)", + "legendFormat": "Outlet", + "instant": true + }, + { + "refId": "B", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0)", + "legendFormat": "Inside Inlet", + "instant": true + }, + { + "refId": "C", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0)", + "legendFormat": "Outside Inlet", + "instant": true + }, + { + "refId": "D", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0)", + "legendFormat": "Interior", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 7 + }, + { + "color": "red", + "value": 9 + } + ] + }, + "unit": "none", "custom": { "displayMode": "auto" }, @@ -1353,7 +1580,7 @@ "fields": "", "values": false }, - "textMode": "value" + "textMode": "name_and_value" }, "links": [ { @@ -1361,8 +1588,67 @@ "url": "/d/atlas-power", "targetBlank": true } + ] + }, + { + "id": 141, + "type": "timeseries", + "title": "Fan History (0-10)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})", + "legendFormat": "Outlet" + }, + { + "refId": "B", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})", + "legendFormat": "Inside Inlet" + }, + { + "refId": "C", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})", + "legendFormat": "Outside Inlet" + }, + { + "refId": "D", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})", + "legendFormat": "Interior" + } ], - "description": "Future climate collector metric (will read 0/no data until instrumentation is live)." + "fieldConfig": { + "defaults": { + "unit": "none", + "max": 10 + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] }, { "id": 44, @@ -1376,7 +1662,7 @@ "h": 3, "w": 6, "x": 0, - "y": 14 + "y": 21 }, "targets": [ { @@ -1452,7 +1738,7 @@ "h": 3, "w": 6, "x": 6, - "y": 14 + "y": 21 }, "targets": [ { @@ -1520,7 +1806,7 @@ "h": 3, "w": 6, "x": 12, - "y": 14 + "y": 21 }, "targets": [ { @@ -1597,7 +1883,7 @@ "h": 3, "w": 6, "x": 18, - "y": 14 + "y": 21 }, "targets": [ { @@ -1675,7 +1961,7 @@ "h": 3, "w": 4, "x": 0, - "y": 17 + "y": 24 }, "targets": [ { @@ -1742,7 +2028,7 @@ "h": 3, "w": 4, "x": 8, - "y": 17 + "y": 24 }, "targets": [ { @@ -1847,7 +2133,7 @@ "h": 3, "w": 4, "x": 4, - "y": 17 + "y": 24 }, "targets": [ { @@ -1923,7 +2209,7 @@ "h": 3, "w": 4, "x": 12, - "y": 17 + "y": 24 }, "targets": [ { @@ -1999,7 +2285,7 @@ "h": 3, "w": 4, "x": 16, - "y": 17 + "y": 24 }, "targets": [ { @@ -2062,7 +2348,7 @@ "h": 3, "w": 4, "x": 20, - "y": 17 + "y": 24 }, "targets": [ { @@ -2125,7 +2411,7 @@ "h": 9, "w": 8, "x": 0, - "y": 20 + "y": 27 }, "targets": [ { @@ -2194,7 +2480,7 @@ "h": 9, "w": 8, "x": 8, - "y": 20 + "y": 27 }, "targets": [ { @@ -2263,7 +2549,7 @@ "h": 9, "w": 8, "x": 16, - "y": 20 + "y": 27 }, "targets": [ { @@ -2332,7 +2618,7 @@ "h": 12, "w": 12, "x": 0, - "y": 36 + "y": 43 }, "targets": [ { @@ -2379,7 +2665,7 @@ "h": 12, "w": 12, "x": 12, - "y": 36 + "y": 43 }, "targets": [ { @@ -2426,7 +2712,7 @@ "h": 10, "w": 12, "x": 0, - "y": 48 + "y": 55 }, "targets": [ { @@ -2463,7 +2749,7 @@ "h": 10, "w": 12, "x": 12, - "y": 48 + "y": 55 }, "targets": [ { @@ -2500,7 +2786,7 @@ "h": 10, "w": 12, "x": 0, - "y": 58 + "y": 65 }, "targets": [ { @@ -2551,7 +2837,7 @@ "h": 10, "w": 12, "x": 12, - "y": 58 + "y": 65 }, "targets": [ { @@ -2632,7 +2918,7 @@ "h": 7, "w": 8, "x": 0, - "y": 29 + "y": 36 }, "targets": [ { @@ -2676,7 +2962,7 @@ "h": 7, "w": 8, "x": 8, - "y": 29 + "y": 36 }, "targets": [ { @@ -2720,7 +3006,7 @@ "h": 7, "w": 8, "x": 16, - "y": 29 + "y": 36 }, "targets": [ { @@ -2764,7 +3050,7 @@ "h": 16, "w": 12, "x": 0, - "y": 68 + "y": 75 }, "targets": [ { @@ -2812,7 +3098,7 @@ "h": 16, "w": 12, "x": 12, - "y": 68 + "y": 75 }, "targets": [ { diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index 7c8e0b2b..5609a6ee 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1082,246 +1082,53 @@ data: { "id": 40, "type": "stat", - "title": "titan-db UPS Runtime", + "title": "UPS Current Load", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 3, - "w": 6, + "h": 5, + "w": 8, "x": 0, "y": 11 }, "targets": [ { + "refId": "A", + "expr": "max((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-db\"}) / 100) or on() vector(0)", + "legendFormat": "titan-db Draw (W)", + "instant": true + }, + { + "refId": "B", "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", - "refId": "A", + "legendFormat": "titan-db Discharge ETA", "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "orange", - "value": 600 - }, - { - "color": "yellow", - "value": 1200 - }, - { - "color": "green", - "value": 1800 - } - ] - }, - "unit": "s", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + { + "refId": "C", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", + "legendFormat": "titan-db Status", + "instant": true }, - "textMode": "value" - }, - "links": [ { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 41, - "type": "stat", - "title": "tethys UPS Runtime", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 6, - "y": 11 - }, - "targets": [ + "refId": "D", + "expr": "max((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-24\"}) / 100) or on() vector(0)", + "legendFormat": "tethys Draw (W)", + "instant": true + }, { + "refId": "E", "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "orange", - "value": 600 - }, - { - "color": "yellow", - "value": 1200 - }, - { - "color": "green", - "value": 1800 - } - ] - }, - "unit": "s", - "custom": { - "displayMode": "auto" - }, - "decimals": 0 - }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - }, - "links": [ - { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 42, - "type": "stat", - "title": "UPS Sources On Battery", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 12, - "y": 11 - }, - "targets": [ - { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", - "refId": "A", + "legendFormat": "tethys Discharge ETA", "instant": true - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "red", - "value": 2 - } - ] - }, - "unit": "none", - "custom": { - "displayMode": "auto" - } }, - "overrides": [] - }, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value" - }, - "links": [ { - "title": "Open atlas-power dashboard", - "url": "/d/atlas-power", - "targetBlank": true - } - ] - }, - { - "id": 43, - "type": "stat", - "title": "Current Tent Temperature", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 3, - "w": 6, - "x": 18, - "y": 11 - }, - "targets": [ - { - "expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)", - "refId": "A" + "refId": "F", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", + "legendFormat": "tethys Status", + "instant": true } ], "fieldConfig": { @@ -1343,7 +1150,427 @@ data: } ] }, - "unit": "celsius", + "unit": "none", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "titan-db Draw (W)" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Draw (W)" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "titan-db Discharge ETA" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Discharge ETA" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "titan-db Status" + }, + "properties": [ + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "\u26a1 Charging" + }, + "1": { + "text": "\ud83d\udd0b Discharging" + } + } + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tethys Status" + }, + "properties": [ + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "\u26a1 Charging" + }, + "1": { + "text": "\ud83d\udd0b Discharging" + } + } + } + ] + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ], + "description": "Per-UPS live snapshot: current draw, discharge ETA, and charging/discharging status." + }, + { + "id": 41, + "type": "timeseries", + "title": "UPS History (Power Draw)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 11 + }, + "targets": [ + { + "refId": "A", + "expr": "((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-db\"}) / 100)", + "legendFormat": "titan-db" + }, + { + "refId": "B", + "expr": "((hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\",instance=\"titan-24\"}) / 100)", + "legendFormat": "tethys" + }, + { + "refId": "C", + "expr": "sum((hecate_ups_load_percent{job=\"hecate-power\"} * hecate_ups_power_nominal_watts{job=\"hecate-power\"}) / 100)", + "legendFormat": "combined" + } + ], + "fieldConfig": { + "defaults": { + "unit": "watt" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 42, + "type": "stat", + "title": "Current Climate", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 11 + }, + "targets": [ + { + "refId": "A", + "expr": "max(atlas_climate_tent_temperature_celsius) or max(atlas_climate_temperature_celsius) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0C)", + "instant": true + }, + { + "refId": "B", + "expr": "max(atlas_climate_tent_pressure_kpa) or max(atlas_climate_pressure_kpa) or on() vector(0)", + "legendFormat": "Tent Pressure (kPa)", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(115, 115, 115, 1)", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + }, + "unit": "none", + "custom": { + "displayMode": "auto" + }, + "decimals": 2 + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Tent Temp (\u00b0C)" + }, + "properties": [ + { + "id": "unit", + "value": "celsius" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Tent Pressure (kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "none" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value" + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ], + "description": "Current tent temperature and pressure." + }, + { + "id": 43, + "type": "timeseries", + "title": "Climate History", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "(atlas_climate_tent_temperature_celsius or atlas_climate_temperature_celsius)", + "legendFormat": "Temperature (\u00b0C)" + }, + { + "refId": "B", + "expr": "(atlas_climate_tent_pressure_kpa or atlas_climate_pressure_kpa)", + "legendFormat": "Pressure (kPa)" + } + ], + "fieldConfig": { + "defaults": { + "unit": "celsius" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pressure (kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "none" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "kPa" + }, + { + "id": "decimals", + "value": 2 + } + ] + } + ] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 140, + "type": "stat", + "title": "Fan Activity", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"outlet\"}) or max(atlas_climate_fan_activity_level{position=\"outlet\"}) or on() vector(0)", + "legendFormat": "Outlet", + "instant": true + }, + { + "refId": "B", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"inside_inlet\"}) or on() vector(0)", + "legendFormat": "Inside Inlet", + "instant": true + }, + { + "refId": "C", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"}) or max(atlas_climate_fan_activity_level{position=\"outside_inlet\"}) or on() vector(0)", + "legendFormat": "Outside Inlet", + "instant": true + }, + { + "refId": "D", + "expr": "max(atlas_climate_fan_activity_level{fan_group=\"interior\"}) or max(atlas_climate_fan_activity_level{position=\"interior\"}) or on() vector(0)", + "legendFormat": "Interior", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 7 + }, + { + "color": "red", + "value": 9 + } + ] + }, + "unit": "none", "custom": { "displayMode": "auto" }, @@ -1362,7 +1589,7 @@ data: "fields": "", "values": false }, - "textMode": "value" + "textMode": "name_and_value" }, "links": [ { @@ -1370,8 +1597,67 @@ data: "url": "/d/atlas-power", "targetBlank": true } + ] + }, + { + "id": 141, + "type": "timeseries", + "title": "Fan History (0-10)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 16 + }, + "targets": [ + { + "refId": "A", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"outlet\"} or atlas_climate_fan_activity_level{position=\"outlet\"})", + "legendFormat": "Outlet" + }, + { + "refId": "B", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"inside_inlet\"} or atlas_climate_fan_activity_level{position=\"inside_inlet\"})", + "legendFormat": "Inside Inlet" + }, + { + "refId": "C", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"outside_inlet\"} or atlas_climate_fan_activity_level{position=\"outside_inlet\"})", + "legendFormat": "Outside Inlet" + }, + { + "refId": "D", + "expr": "(atlas_climate_fan_activity_level{fan_group=\"interior\"} or atlas_climate_fan_activity_level{position=\"interior\"})", + "legendFormat": "Interior" + } ], - "description": "Future climate collector metric (will read 0/no data until instrumentation is live)." + "fieldConfig": { + "defaults": { + "unit": "none", + "max": 10 + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] }, { "id": 44, @@ -1385,7 +1671,7 @@ data: "h": 3, "w": 6, "x": 0, - "y": 14 + "y": 21 }, "targets": [ { @@ -1461,7 +1747,7 @@ data: "h": 3, "w": 6, "x": 6, - "y": 14 + "y": 21 }, "targets": [ { @@ -1529,7 +1815,7 @@ data: "h": 3, "w": 6, "x": 12, - "y": 14 + "y": 21 }, "targets": [ { @@ -1606,7 +1892,7 @@ data: "h": 3, "w": 6, "x": 18, - "y": 14 + "y": 21 }, "targets": [ { @@ -1684,7 +1970,7 @@ data: "h": 3, "w": 4, "x": 0, - "y": 17 + "y": 24 }, "targets": [ { @@ -1751,7 +2037,7 @@ data: "h": 3, "w": 4, "x": 8, - "y": 17 + "y": 24 }, "targets": [ { @@ -1856,7 +2142,7 @@ data: "h": 3, "w": 4, "x": 4, - "y": 17 + "y": 24 }, "targets": [ { @@ -1932,7 +2218,7 @@ data: "h": 3, "w": 4, "x": 12, - "y": 17 + "y": 24 }, "targets": [ { @@ -2008,7 +2294,7 @@ data: "h": 3, "w": 4, "x": 16, - "y": 17 + "y": 24 }, "targets": [ { @@ -2071,7 +2357,7 @@ data: "h": 3, "w": 4, "x": 20, - "y": 17 + "y": 24 }, "targets": [ { @@ -2134,7 +2420,7 @@ data: "h": 9, "w": 8, "x": 0, - "y": 20 + "y": 27 }, "targets": [ { @@ -2203,7 +2489,7 @@ data: "h": 9, "w": 8, "x": 8, - "y": 20 + "y": 27 }, "targets": [ { @@ -2272,7 +2558,7 @@ data: "h": 9, "w": 8, "x": 16, - "y": 20 + "y": 27 }, "targets": [ { @@ -2341,7 +2627,7 @@ data: "h": 12, "w": 12, "x": 0, - "y": 36 + "y": 43 }, "targets": [ { @@ -2388,7 +2674,7 @@ data: "h": 12, "w": 12, "x": 12, - "y": 36 + "y": 43 }, "targets": [ { @@ -2435,7 +2721,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 48 + "y": 55 }, "targets": [ { @@ -2472,7 +2758,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 48 + "y": 55 }, "targets": [ { @@ -2509,7 +2795,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 58 + "y": 65 }, "targets": [ { @@ -2560,7 +2846,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 58 + "y": 65 }, "targets": [ { @@ -2641,7 +2927,7 @@ data: "h": 7, "w": 8, "x": 0, - "y": 29 + "y": 36 }, "targets": [ { @@ -2685,7 +2971,7 @@ data: "h": 7, "w": 8, "x": 8, - "y": 29 + "y": 36 }, "targets": [ { @@ -2729,7 +3015,7 @@ data: "h": 7, "w": 8, "x": 16, - "y": 29 + "y": 36 }, "targets": [ { @@ -2773,7 +3059,7 @@ data: "h": 16, "w": 12, "x": 0, - "y": 68 + "y": 75 }, "targets": [ { @@ -2821,7 +3107,7 @@ data: "h": 16, "w": 12, "x": 12, - "y": 68 + "y": 75 }, "targets": [ {