From fd71c6644bd0be563abfc6351f6dde44d63aa6c7 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 3 Apr 2026 17:49:09 -0300 Subject: [PATCH] monitoring(power): wire generated power dashboard and split per-UPS panels --- scripts/dashboards_render_atlas.py | 256 +++++--- .../monitoring/dashboards/atlas-overview.json | 61 +- .../monitoring/dashboards/atlas-power.json | 547 +++++++++++++----- .../grafana-dashboard-overview.yaml | 61 +- .../monitoring/grafana-dashboard-power.yaml | 547 +++++++++++++----- services/monitoring/helmrelease.yaml | 9 + 6 files changed, 1034 insertions(+), 447 deletions(-) diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index fc38bc3f..bff5c523 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -440,9 +440,39 @@ HECATE_UPS_RUNTIME_HEADROOM_PERCENT = ( f"clamp_min(max(hecate_ups_threshold_seconds{{{HECATE_SELECTOR}}}), 1)" ) HECATE_UPS_TRIGGER_COUNT_1D = f"increase(hecate_shutdown_triggers_total{{{HECATE_SELECTOR}}}[1d]) or on() vector(0)" +HECATE_UPS_RUNTIME_DB = ( + f'max(hecate_ups_runtime_seconds{{{HECATE_SELECTOR},instance="titan-db"}}) or on() vector(0)' +) +HECATE_UPS_RUNTIME_TETHYS = ( + f'max(hecate_ups_runtime_seconds{{{HECATE_SELECTOR},instance="titan-24"}}) or on() vector(0)' +) +HECATE_UPS_ON_BATTERY_DB = ( + f'max(hecate_ups_on_battery{{{HECATE_SELECTOR},instance="titan-db"}}) or on() vector(0)' +) +HECATE_UPS_ON_BATTERY_TETHYS = ( + f'max(hecate_ups_on_battery{{{HECATE_SELECTOR},instance="titan-24"}}) or on() vector(0)' +) +HECATE_UPS_BATTERY_CHARGE_DB = ( + f'max(hecate_ups_battery_charge_percent{{{HECATE_SELECTOR},instance="titan-db"}}) or on() vector(0)' +) +HECATE_UPS_BATTERY_CHARGE_TETHYS = ( + f'max(hecate_ups_battery_charge_percent{{{HECATE_SELECTOR},instance="titan-24"}}) or on() vector(0)' +) +HECATE_UPS_LOAD_DB = ( + f'max(hecate_ups_load_percent{{{HECATE_SELECTOR},instance="titan-db"}}) or on() vector(0)' +) +HECATE_UPS_LOAD_TETHYS = ( + f'max(hecate_ups_load_percent{{{HECATE_SELECTOR},instance="titan-24"}}) or on() vector(0)' +) +HECATE_UPS_RUNTIME_BY_SOURCE = f"hecate_ups_runtime_seconds{{{HECATE_SELECTOR}}}" +HECATE_UPS_LOAD_BY_SOURCE = f"hecate_ups_load_percent{{{HECATE_SELECTOR}}}" +HECATE_UPS_CHARGE_BY_SOURCE = f"hecate_ups_battery_charge_percent{{{HECATE_SELECTOR}}}" +HECATE_UPS_TRIGGER_BY_SOURCE = f"hecate_ups_trigger_active{{{HECATE_SELECTOR}}}" CLIMATE_SENSOR_COUNT = "count(atlas_climate_temperature_celsius) or on() vector(0)" CLIMATE_TEMP_MAX = "max(atlas_climate_temperature_celsius) or on() vector(0)" CLIMATE_HUMIDITY_MAX = "max(atlas_climate_humidity_percent) or on() vector(0)" +CLIMATE_TEMP_SERIES = "atlas_climate_temperature_celsius" +CLIMATE_FAN_SERIES = "atlas_climate_fan_rpm" POSTGRES_CONN_USED = ( 'label_replace(sum(pg_stat_activity_count), "conn", "used", "__name__", ".*") ' 'or label_replace(max(pg_settings_max_connections), "conn", "max", "__name__", ".*")' @@ -1151,17 +1181,19 @@ def build_overview(): panels.append( stat_panel( 40, - "UPS Sources On Battery", - HECATE_UPS_ON_BATTERY, + "titan-db UPS Runtime", + HECATE_UPS_RUNTIME_DB, {"h": 3, "w": 6, "x": 0, "y": 11}, - unit="none", + unit="s", + decimals=0, instant=True, thresholds={ "mode": "absolute", "steps": [ - {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "red", "value": 2}, + {"color": "red", "value": None}, + {"color": "orange", "value": 600}, + {"color": "yellow", "value": 1200}, + {"color": "green", "value": 1800}, ], }, links=link_to("atlas-power"), @@ -1170,8 +1202,8 @@ def build_overview(): panels.append( stat_panel( 41, - "Lowest UPS Runtime", - HECATE_UPS_RUNTIME_MIN, + "tethys UPS Runtime", + HECATE_UPS_RUNTIME_TETHYS, {"h": 3, "w": 6, "x": 6, "y": 11}, unit="s", decimals=0, @@ -1190,33 +1222,32 @@ def build_overview(): panels.append( stat_panel( 42, - "UPS Runtime Headroom", - HECATE_UPS_RUNTIME_HEADROOM_PERCENT, + "UPS Sources On Battery", + HECATE_UPS_ON_BATTERY, {"h": 3, "w": 6, "x": 12, "y": 11}, - unit="percent", - decimals=1, + unit="none", + instant=True, links=link_to("atlas-power"), thresholds={ "mode": "absolute", "steps": [ - {"color": "red", "value": None}, - {"color": "orange", "value": 100}, - {"color": "yellow", "value": 110}, - {"color": "green", "value": 140}, + {"color": "green", "value": None}, + {"color": "yellow", "value": 1}, + {"color": "red", "value": 2}, ], }, ) ) climate_panel = stat_panel( 43, - "Climate Sensors Reporting", - CLIMATE_SENSOR_COUNT, + "Current Tent Temperature", + CLIMATE_TEMP_MAX, {"h": 3, "w": 6, "x": 18, "y": 11}, - unit="none", - decimals=0, + unit="celsius", + decimals=1, links=link_to("atlas-power"), ) - climate_panel["description"] = "Climate metrics are reserved for future tent monitoring instrumentation." + climate_panel["description"] = "Future climate collector metric (will read 0/no data until instrumentation is live)." panels.append(climate_panel) panels.append( @@ -2746,12 +2777,11 @@ def build_jobs_dashboard(): def build_power_dashboard(): panels = [] - power_count_thresholds = { + on_battery_thresholds = { "mode": "absolute", "steps": [ {"color": "green", "value": None}, - {"color": "yellow", "value": 1}, - {"color": "red", "value": 2}, + {"color": "red", "value": 1}, ], } runtime_thresholds = { @@ -2763,43 +2793,52 @@ def build_power_dashboard(): {"color": "green", "value": 1800}, ], } - headroom_thresholds = { + charge_thresholds = { "mode": "absolute", "steps": [ {"color": "red", "value": None}, - {"color": "orange", "value": 100}, - {"color": "yellow", "value": 110}, - {"color": "green", "value": 140}, + {"color": "orange", "value": 25}, + {"color": "yellow", "value": 45}, + {"color": "green", "value": 65}, + ], + } + load_thresholds = { + "mode": "absolute", + "steps": [ + {"color": "green", "value": None}, + {"color": "yellow", "value": 55}, + {"color": "orange", "value": 75}, + {"color": "red", "value": 90}, ], } panels.append( stat_panel( 1, - "UPS Sources On Battery", - HECATE_UPS_ON_BATTERY, + "titan-db UPS Status (On Battery)", + HECATE_UPS_ON_BATTERY_DB, {"h": 4, "w": 6, "x": 0, "y": 0}, unit="none", instant=True, - thresholds=power_count_thresholds, + thresholds=on_battery_thresholds, ) ) panels.append( stat_panel( 2, - "UPS Sources Low Battery", - HECATE_UPS_LOW_BATTERY, + "tethys UPS Status (On Battery)", + HECATE_UPS_ON_BATTERY_TETHYS, {"h": 4, "w": 6, "x": 6, "y": 0}, unit="none", instant=True, - thresholds=power_count_thresholds, + thresholds=on_battery_thresholds, ) ) panels.append( stat_panel( 3, - "Lowest Runtime Remaining", - HECATE_UPS_RUNTIME_MIN, + "titan-db Runtime Remaining", + HECATE_UPS_RUNTIME_DB, {"h": 4, "w": 6, "x": 12, "y": 0}, unit="s", decimals=0, @@ -2810,21 +2849,69 @@ def build_power_dashboard(): panels.append( stat_panel( 4, - "Runtime Headroom", - HECATE_UPS_RUNTIME_HEADROOM_PERCENT, + "tethys Runtime Remaining", + HECATE_UPS_RUNTIME_TETHYS, {"h": 4, "w": 6, "x": 18, "y": 0}, + unit="s", + decimals=0, + instant=True, + thresholds=runtime_thresholds, + ) + ) + panels.append( + stat_panel( + 5, + "titan-db Battery Charge", + HECATE_UPS_BATTERY_CHARGE_DB, + {"h": 4, "w": 6, "x": 0, "y": 4}, unit="percent", decimals=1, instant=True, - thresholds=headroom_thresholds, + thresholds=charge_thresholds, + ) + ) + panels.append( + stat_panel( + 6, + "tethys Battery Charge", + HECATE_UPS_BATTERY_CHARGE_TETHYS, + {"h": 4, "w": 6, "x": 6, "y": 4}, + unit="percent", + decimals=1, + instant=True, + thresholds=charge_thresholds, + ) + ) + panels.append( + stat_panel( + 7, + "titan-db UPS Load", + HECATE_UPS_LOAD_DB, + {"h": 4, "w": 6, "x": 12, "y": 4}, + unit="percent", + decimals=1, + instant=True, + thresholds=load_thresholds, + ) + ) + panels.append( + stat_panel( + 8, + "tethys UPS Load", + HECATE_UPS_LOAD_TETHYS, + {"h": 4, "w": 6, "x": 18, "y": 4}, + unit="percent", + decimals=1, + instant=True, + thresholds=load_thresholds, ) ) panels.append( timeseries_panel( - 5, + 9, "UPS Runtime by Source", - "hecate_ups_runtime_seconds", - {"h": 8, "w": 12, "x": 0, "y": 4}, + HECATE_UPS_RUNTIME_BY_SOURCE, + {"h": 8, "w": 12, "x": 0, "y": 8}, unit="s", legend="{{instance}}/{{source}}", legend_display="table", @@ -2833,49 +2920,68 @@ def build_power_dashboard(): ) panels.append( timeseries_panel( - 6, + 10, + "UPS Load % by Source", + HECATE_UPS_LOAD_BY_SOURCE, + {"h": 8, "w": 12, "x": 12, "y": 8}, + unit="percent", + legend="{{instance}}/{{source}}", + legend_display="table", + legend_placement="right", + ) + ) + panels.append( + timeseries_panel( + 11, + "UPS Battery Charge % by Source", + HECATE_UPS_CHARGE_BY_SOURCE, + {"h": 8, "w": 12, "x": 0, "y": 16}, + unit="percent", + legend="{{instance}}/{{source}}", + legend_display="table", + legend_placement="right", + ) + ) + panels.append( + timeseries_panel( + 12, "UPS Trigger Activity by Source", - "hecate_ups_trigger_active", - {"h": 8, "w": 12, "x": 12, "y": 4}, + HECATE_UPS_TRIGGER_BY_SOURCE, + {"h": 8, "w": 12, "x": 12, "y": 16}, unit="none", legend="{{instance}}/{{source}}", legend_display="table", legend_placement="right", ) ) - climate_panel = stat_panel( - 7, - "Climate Sensors Reporting", - CLIMATE_SENSOR_COUNT, - {"h": 4, "w": 8, "x": 0, "y": 12}, - unit="none", - decimals=0, - instant=True, + climate_temp_panel = timeseries_panel( + 13, + "Climate Temperature Over Time", + CLIMATE_TEMP_SERIES, + {"h": 8, "w": 12, "x": 0, "y": 24}, + unit="celsius", + legend="{{sensor}}", + legend_display="table", + legend_placement="right", ) - climate_panel["description"] = "Reserved for tent climate telemetry wiring." - panels.append(climate_panel) - panels.append( - stat_panel( - 8, - "Max Tent Temperature", - CLIMATE_TEMP_MAX, - {"h": 4, "w": 8, "x": 8, "y": 12}, - unit="celsius", - decimals=1, - instant=True, - ) + climate_temp_panel["description"] = ( + "Future climate collector panel: temperature probes (inside inlet, outside inlet, outlet, interior)." ) - panels.append( - stat_panel( - 9, - "Max Tent Humidity", - CLIMATE_HUMIDITY_MAX, - {"h": 4, "w": 8, "x": 16, "y": 12}, - unit="percent", - decimals=1, - instant=True, - ) + panels.append(climate_temp_panel) + climate_fan_panel = timeseries_panel( + 14, + "Climate Fan Speed Over Time", + CLIMATE_FAN_SERIES, + {"h": 8, "w": 12, "x": 12, "y": 24}, + unit="rpm", + legend="{{position}}", + legend_display="table", + legend_placement="right", ) + climate_fan_panel["description"] = ( + "Future climate collector panel: fan RPM by position (inside inlet, outside inlet, outlet, interior)." + ) + panels.append(climate_fan_panel) return { "uid": "atlas-power", diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index c6f98664..2960bff4 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1073,7 +1073,7 @@ { "id": 40, "type": "stat", - "title": "UPS Sources On Battery", + "title": "titan-db UPS Runtime", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1086,7 +1086,7 @@ }, "targets": [ { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -1101,23 +1101,28 @@ "mode": "absolute", "steps": [ { - "color": "green", + "color": "red", "value": null }, { - "color": "yellow", - "value": 1 + "color": "orange", + "value": 600 }, { - "color": "red", - "value": 2 + "color": "yellow", + "value": 1200 + }, + { + "color": "green", + "value": 1800 } ] }, - "unit": "none", + "unit": "s", "custom": { "displayMode": "auto" - } + }, + "decimals": 0 }, "overrides": [] }, @@ -1145,7 +1150,7 @@ { "id": 41, "type": "stat", - "title": "Lowest UPS Runtime", + "title": "tethys UPS Runtime", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1158,7 +1163,7 @@ }, "targets": [ { - "expr": "min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A" } ], @@ -1221,7 +1226,7 @@ { "id": 42, "type": "stat", - "title": "UPS Runtime Headroom", + "title": "UPS Sources On Battery", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1234,8 +1239,9 @@ }, "targets": [ { - "expr": "100 * min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) / clamp_min(max(hecate_ups_threshold_seconds{job=\"hecate-power\"}), 1)", - "refId": "A" + "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "refId": "A", + "instant": true } ], "fieldConfig": { @@ -1248,28 +1254,23 @@ "mode": "absolute", "steps": [ { - "color": "red", + "color": "green", "value": null }, - { - "color": "orange", - "value": 100 - }, { "color": "yellow", - "value": 110 + "value": 1 }, { - "color": "green", - "value": 140 + "color": "red", + "value": 2 } ] }, - "unit": "percent", + "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 1 + } }, "overrides": [] }, @@ -1297,7 +1298,7 @@ { "id": 43, "type": "stat", - "title": "Climate Sensors Reporting", + "title": "Current Tent Temperature", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1310,7 +1311,7 @@ }, "targets": [ { - "expr": "count(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(atlas_climate_temperature_celsius) or on() vector(0)", "refId": "A" } ], @@ -1333,11 +1334,11 @@ } ] }, - "unit": "none", + "unit": "celsius", "custom": { "displayMode": "auto" }, - "decimals": 0 + "decimals": 1 }, "overrides": [] }, @@ -1361,7 +1362,7 @@ "targetBlank": true } ], - "description": "Climate metrics are reserved for future tent monitoring instrumentation." + "description": "Future climate collector metric (will read 0/no data until instrumentation is live)." }, { "id": 44, diff --git a/services/monitoring/dashboards/atlas-power.json b/services/monitoring/dashboards/atlas-power.json index ef47c3f2..09ac2e43 100644 --- a/services/monitoring/dashboards/atlas-power.json +++ b/services/monitoring/dashboards/atlas-power.json @@ -7,7 +7,7 @@ { "id": 1, "type": "stat", - "title": "UPS Sources On Battery", + "title": "titan-db UPS Status (On Battery)", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -20,7 +20,7 @@ }, "targets": [ { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -38,13 +38,9 @@ "color": "green", "value": null }, - { - "color": "yellow", - "value": 1 - }, { "color": "red", - "value": 2 + "value": 1 } ] }, @@ -72,7 +68,7 @@ { "id": 2, "type": "stat", - "title": "UPS Sources Low Battery", + "title": "tethys UPS Status (On Battery)", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -85,7 +81,7 @@ }, "targets": [ { - "expr": "sum(hecate_ups_low_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -103,13 +99,9 @@ "color": "green", "value": null }, - { - "color": "yellow", - "value": 1 - }, { "color": "red", - "value": 2 + "value": 1 } ] }, @@ -137,7 +129,7 @@ { "id": 3, "type": "stat", - "title": "Lowest Runtime Remaining", + "title": "titan-db Runtime Remaining", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -150,7 +142,7 @@ }, "targets": [ { - "expr": "min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -207,7 +199,7 @@ { "id": 4, "type": "stat", - "title": "Runtime Headroom", + "title": "tethys Runtime Remaining", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -220,7 +212,7 @@ }, "targets": [ { - "expr": "100 * min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) / clamp_min(max(hecate_ups_threshold_seconds{job=\"hecate-power\"}), 1)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -240,15 +232,85 @@ }, { "color": "orange", - "value": 100 + "value": 600 }, { "color": "yellow", - "value": 110 + "value": 1200 }, { "color": "green", - "value": 140 + "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" + } + }, + { + "id": 5, + "type": "stat", + "title": "titan-db Battery Charge", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 4 + }, + "targets": [ + { + "expr": "max(hecate_ups_battery_charge_percent{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 25 + }, + { + "color": "yellow", + "value": 45 + }, + { + "color": "green", + "value": 65 } ] }, @@ -274,97 +336,23 @@ "textMode": "value" } }, - { - "id": 5, - "type": "timeseries", - "title": "UPS Runtime by Source", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 4 - }, - "targets": [ - { - "expr": "hecate_ups_runtime_seconds", - "refId": "A", - "legendFormat": "{{instance}}/{{source}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "s" - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "right" - }, - "tooltip": { - "mode": "multi" - } - } - }, { "id": 6, - "type": "timeseries", - "title": "UPS Trigger Activity by Source", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 4 - }, - "targets": [ - { - "expr": "hecate_ups_trigger_active", - "refId": "A", - "legendFormat": "{{instance}}/{{source}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none" - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "right" - }, - "tooltip": { - "mode": "multi" - } - } - }, - { - "id": 7, "type": "stat", - "title": "Climate Sensors Reporting", + "title": "tethys Battery Charge", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 8, - "x": 0, - "y": 12 + "w": 6, + "x": 6, + "y": 4 }, "targets": [ { - "expr": "count(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(hecate_ups_battery_charge_percent{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -379,20 +367,28 @@ "mode": "absolute", "steps": [ { - "color": "rgba(115, 115, 115, 1)", + "color": "red", "value": null }, + { + "color": "orange", + "value": 25 + }, + { + "color": "yellow", + "value": 45 + }, { "color": "green", - "value": 1 + "value": 65 } ] }, - "unit": "none", + "unit": "percent", "custom": { "displayMode": "auto" }, - "decimals": 0 + "decimals": 1 }, "overrides": [] }, @@ -408,26 +404,25 @@ "values": false }, "textMode": "value" - }, - "description": "Reserved for tent climate telemetry wiring." + } }, { - "id": 8, + "id": 7, "type": "stat", - "title": "Max Tent Temperature", + "title": "titan-db UPS Load", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 8, - "x": 8, - "y": 12 + "w": 6, + "x": 12, + "y": 4 }, "targets": [ { - "expr": "max(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -442,16 +437,94 @@ "mode": "absolute", "steps": [ { - "color": "rgba(115, 115, 115, 1)", + "color": "green", "value": null }, { - "color": "green", - "value": 1 + "color": "yellow", + "value": 55 + }, + { + "color": "orange", + "value": 75 + }, + { + "color": "red", + "value": 90 } ] }, - "unit": "celsius", + "unit": "percent", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 8, + "type": "stat", + "title": "tethys UPS Load", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 4 + }, + "targets": [ + { + "expr": "max(hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 55 + }, + { + "color": "orange", + "value": 75 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent", "custom": { "displayMode": "auto" }, @@ -475,65 +548,227 @@ }, { "id": 9, - "type": "stat", - "title": "Max Tent Humidity", + "type": "timeseries", + "title": "UPS Runtime by Source", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 4, - "w": 8, - "x": 16, - "y": 12 + "h": 8, + "w": 12, + "x": 0, + "y": 8 }, "targets": [ { - "expr": "max(atlas_climate_humidity_percent) or on() vector(0)", + "expr": "hecate_ups_runtime_seconds{job=\"hecate-power\"}", "refId": "A", - "instant": true + "legendFormat": "{{instance}}/{{source}}" } ], "fieldConfig": { "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgba(115, 115, 115, 1)", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 + "unit": "s" }, "overrides": [] }, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "displayMode": "table", + "placement": "right" }, - "textMode": "value" + "tooltip": { + "mode": "multi" + } } + }, + { + "id": 10, + "type": "timeseries", + "title": "UPS Load % by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "targets": [ + { + "expr": "hecate_ups_load_percent{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 11, + "type": "timeseries", + "title": "UPS Battery Charge % by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "targets": [ + { + "expr": "hecate_ups_battery_charge_percent{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 12, + "type": "timeseries", + "title": "UPS Trigger Activity by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 16 + }, + "targets": [ + { + "expr": "hecate_ups_trigger_active{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 13, + "type": "timeseries", + "title": "Climate Temperature Over Time", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 24 + }, + "targets": [ + { + "expr": "atlas_climate_temperature_celsius", + "refId": "A", + "legendFormat": "{{sensor}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "celsius" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "description": "Future climate collector panel: temperature probes (inside inlet, outside inlet, outlet, interior)." + }, + { + "id": 14, + "type": "timeseries", + "title": "Climate Fan Speed Over Time", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 24 + }, + "targets": [ + { + "expr": "atlas_climate_fan_rpm", + "refId": "A", + "legendFormat": "{{position}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "rpm" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "description": "Future climate collector panel: fan RPM by position (inside inlet, outside inlet, outlet, interior)." } ], "time": { diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index d37612f0..7c90947f 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1082,7 +1082,7 @@ data: { "id": 40, "type": "stat", - "title": "UPS Sources On Battery", + "title": "titan-db UPS Runtime", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1095,7 +1095,7 @@ data: }, "targets": [ { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -1110,23 +1110,28 @@ data: "mode": "absolute", "steps": [ { - "color": "green", + "color": "red", "value": null }, { - "color": "yellow", - "value": 1 + "color": "orange", + "value": 600 }, { - "color": "red", - "value": 2 + "color": "yellow", + "value": 1200 + }, + { + "color": "green", + "value": 1800 } ] }, - "unit": "none", + "unit": "s", "custom": { "displayMode": "auto" - } + }, + "decimals": 0 }, "overrides": [] }, @@ -1154,7 +1159,7 @@ data: { "id": 41, "type": "stat", - "title": "Lowest UPS Runtime", + "title": "tethys UPS Runtime", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1167,7 +1172,7 @@ data: }, "targets": [ { - "expr": "min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A" } ], @@ -1230,7 +1235,7 @@ data: { "id": 42, "type": "stat", - "title": "UPS Runtime Headroom", + "title": "UPS Sources On Battery", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1243,8 +1248,9 @@ data: }, "targets": [ { - "expr": "100 * min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) / clamp_min(max(hecate_ups_threshold_seconds{job=\"hecate-power\"}), 1)", - "refId": "A" + "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "refId": "A", + "instant": true } ], "fieldConfig": { @@ -1257,28 +1263,23 @@ data: "mode": "absolute", "steps": [ { - "color": "red", + "color": "green", "value": null }, - { - "color": "orange", - "value": 100 - }, { "color": "yellow", - "value": 110 + "value": 1 }, { - "color": "green", - "value": 140 + "color": "red", + "value": 2 } ] }, - "unit": "percent", + "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 1 + } }, "overrides": [] }, @@ -1306,7 +1307,7 @@ data: { "id": 43, "type": "stat", - "title": "Climate Sensors Reporting", + "title": "Current Tent Temperature", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -1319,7 +1320,7 @@ data: }, "targets": [ { - "expr": "count(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(atlas_climate_temperature_celsius) or on() vector(0)", "refId": "A" } ], @@ -1342,11 +1343,11 @@ data: } ] }, - "unit": "none", + "unit": "celsius", "custom": { "displayMode": "auto" }, - "decimals": 0 + "decimals": 1 }, "overrides": [] }, @@ -1370,7 +1371,7 @@ data: "targetBlank": true } ], - "description": "Climate metrics are reserved for future tent monitoring instrumentation." + "description": "Future climate collector metric (will read 0/no data until instrumentation is live)." }, { "id": 44, diff --git a/services/monitoring/grafana-dashboard-power.yaml b/services/monitoring/grafana-dashboard-power.yaml index e16c3ef8..f7214ddf 100644 --- a/services/monitoring/grafana-dashboard-power.yaml +++ b/services/monitoring/grafana-dashboard-power.yaml @@ -16,7 +16,7 @@ data: { "id": 1, "type": "stat", - "title": "UPS Sources On Battery", + "title": "titan-db UPS Status (On Battery)", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -29,7 +29,7 @@ data: }, "targets": [ { - "expr": "sum(hecate_ups_on_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -47,13 +47,9 @@ data: "color": "green", "value": null }, - { - "color": "yellow", - "value": 1 - }, { "color": "red", - "value": 2 + "value": 1 } ] }, @@ -81,7 +77,7 @@ data: { "id": 2, "type": "stat", - "title": "UPS Sources Low Battery", + "title": "tethys UPS Status (On Battery)", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -94,7 +90,7 @@ data: }, "targets": [ { - "expr": "sum(hecate_ups_low_battery{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_on_battery{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -112,13 +108,9 @@ data: "color": "green", "value": null }, - { - "color": "yellow", - "value": 1 - }, { "color": "red", - "value": 2 + "value": 1 } ] }, @@ -146,7 +138,7 @@ data: { "id": 3, "type": "stat", - "title": "Lowest Runtime Remaining", + "title": "titan-db Runtime Remaining", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -159,7 +151,7 @@ data: }, "targets": [ { - "expr": "min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) or on() vector(0)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -216,7 +208,7 @@ data: { "id": 4, "type": "stat", - "title": "Runtime Headroom", + "title": "tethys Runtime Remaining", "datasource": { "type": "prometheus", "uid": "atlas-vm" @@ -229,7 +221,7 @@ data: }, "targets": [ { - "expr": "100 * min(hecate_ups_runtime_seconds{job=\"hecate-power\"}) / clamp_min(max(hecate_ups_threshold_seconds{job=\"hecate-power\"}), 1)", + "expr": "max(hecate_ups_runtime_seconds{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -249,15 +241,85 @@ data: }, { "color": "orange", - "value": 100 + "value": 600 }, { "color": "yellow", - "value": 110 + "value": 1200 }, { "color": "green", - "value": 140 + "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" + } + }, + { + "id": 5, + "type": "stat", + "title": "titan-db Battery Charge", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 4 + }, + "targets": [ + { + "expr": "max(hecate_ups_battery_charge_percent{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 25 + }, + { + "color": "yellow", + "value": 45 + }, + { + "color": "green", + "value": 65 } ] }, @@ -283,97 +345,23 @@ data: "textMode": "value" } }, - { - "id": 5, - "type": "timeseries", - "title": "UPS Runtime by Source", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 4 - }, - "targets": [ - { - "expr": "hecate_ups_runtime_seconds", - "refId": "A", - "legendFormat": "{{instance}}/{{source}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "s" - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "right" - }, - "tooltip": { - "mode": "multi" - } - } - }, { "id": 6, - "type": "timeseries", - "title": "UPS Trigger Activity by Source", - "datasource": { - "type": "prometheus", - "uid": "atlas-vm" - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 4 - }, - "targets": [ - { - "expr": "hecate_ups_trigger_active", - "refId": "A", - "legendFormat": "{{instance}}/{{source}}" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none" - }, - "overrides": [] - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "right" - }, - "tooltip": { - "mode": "multi" - } - } - }, - { - "id": 7, "type": "stat", - "title": "Climate Sensors Reporting", + "title": "tethys Battery Charge", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 8, - "x": 0, - "y": 12 + "w": 6, + "x": 6, + "y": 4 }, "targets": [ { - "expr": "count(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(hecate_ups_battery_charge_percent{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -388,20 +376,28 @@ data: "mode": "absolute", "steps": [ { - "color": "rgba(115, 115, 115, 1)", + "color": "red", "value": null }, + { + "color": "orange", + "value": 25 + }, + { + "color": "yellow", + "value": 45 + }, { "color": "green", - "value": 1 + "value": 65 } ] }, - "unit": "none", + "unit": "percent", "custom": { "displayMode": "auto" }, - "decimals": 0 + "decimals": 1 }, "overrides": [] }, @@ -417,26 +413,25 @@ data: "values": false }, "textMode": "value" - }, - "description": "Reserved for tent climate telemetry wiring." + } }, { - "id": 8, + "id": 7, "type": "stat", - "title": "Max Tent Temperature", + "title": "titan-db UPS Load", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { "h": 4, - "w": 8, - "x": 8, - "y": 12 + "w": 6, + "x": 12, + "y": 4 }, "targets": [ { - "expr": "max(atlas_climate_temperature_celsius) or on() vector(0)", + "expr": "max(hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-db\"}) or on() vector(0)", "refId": "A", "instant": true } @@ -451,16 +446,94 @@ data: "mode": "absolute", "steps": [ { - "color": "rgba(115, 115, 115, 1)", + "color": "green", "value": null }, { - "color": "green", - "value": 1 + "color": "yellow", + "value": 55 + }, + { + "color": "orange", + "value": 75 + }, + { + "color": "red", + "value": 90 } ] }, - "unit": "celsius", + "unit": "percent", + "custom": { + "displayMode": "auto" + }, + "decimals": 1 + }, + "overrides": [] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "value" + } + }, + { + "id": 8, + "type": "stat", + "title": "tethys UPS Load", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 4 + }, + "targets": [ + { + "expr": "max(hecate_ups_load_percent{job=\"hecate-power\",instance=\"titan-24\"}) or on() vector(0)", + "refId": "A", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 55 + }, + { + "color": "orange", + "value": 75 + }, + { + "color": "red", + "value": 90 + } + ] + }, + "unit": "percent", "custom": { "displayMode": "auto" }, @@ -484,65 +557,227 @@ data: }, { "id": 9, - "type": "stat", - "title": "Max Tent Humidity", + "type": "timeseries", + "title": "UPS Runtime by Source", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 4, - "w": 8, - "x": 16, - "y": 12 + "h": 8, + "w": 12, + "x": 0, + "y": 8 }, "targets": [ { - "expr": "max(atlas_climate_humidity_percent) or on() vector(0)", + "expr": "hecate_ups_runtime_seconds{job=\"hecate-power\"}", "refId": "A", - "instant": true + "legendFormat": "{{instance}}/{{source}}" } ], "fieldConfig": { "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "rgba(115, 115, 115, 1)", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "percent", - "custom": { - "displayMode": "auto" - }, - "decimals": 1 + "unit": "s" }, "overrides": [] }, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "center", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "displayMode": "table", + "placement": "right" }, - "textMode": "value" + "tooltip": { + "mode": "multi" + } } + }, + { + "id": 10, + "type": "timeseries", + "title": "UPS Load % by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "targets": [ + { + "expr": "hecate_ups_load_percent{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 11, + "type": "timeseries", + "title": "UPS Battery Charge % by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "targets": [ + { + "expr": "hecate_ups_battery_charge_percent{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "percent" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 12, + "type": "timeseries", + "title": "UPS Trigger Activity by Source", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 16 + }, + "targets": [ + { + "expr": "hecate_ups_trigger_active{job=\"hecate-power\"}", + "refId": "A", + "legendFormat": "{{instance}}/{{source}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + } + }, + { + "id": 13, + "type": "timeseries", + "title": "Climate Temperature Over Time", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 24 + }, + "targets": [ + { + "expr": "atlas_climate_temperature_celsius", + "refId": "A", + "legendFormat": "{{sensor}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "celsius" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "description": "Future climate collector panel: temperature probes (inside inlet, outside inlet, outlet, interior)." + }, + { + "id": 14, + "type": "timeseries", + "title": "Climate Fan Speed Over Time", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 24 + }, + "targets": [ + { + "expr": "atlas_climate_fan_rpm", + "refId": "A", + "legendFormat": "{{position}}" + } + ], + "fieldConfig": { + "defaults": { + "unit": "rpm" + }, + "overrides": [] + }, + "options": { + "legend": { + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "multi" + } + }, + "description": "Future climate collector panel: fan RPM by position (inside inlet, outside inlet, outlet, interior)." } ], "time": { diff --git a/services/monitoring/helmrelease.yaml b/services/monitoring/helmrelease.yaml index 670bf1f0..f3529df1 100644 --- a/services/monitoring/helmrelease.yaml +++ b/services/monitoring/helmrelease.yaml @@ -490,6 +490,14 @@ spec: editable: true options: path: /var/lib/grafana/dashboards/jobs + - name: power + orgId: 1 + folder: Atlas Internal + type: file + disableDeletion: false + editable: true + options: + path: /var/lib/grafana/dashboards/power dashboardsConfigMaps: overview: grafana-dashboard-overview overview-public: grafana-dashboard-overview @@ -500,6 +508,7 @@ spec: network: grafana-dashboard-network mail: grafana-dashboard-mail jobs: grafana-dashboard-jobs + power: grafana-dashboard-power extraConfigmapMounts: - name: grafana-folders mountPath: /etc/grafana/provisioning/folders