diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 162b2541..09a42a40 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -129,7 +129,7 @@ }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -204,7 +204,7 @@ }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -352,7 +352,7 @@ }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -427,7 +427,7 @@ }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -565,7 +565,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -642,7 +642,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -711,7 +711,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -780,7 +780,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -855,7 +855,7 @@ }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -930,7 +930,7 @@ }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -997,7 +997,7 @@ }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -1064,7 +1064,7 @@ }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -1073,52 +1073,22 @@ { "id": 40, "type": "stat", - "title": "UPS Current Load", + "title": "Pyrphoros UPS Current", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, + "h": 3, + "w": 6, "x": 0, - "y": 12 + "y": 7 }, "targets": [ { + "expr": "label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")", "refId": "A", - "expr": "max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0)", - "legendFormat": "Pyrphoros Draw (W)", - "instant": true - }, - { - "refId": "B", - "expr": "max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)", - "legendFormat": "Pyrphoros Discharge", - "instant": true - }, - { - "refId": "C", - "expr": "max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)", - "legendFormat": "Pyrphoros Status", - "instant": true - }, - { - "refId": "D", - "expr": "max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0)", - "legendFormat": "Statera Draw (W)", - "instant": true - }, - { - "refId": "E", - "expr": "max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)", - "legendFormat": "Statera Discharge", - "instant": true - }, - { - "refId": "F", - "expr": "max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)", - "legendFormat": "Statera Status", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1144,127 +1114,30 @@ "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 1 + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Pyrphoros Draw (W)" + "options": "Draw" }, "properties": [ { "id": "unit", "value": "watt" - }, - { - "id": "description", - "value": "Attached node: titan-db" } ] }, { "matcher": { "id": "byName", - "options": "Statera Draw (W)" - }, - "properties": [ - { - "id": "unit", - "value": "watt" - }, - { - "id": "description", - "value": "Attached node: titan-24" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Pyrphoros Discharge" + "options": "Runtime" }, "properties": [ { "id": "unit", "value": "s" - }, - { - "id": "description", - "value": "Attached node: titan-db" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Statera Discharge" - }, - "properties": [ - { - "id": "unit", - "value": "s" - }, - { - "id": "description", - "value": "Attached node: titan-24" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Pyrphoros Status" - }, - "properties": [ - { - "id": "mappings", - "value": [ - { - "type": "value", - "options": { - "0": { - "text": "\u26a1 Charging" - }, - "1": { - "text": "\ud83d\udd0b Discharging" - } - } - } - ] - }, - { - "id": "description", - "value": "Attached node: titan-db" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Statera Status" - }, - "properties": [ - { - "id": "mappings", - "value": [ - { - "type": "value", - "options": { - "0": { - "text": "\u26a1 Charging" - }, - "1": { - "text": "\ud83d\udd0b Discharging" - } - } - } - ] - }, - { - "id": "description", - "value": "Attached node: titan-24" } ] } @@ -1282,17 +1155,116 @@ "values": false }, "textMode": "name_and_value", - "orientation": "horizontal", - "wideLayout": true + "text": { + "titleSize": 14, + "valueSize": 30 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } + ] + }, + { + "id": 144, + "type": "stat", + "title": "Statera UPS Current", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 10 + }, + "targets": [ + { + "expr": "label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")", + "refId": "A", + "legendFormat": "{{metric}}", + "instant": true + } ], - "description": "Per-UPS live snapshot: current draw, discharge, and charging/discharging status." + "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" + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Draw" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Runtime" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] }, { "id": 41, @@ -1304,9 +1276,9 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 4, - "y": 12 + "w": 6, + "x": 6, + "y": 7 }, "targets": [ { @@ -1333,8 +1305,8 @@ }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1342,7 +1314,7 @@ }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1351,40 +1323,22 @@ { "id": 42, "type": "stat", - "title": "Current Climate", + "title": "Current Enclosure Temperature", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 12 + "h": 3, + "w": 6, + "x": 0, + "y": 13 }, "targets": [ { + "expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) or on() vector(0), \"metric\", \"\u00b0C\", \"__name__\", \".*\") or label_replace(max((max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0), \"metric\", \"\u00b0F\", \"__name__\", \".*\")", "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", - "legendFormat": "Tent Temp (\u00b0C)", - "instant": true - }, - { - "refId": "B", - "expr": "max(typhon_vpd_kpa) or on() vector(0)", - "legendFormat": "Tent VPD (kPa)", - "instant": true - }, - { - "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", - "legendFormat": "Tent RH (%)", - "instant": true - }, - { - "refId": "D", - "expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1410,14 +1364,13 @@ "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 2 + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Tent Temp (\u00b0C)" + "options": "\u00b0C" }, "properties": [ { @@ -1429,36 +1382,12 @@ { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "\u00b0F" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Tent RH (%)" - }, - "properties": [ - { - "id": "unit", - "value": "percent" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Dew Point (\u00b0C)" - }, - "properties": [ - { - "id": "unit", - "value": "celsius" + "value": "fahrenheit" } ] } @@ -1475,93 +1404,402 @@ "fields": "", "values": false }, - "textMode": "value", - "orientation": "horizontal", - "wideLayout": true + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } - ], - "description": "Current tent temperature, humidity, VPD, and dew point." + ] }, { - "id": 43, - "type": "timeseries", - "title": "Climate History", + "id": 143, + "type": "stat", + "title": "Current Enclosure Climate", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 12, - "y": 12 + "h": 3, + "w": 6, + "x": 0, + "y": 16 }, "targets": [ { + "expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)) or on() vector(0), \"metric\", \"%RH\", \"__name__\", \".*\") or label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)) or on() vector(0), \"metric\", \"kPa\", \"__name__\", \".*\")", "refId": "A", - "expr": "typhon_temperature_celsius", - "legendFormat": "Temperature (\u00b0C)" - }, - { - "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" - }, - { - "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" - }, - { - "refId": "D", - "expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "legendFormat": "{{metric}}", + "instant": true } ], "fieldConfig": { "defaults": { - "unit": "celsius" + "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" + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "%RH" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "suffix:%RH" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "kPa" }, "properties": [ { "id": "unit", - "value": "none" + "value": "suffix:kPa" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 43, + "type": "timeseries", + "title": "Enclosure Climate History", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 13 + }, + "targets": [ + { + "refId": "A", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)", + "legendFormat": "C" + }, + { + "refId": "B", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)", + "legendFormat": "RH" + }, + { + "refId": "C", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)", + "legendFormat": "P" + }, + { + "refId": "D", + "expr": "(min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) - 0.08)", + "legendFormat": "C bound min" + }, + { + "refId": "E", + "expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) + 0.08)", + "legendFormat": "C bound max" + }, + { + "refId": "F", + "expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) - 0.35), 0)", + "legendFormat": "RH bound min" + }, + { + "refId": "G", + "expr": "clamp_max((max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) + 0.35), 100)", + "legendFormat": "RH bound max" + }, + { + "refId": "H", + "expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) - 0.03), 0)", + "legendFormat": "P bound min" + }, + { + "refId": "I", + "expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) + 0.03)", + "legendFormat": "P bound max" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "custom": { + "drawStyle": "line", + "lineInterpolation": "linear", + "lineWidth": 2, + "fillOpacity": 10, + "showPoints": "never", + "spanNulls": true + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "C" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:\u00b0C" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.axisPlacement", + "value": "left" + }, + { + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "C bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:\u00b0C" + }, + { + "id": "custom.axisPlacement", + "value": "left" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RH" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:%" + }, + { + "id": "decimals", + "value": 2 }, { "id": "custom.axisPlacement", "value": "right" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "RH bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:%" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "P" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" + }, + { + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", "value": 2 + }, + { + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "P bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } } ] } @@ -1578,12 +1816,12 @@ }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } ], - "description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and VPD in kPa (right axis)." + "description": "Temperature on left axis, humidity and pressure on right axis with dynamic bound series so small swings remain visible." }, { "id": 140, @@ -1595,33 +1833,15 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 16, - "y": 12 + "w": 6, + "x": 12, + "y": 13 }, "targets": [ { + "expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})) or on() vector(0))), \"metric\", \"Inlet - In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})) or on() vector(0))), \"metric\", \"Inlet - Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", - "legendFormat": "Inside Outlet", - "instant": true - }, - { - "refId": "B", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))", - "legendFormat": "Inside Inlet", - "instant": true - }, - { - "refId": "C", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))", - "legendFormat": "Outside Inlet", - "instant": true - }, - { - "refId": "D", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))", - "legendFormat": "Interior Fans", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1654,7 +1874,56 @@ }, "decimals": 0 }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Outlet" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inlet - In" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inlet - Out" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Interior" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + } + ] }, "options": { "colorMode": "value", @@ -1668,12 +1937,15 @@ "values": false }, "textMode": "name_and_value", - "orientation": "horizontal", - "wideLayout": true + "orientation": "vertical", + "wideLayout": false, + "text": { + "valueSize": 26 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1689,30 +1961,30 @@ }, "gridPos": { "h": 6, - "w": 4, - "x": 20, - "y": 12 + "w": 6, + "x": 18, + "y": 13 }, "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", - "legendFormat": "Inside Outlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})", + "legendFormat": "Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", - "legendFormat": "Inside Inlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})", + "legendFormat": "Inlet - Inside" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", - "legendFormat": "Outside Inlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})", + "legendFormat": "Inlet - Outside" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=\"interior\"}", - "legendFormat": "Interior Fans" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})", + "legendFormat": "Interior" } ], "fieldConfig": { @@ -1724,8 +1996,8 @@ }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1733,7 +2005,7 @@ }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1749,9 +2021,9 @@ }, "gridPos": { "h": 5, - "w": 6, + "w": 8, "x": 0, - "y": 7 + "y": 32 }, "targets": [ { @@ -1804,7 +2076,7 @@ }, "links": [ { - "title": "Open Atlas Testing", + "title": "Open atlas-jobs dashboard", "url": "/d/atlas-jobs", "targetBlank": true } @@ -1836,19 +2108,19 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 5, + "h": 6, "w": 6, - "x": 6, + "x": 12, "y": 7 }, "targets": [ { - "expr": "sum(increase(ariadne_task_runs_total[$__interval]))", + "expr": "sum(increase(ariadne_task_runs_total[$__interval])) or on() vector(0)", "refId": "A", "legendFormat": "Attempts" }, { - "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval]))", + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval])) or on() vector(0)", "refId": "B", "legendFormat": "Failures" } @@ -1901,7 +2173,7 @@ }, "links": [ { - "title": "Open Atlas Testing", + "title": "Open atlas-jobs dashboard", "url": "/d/atlas-jobs", "targetBlank": true } @@ -1916,56 +2188,66 @@ "uid": "atlas-vm" }, "gridPos": { - "h": 5, + "h": 6, "w": 6, - "x": 12, + "x": 18, "y": 7 }, "targets": [ { "refId": "A", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "ariadne" }, { "refId": "B", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "metis" }, { "refId": "C", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "ananke" }, { "refId": "D", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "atlasbot" }, { "refId": "E", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "pegasus" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "lesavka" }, { "refId": "F", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "soteria" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "pegasus" }, { "refId": "G", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan_iac|titan-iac\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan_iac|titan-iac\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "titan_iac" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "soteria" }, { "refId": "H", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein_home|bstein-home\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein_home|bstein-home\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "bstein_home" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "titan-iac" }, { "refId": "I", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data_prepper|data-prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data_prepper|data-prepper\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "data_prepper" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "arcanagon" + }, + { + "refId": "K", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "data-prepper" } ], "fieldConfig": { @@ -1999,14 +2281,228 @@ }, "links": [ { - "title": "Open Atlas Testing", - "url": "/d/atlas-jobs", + "title": "Open atlas-testing dashboard", + "url": "/d/atlas-testing", "targetBlank": true } ], "timeFrom": "7d", "description": "Per-run interval pass points (0-100) for each software suite over the last 7 days. Points are connected to show trend; missing-run intervals are ignored." }, + { + "id": 142, + "type": "stat", + "title": "Jenkins Last Success (h, newest first)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 32 + }, + "targets": [ + { + "refId": "A", + "expr": "sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "decimals": 1, + "min": 0, + "displayName": "${__field.labels.weather_icon} ${__field.labels.exported_job}", + "links": [ + { + "title": "Open Jenkins job", + "url": "https://ci.bstein.dev/job/${__field.labels.exported_job}/", + "targetBlank": true + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"ok\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "green" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"bad\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "red" + } + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "left", + "orientation": "horizontal", + "wideLayout": true, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 11, + "valueSize": 11 + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "asc" + } + } + ], + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "Top 6 most recent Jenkins successes by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list." + }, + { + "id": 243, + "type": "stat", + "title": "Jenkins Last Failure (h, newest first)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 12, + "y": 32 + }, + "targets": [ + { + "refId": "A", + "expr": "sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "decimals": 1, + "min": 0, + "displayName": "${__field.labels.weather_icon} ${__field.labels.exported_job}", + "links": [ + { + "title": "Open Jenkins job", + "url": "https://ci.bstein.dev/job/${__field.labels.exported_job}/", + "targetBlank": true + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"ok\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "green" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"bad\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "red" + } + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "left", + "orientation": "horizontal", + "wideLayout": true, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 11, + "valueSize": 11 + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "asc" + } + } + ], + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "Top 6 most recent Jenkins failures by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list." + }, { "id": 47, "type": "bargauge", @@ -2017,13 +2513,13 @@ }, "gridPos": { "h": 5, - "w": 6, - "x": 18, - "y": 7 + "w": 8, + "x": 16, + "y": 32 }, "targets": [ { - "expr": "sort_desc(max by (namespace, pvc) (pvc_backup_age_hours or on(namespace, pvc) ((1 - pvc_backup_health) * 999)))", + "expr": "sort_desc(max by (namespace, pvc) (((time() - pvc_backup_last_success_timestamp_seconds{driver=\"restic\"}) / 3600) or on(namespace,pvc,volume,driver) ((((pvc_backup_health_reason{driver=\"restic\",reason=~\"missing|no_completed|lookup_failed|unknown_timestamp\"} > 0) * (pvc_backup_count{driver=\"restic\"} > bool 0)) * 999))) or on() vector(0))", "refId": "A", "legendFormat": "{{namespace}}/{{pvc}}", "instant": true @@ -2082,12 +2578,12 @@ ], "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } ], - "description": "Oldest successful backup age in hours by PVC with nightly cadence thresholds (green <=20h, yellow <40h, orange <50h, red >=50h). PVCs with missing or unhealthy backup state are forced to 999h so critical bars stay visible." + "description": "Backup age in hours computed from last-success timestamps for restic-managed PVCs (nightly target: <=20h green, <40h yellow, <50h orange, >=50h red). PVCs that have backup history but currently no successful backup (missing/no_completed/error) are pinned to 999h for visibility." }, { "id": 30, @@ -2101,7 +2597,7 @@ "h": 2, "w": 4, "x": 0, - "y": 18 + "y": 19 }, "targets": [ { @@ -2150,7 +2646,7 @@ }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2168,7 +2664,7 @@ "h": 2, "w": 4, "x": 8, - "y": 18 + "y": 19 }, "targets": [ { @@ -2255,7 +2751,7 @@ }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2273,7 +2769,7 @@ "h": 2, "w": 4, "x": 4, - "y": 18 + "y": 19 }, "targets": [ { @@ -2331,7 +2827,7 @@ }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2349,7 +2845,7 @@ "h": 2, "w": 4, "x": 12, - "y": 18 + "y": 19 }, "targets": [ { @@ -2407,7 +2903,7 @@ }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2425,7 +2921,7 @@ "h": 2, "w": 4, "x": 16, - "y": 18 + "y": 19 }, "targets": [ { @@ -2488,7 +2984,7 @@ "h": 2, "w": 4, "x": 20, - "y": 18 + "y": 19 }, "targets": [ { @@ -2758,7 +3254,7 @@ "h": 12, "w": 12, "x": 0, - "y": 39 + "y": 44 }, "targets": [ { @@ -2787,7 +3283,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -2805,7 +3301,7 @@ "h": 12, "w": 12, "x": 12, - "y": 39 + "y": 44 }, "targets": [ { @@ -2834,7 +3330,7 @@ }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -2852,7 +3348,7 @@ "h": 10, "w": 12, "x": 0, - "y": 51 + "y": 56 }, "targets": [ { @@ -2889,7 +3385,7 @@ "h": 10, "w": 12, "x": 12, - "y": 51 + "y": 56 }, "targets": [ { @@ -2926,7 +3422,7 @@ "h": 10, "w": 12, "x": 0, - "y": 61 + "y": 66 }, "targets": [ { @@ -2977,7 +3473,7 @@ "h": 10, "w": 12, "x": 12, - "y": 61 + "y": 66 }, "targets": [ { @@ -3058,7 +3554,7 @@ "h": 7, "w": 8, "x": 0, - "y": 32 + "y": 37 }, "targets": [ { @@ -3084,7 +3580,7 @@ }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3102,7 +3598,7 @@ "h": 7, "w": 8, "x": 8, - "y": 32 + "y": 37 }, "targets": [ { @@ -3128,7 +3624,7 @@ }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3146,7 +3642,7 @@ "h": 7, "w": 8, "x": 16, - "y": 32 + "y": 37 }, "targets": [ { @@ -3172,7 +3668,7 @@ }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3190,7 +3686,7 @@ "h": 16, "w": 12, "x": 0, - "y": 71 + "y": 76 }, "targets": [ { @@ -3220,7 +3716,7 @@ "timeFrom": "30d", "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -3238,7 +3734,7 @@ "h": 16, "w": 12, "x": 12, - "y": 71 + "y": 76 }, "targets": [ { @@ -3268,7 +3764,7 @@ "timeFrom": "1w", "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -3392,11 +3888,5 @@ "to": "now" }, "refresh": "1m", - "links": [ - { - "title": "Atlas Testing (Internal)", - "url": "/d/atlas-jobs", - "targetBlank": false - } - ] + "links": [] } diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index 2dc0c8d0..a223f180 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -138,7 +138,7 @@ data: }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -213,7 +213,7 @@ data: }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -361,7 +361,7 @@ data: }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -436,7 +436,7 @@ data: }, "links": [ { - "title": "Open Atlas Pods", + "title": "Open atlas-pods dashboard", "url": "/d/atlas-pods", "targetBlank": true } @@ -574,7 +574,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -651,7 +651,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -720,7 +720,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -789,7 +789,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -864,7 +864,7 @@ data: }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -939,7 +939,7 @@ data: }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -1006,7 +1006,7 @@ data: }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -1073,7 +1073,7 @@ data: }, "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -1082,52 +1082,22 @@ data: { "id": 40, "type": "stat", - "title": "UPS Current Load", + "title": "Pyrphoros UPS Current", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, + "h": 3, + "w": 6, "x": 0, - "y": 12 + "y": 7 }, "targets": [ { + "expr": "label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")", "refId": "A", - "expr": "max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0)", - "legendFormat": "Pyrphoros Draw (W)", - "instant": true - }, - { - "refId": "B", - "expr": "max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)", - "legendFormat": "Pyrphoros Discharge", - "instant": true - }, - { - "refId": "C", - "expr": "max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)", - "legendFormat": "Pyrphoros Status", - "instant": true - }, - { - "refId": "D", - "expr": "max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0)", - "legendFormat": "Statera Draw (W)", - "instant": true - }, - { - "refId": "E", - "expr": "max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)", - "legendFormat": "Statera Discharge", - "instant": true - }, - { - "refId": "F", - "expr": "max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)", - "legendFormat": "Statera Status", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1153,127 +1123,30 @@ data: "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 1 + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Pyrphoros Draw (W)" + "options": "Draw" }, "properties": [ { "id": "unit", "value": "watt" - }, - { - "id": "description", - "value": "Attached node: titan-db" } ] }, { "matcher": { "id": "byName", - "options": "Statera Draw (W)" - }, - "properties": [ - { - "id": "unit", - "value": "watt" - }, - { - "id": "description", - "value": "Attached node: titan-24" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Pyrphoros Discharge" + "options": "Runtime" }, "properties": [ { "id": "unit", "value": "s" - }, - { - "id": "description", - "value": "Attached node: titan-db" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Statera Discharge" - }, - "properties": [ - { - "id": "unit", - "value": "s" - }, - { - "id": "description", - "value": "Attached node: titan-24" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Pyrphoros Status" - }, - "properties": [ - { - "id": "mappings", - "value": [ - { - "type": "value", - "options": { - "0": { - "text": "\u26a1 Charging" - }, - "1": { - "text": "\ud83d\udd0b Discharging" - } - } - } - ] - }, - { - "id": "description", - "value": "Attached node: titan-db" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Statera Status" - }, - "properties": [ - { - "id": "mappings", - "value": [ - { - "type": "value", - "options": { - "0": { - "text": "\u26a1 Charging" - }, - "1": { - "text": "\ud83d\udd0b Discharging" - } - } - } - ] - }, - { - "id": "description", - "value": "Attached node: titan-24" } ] } @@ -1291,17 +1164,116 @@ data: "values": false }, "textMode": "name_and_value", - "orientation": "horizontal", - "wideLayout": true + "text": { + "titleSize": 14, + "valueSize": 30 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } + ] + }, + { + "id": 144, + "type": "stat", + "title": "Statera UPS Current", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 10 + }, + "targets": [ + { + "expr": "label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")", + "refId": "A", + "legendFormat": "{{metric}}", + "instant": true + } ], - "description": "Per-UPS live snapshot: current draw, discharge, and charging/discharging status." + "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" + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Draw" + }, + "properties": [ + { + "id": "unit", + "value": "watt" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Runtime" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] }, { "id": 41, @@ -1313,9 +1285,9 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 4, - "y": 12 + "w": 6, + "x": 6, + "y": 7 }, "targets": [ { @@ -1342,8 +1314,8 @@ data: }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1351,7 +1323,7 @@ data: }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1360,40 +1332,22 @@ data: { "id": 42, "type": "stat", - "title": "Current Climate", + "title": "Current Enclosure Temperature", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 8, - "y": 12 + "h": 3, + "w": 6, + "x": 0, + "y": 13 }, "targets": [ { + "expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) or on() vector(0), \"metric\", \"\u00b0C\", \"__name__\", \".*\") or label_replace(max((max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0), \"metric\", \"\u00b0F\", \"__name__\", \".*\")", "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", - "legendFormat": "Tent Temp (\u00b0C)", - "instant": true - }, - { - "refId": "B", - "expr": "max(typhon_vpd_kpa) or on() vector(0)", - "legendFormat": "Tent VPD (kPa)", - "instant": true - }, - { - "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", - "legendFormat": "Tent RH (%)", - "instant": true - }, - { - "refId": "D", - "expr": "max((243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1419,14 +1373,13 @@ data: "unit": "none", "custom": { "displayMode": "auto" - }, - "decimals": 2 + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Tent Temp (\u00b0C)" + "options": "\u00b0C" }, "properties": [ { @@ -1438,36 +1391,12 @@ data: { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "\u00b0F" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Tent RH (%)" - }, - "properties": [ - { - "id": "unit", - "value": "percent" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Dew Point (\u00b0C)" - }, - "properties": [ - { - "id": "unit", - "value": "celsius" + "value": "fahrenheit" } ] } @@ -1484,93 +1413,402 @@ data: "fields": "", "values": false }, - "textMode": "value", - "orientation": "horizontal", - "wideLayout": true + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } - ], - "description": "Current tent temperature, humidity, VPD, and dew point." + ] }, { - "id": 43, - "type": "timeseries", - "title": "Climate History", + "id": 143, + "type": "stat", + "title": "Current Enclosure Climate", "datasource": { "type": "prometheus", "uid": "atlas-vm" }, "gridPos": { - "h": 6, - "w": 4, - "x": 12, - "y": 12 + "h": 3, + "w": 6, + "x": 0, + "y": 16 }, "targets": [ { + "expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)) or on() vector(0), \"metric\", \"%RH\", \"__name__\", \".*\") or label_replace(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)) or on() vector(0), \"metric\", \"kPa\", \"__name__\", \".*\")", "refId": "A", - "expr": "typhon_temperature_celsius", - "legendFormat": "Temperature (\u00b0C)" - }, - { - "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" - }, - { - "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" - }, - { - "refId": "D", - "expr": "(243.12 * (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius))) / (17.62 - (ln(clamp_min(typhon_relative_humidity_percent, 1) / 100) + (17.62 * typhon_temperature_celsius) / (243.12 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "legendFormat": "{{metric}}", + "instant": true } ], "fieldConfig": { "defaults": { - "unit": "celsius" + "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" + } }, "overrides": [ { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "%RH" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "suffix:%RH" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "kPa" }, "properties": [ { "id": "unit", - "value": "none" + "value": "suffix:kPa" + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 14, + "valueSize": 30 + } + }, + "links": [ + { + "title": "Open atlas-power dashboard", + "url": "/d/atlas-power", + "targetBlank": true + } + ] + }, + { + "id": 43, + "type": "timeseries", + "title": "Enclosure Climate History", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 13 + }, + "targets": [ + { + "refId": "A", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)", + "legendFormat": "C" + }, + { + "refId": "B", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)", + "legendFormat": "RH" + }, + { + "refId": "C", + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)", + "legendFormat": "P" + }, + { + "refId": "D", + "expr": "(min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) - 0.08)", + "legendFormat": "C bound min" + }, + { + "refId": "E", + "expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) + 0.08)", + "legendFormat": "C bound max" + }, + { + "refId": "F", + "expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) - 0.35), 0)", + "legendFormat": "RH bound min" + }, + { + "refId": "G", + "expr": "clamp_max((max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) + 0.35), 100)", + "legendFormat": "RH bound max" + }, + { + "refId": "H", + "expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) - 0.03), 0)", + "legendFormat": "P bound min" + }, + { + "refId": "I", + "expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) + 0.03)", + "legendFormat": "P bound max" + } + ], + "fieldConfig": { + "defaults": { + "unit": "none", + "custom": { + "drawStyle": "line", + "lineInterpolation": "linear", + "lineWidth": 2, + "fillOpacity": 10, + "showPoints": "never", + "spanNulls": true + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "C" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:\u00b0C" + }, + { + "id": "decimals", + "value": 2 + }, + { + "id": "custom.axisPlacement", + "value": "left" + }, + { + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "C bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:\u00b0C" + }, + { + "id": "custom.axisPlacement", + "value": "left" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RH" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:%" + }, + { + "id": "decimals", + "value": 2 }, { "id": "custom.axisPlacement", "value": "right" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "RH bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:%" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "P" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" + }, + { + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", "value": 2 + }, + { + "id": "custom.axisCenteredZero", + "value": false + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "P bound .*" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" + }, + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisCenteredZero", + "value": false + }, + { + "id": "custom.hideFrom", + "value": { + "legend": true, + "tooltip": true, + "viz": false + } + }, + { + "id": "custom.lineWidth", + "value": 0 + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.showPoints", + "value": "never" + }, + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "transparent" + } } ] } @@ -1587,12 +1825,12 @@ data: }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } ], - "description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and VPD in kPa (right axis)." + "description": "Temperature on left axis, humidity and pressure on right axis with dynamic bound series so small swings remain visible." }, { "id": 140, @@ -1604,33 +1842,15 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 16, - "y": 12 + "w": 6, + "x": 12, + "y": 13 }, "targets": [ { + "expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})) or on() vector(0))), \"metric\", \"Inlet - In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})) or on() vector(0))), \"metric\", \"Inlet - Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", - "legendFormat": "Inside Outlet", - "instant": true - }, - { - "refId": "B", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))", - "legendFormat": "Inside Inlet", - "instant": true - }, - { - "refId": "C", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))", - "legendFormat": "Outside Inlet", - "instant": true - }, - { - "refId": "D", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))", - "legendFormat": "Interior Fans", + "legendFormat": "{{metric}}", "instant": true } ], @@ -1663,7 +1883,56 @@ data: }, "decimals": 0 }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Outlet" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inlet - In" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inlet - Out" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Interior" + }, + "properties": [ + { + "id": "decimals", + "value": 0 + } + ] + } + ] }, "options": { "colorMode": "value", @@ -1677,12 +1946,15 @@ data: "values": false }, "textMode": "name_and_value", - "orientation": "horizontal", - "wideLayout": true + "orientation": "vertical", + "wideLayout": false, + "text": { + "valueSize": 26 + } }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1698,30 +1970,30 @@ data: }, "gridPos": { "h": 6, - "w": 4, - "x": 20, - "y": 12 + "w": 6, + "x": 18, + "y": 13 }, "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", - "legendFormat": "Inside Outlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})", + "legendFormat": "Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", - "legendFormat": "Inside Inlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})", + "legendFormat": "Inlet - Inside" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", - "legendFormat": "Outside Inlet" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})", + "legendFormat": "Inlet - Outside" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=\"interior\"}", - "legendFormat": "Interior Fans" + "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})", + "legendFormat": "Interior" } ], "fieldConfig": { @@ -1733,8 +2005,8 @@ data: }, "options": { "legend": { - "displayMode": "list", - "placement": "bottom" + "displayMode": "table", + "placement": "right" }, "tooltip": { "mode": "multi" @@ -1742,7 +2014,7 @@ data: }, "links": [ { - "title": "Open Atlas Power", + "title": "Open atlas-power dashboard", "url": "/d/atlas-power", "targetBlank": true } @@ -1758,9 +2030,9 @@ data: }, "gridPos": { "h": 5, - "w": 6, + "w": 8, "x": 0, - "y": 7 + "y": 32 }, "targets": [ { @@ -1813,7 +2085,7 @@ data: }, "links": [ { - "title": "Open Atlas Testing", + "title": "Open atlas-jobs dashboard", "url": "/d/atlas-jobs", "targetBlank": true } @@ -1845,19 +2117,19 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 5, + "h": 6, "w": 6, - "x": 6, + "x": 12, "y": 7 }, "targets": [ { - "expr": "sum(increase(ariadne_task_runs_total[$__interval]))", + "expr": "sum(increase(ariadne_task_runs_total[$__interval])) or on() vector(0)", "refId": "A", "legendFormat": "Attempts" }, { - "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval]))", + "expr": "sum(increase(ariadne_task_runs_total{status=\"error\"}[$__interval])) or on() vector(0)", "refId": "B", "legendFormat": "Failures" } @@ -1910,7 +2182,7 @@ data: }, "links": [ { - "title": "Open Atlas Testing", + "title": "Open atlas-jobs dashboard", "url": "/d/atlas-jobs", "targetBlank": true } @@ -1925,56 +2197,66 @@ data: "uid": "atlas-vm" }, "gridPos": { - "h": 5, + "h": 6, "w": 6, - "x": 12, + "x": 18, "y": 7 }, "targets": [ { "refId": "A", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ariadne\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "ariadne" }, { "refId": "B", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"metis\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"metis\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "metis" }, { "refId": "C", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"ananke\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "ananke" }, { "refId": "D", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"atlasbot\"}[1h]))) > 0) or on() vector(0)", "legendFormat": "atlasbot" }, { "refId": "E", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "pegasus" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"lesavka\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "lesavka" }, { "refId": "F", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "soteria" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"pegasus|pegasus-health|pegasus_health\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "pegasus" }, { "refId": "G", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan_iac|titan-iac\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan_iac|titan-iac\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "titan_iac" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"soteria\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "soteria" }, { "refId": "H", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein_home|bstein-home\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein_home|bstein-home\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "bstein_home" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"titan-iac|titan_iac\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "titan-iac" }, { "refId": "I", - "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data_prepper|data-prepper\",status=~\"ok|passed|success\",exported_job=\"platform-quality-ci\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data_prepper|data-prepper\",exported_job=\"platform-quality-ci\"}[1h]))), 1))", - "legendFormat": "data_prepper" + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"bstein-home|bstein_home\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "bstein-home" + }, + { + "refId": "J", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"arcanagon\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "arcanagon" + }, + { + "refId": "K", + "expr": "(100 * (sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\",status=~\"ok|passed|success\"}[1h]))) / clamp_min((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))), 1)) and on() ((sum(increase(platform_quality_gate_runs_total{suite=~\"data-prepper|data_prepper\"}[1h]))) > 0) or on() vector(0)", + "legendFormat": "data-prepper" } ], "fieldConfig": { @@ -2008,14 +2290,228 @@ data: }, "links": [ { - "title": "Open Atlas Testing", - "url": "/d/atlas-jobs", + "title": "Open atlas-testing dashboard", + "url": "/d/atlas-testing", "targetBlank": true } ], "timeFrom": "7d", "description": "Per-run interval pass points (0-100) for each software suite over the last 7 days. Points are connected to show trend; missing-run intervals are ignored." }, + { + "id": 142, + "type": "stat", + "title": "Jenkins Last Success (h, newest first)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 32 + }, + "targets": [ + { + "refId": "A", + "expr": "sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "decimals": 1, + "min": 0, + "displayName": "${__field.labels.weather_icon} ${__field.labels.exported_job}", + "links": [ + { + "title": "Open Jenkins job", + "url": "https://ci.bstein.dev/job/${__field.labels.exported_job}/", + "targetBlank": true + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"ok\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "green" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"bad\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "red" + } + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "left", + "orientation": "horizontal", + "wideLayout": true, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 11, + "valueSize": 11 + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "asc" + } + } + ], + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "Top 6 most recent Jenkins successes by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list." + }, + { + "id": 243, + "type": "stat", + "title": "Jenkins Last Failure (h, newest first)", + "datasource": { + "type": "prometheus", + "uid": "atlas-vm" + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 12, + "y": 32 + }, + "targets": [ + { + "refId": "A", + "expr": "sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))", + "instant": true + } + ], + "fieldConfig": { + "defaults": { + "unit": "h", + "decimals": 1, + "min": 0, + "displayName": "${__field.labels.weather_icon} ${__field.labels.exported_job}", + "links": [ + { + "title": "Open Jenkins job", + "url": "https://ci.bstein.dev/job/${__field.labels.exported_job}/", + "targetBlank": true + } + ] + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"ok\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "green" + } + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*run_state=\"bad\".*" + }, + "properties": [ + { + "id": "color", + "value": { + "mode": "fixed", + "fixedColor": "red" + } + } + ] + } + ] + }, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "left", + "orientation": "horizontal", + "wideLayout": true, + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "name_and_value", + "text": { + "titleSize": 11, + "valueSize": 11 + } + }, + "transformations": [ + { + "id": "sortBy", + "options": { + "fields": [ + "Value" + ], + "order": "asc" + } + } + ], + "links": [ + { + "title": "Open atlas-jobs dashboard", + "url": "/d/atlas-jobs", + "targetBlank": true + } + ], + "description": "Top 6 most recent Jenkins failures by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list." + }, { "id": 47, "type": "bargauge", @@ -2026,13 +2522,13 @@ data: }, "gridPos": { "h": 5, - "w": 6, - "x": 18, - "y": 7 + "w": 8, + "x": 16, + "y": 32 }, "targets": [ { - "expr": "sort_desc(max by (namespace, pvc) (pvc_backup_age_hours or on(namespace, pvc) ((1 - pvc_backup_health) * 999)))", + "expr": "sort_desc(max by (namespace, pvc) (((time() - pvc_backup_last_success_timestamp_seconds{driver=\"restic\"}) / 3600) or on(namespace,pvc,volume,driver) ((((pvc_backup_health_reason{driver=\"restic\",reason=~\"missing|no_completed|lookup_failed|unknown_timestamp\"} > 0) * (pvc_backup_count{driver=\"restic\"} > bool 0)) * 999))) or on() vector(0))", "refId": "A", "legendFormat": "{{namespace}}/{{pvc}}", "instant": true @@ -2091,12 +2587,12 @@ data: ], "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } ], - "description": "Oldest successful backup age in hours by PVC with nightly cadence thresholds (green <=20h, yellow <40h, orange <50h, red >=50h). PVCs with missing or unhealthy backup state are forced to 999h so critical bars stay visible." + "description": "Backup age in hours computed from last-success timestamps for restic-managed PVCs (nightly target: <=20h green, <40h yellow, <50h orange, >=50h red). PVCs that have backup history but currently no successful backup (missing/no_completed/error) are pinned to 999h for visibility." }, { "id": 30, @@ -2110,7 +2606,7 @@ data: "h": 2, "w": 4, "x": 0, - "y": 18 + "y": 19 }, "targets": [ { @@ -2159,7 +2655,7 @@ data: }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2177,7 +2673,7 @@ data: "h": 2, "w": 4, "x": 8, - "y": 18 + "y": 19 }, "targets": [ { @@ -2264,7 +2760,7 @@ data: }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2282,7 +2778,7 @@ data: "h": 2, "w": 4, "x": 4, - "y": 18 + "y": 19 }, "targets": [ { @@ -2340,7 +2836,7 @@ data: }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2358,7 +2854,7 @@ data: "h": 2, "w": 4, "x": 12, - "y": 18 + "y": 19 }, "targets": [ { @@ -2416,7 +2912,7 @@ data: }, "links": [ { - "title": "Open Atlas Mail", + "title": "Open atlas-mail dashboard", "url": "/d/atlas-mail", "targetBlank": true } @@ -2434,7 +2930,7 @@ data: "h": 2, "w": 4, "x": 16, - "y": 18 + "y": 19 }, "targets": [ { @@ -2497,7 +2993,7 @@ data: "h": 2, "w": 4, "x": 20, - "y": 18 + "y": 19 }, "targets": [ { @@ -2767,7 +3263,7 @@ data: "h": 12, "w": 12, "x": 0, - "y": 39 + "y": 44 }, "targets": [ { @@ -2796,7 +3292,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -2814,7 +3310,7 @@ data: "h": 12, "w": 12, "x": 12, - "y": 39 + "y": 44 }, "targets": [ { @@ -2843,7 +3339,7 @@ data: }, "links": [ { - "title": "Open Atlas Nodes", + "title": "Open atlas-nodes dashboard", "url": "/d/atlas-nodes", "targetBlank": true } @@ -2861,7 +3357,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 51 + "y": 56 }, "targets": [ { @@ -2898,7 +3394,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 51 + "y": 56 }, "targets": [ { @@ -2935,7 +3431,7 @@ data: "h": 10, "w": 12, "x": 0, - "y": 61 + "y": 66 }, "targets": [ { @@ -2986,7 +3482,7 @@ data: "h": 10, "w": 12, "x": 12, - "y": 61 + "y": 66 }, "targets": [ { @@ -3067,7 +3563,7 @@ data: "h": 7, "w": 8, "x": 0, - "y": 32 + "y": 37 }, "targets": [ { @@ -3093,7 +3589,7 @@ data: }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3111,7 +3607,7 @@ data: "h": 7, "w": 8, "x": 8, - "y": 32 + "y": 37 }, "targets": [ { @@ -3137,7 +3633,7 @@ data: }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3155,7 +3651,7 @@ data: "h": 7, "w": 8, "x": 16, - "y": 32 + "y": 37 }, "targets": [ { @@ -3181,7 +3677,7 @@ data: }, "links": [ { - "title": "Open Atlas Network", + "title": "Open atlas-network dashboard", "url": "/d/atlas-network", "targetBlank": true } @@ -3199,7 +3695,7 @@ data: "h": 16, "w": 12, "x": 0, - "y": 71 + "y": 76 }, "targets": [ { @@ -3229,7 +3725,7 @@ data: "timeFrom": "30d", "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -3247,7 +3743,7 @@ data: "h": 16, "w": 12, "x": 12, - "y": 71 + "y": 76 }, "targets": [ { @@ -3277,7 +3773,7 @@ data: "timeFrom": "1w", "links": [ { - "title": "Open Atlas Storage", + "title": "Open atlas-storage dashboard", "url": "/d/atlas-storage", "targetBlank": true } @@ -3401,11 +3897,5 @@ data: "to": "now" }, "refresh": "1m", - "links": [ - { - "title": "Atlas Testing (Internal)", - "url": "/d/atlas-jobs", - "targetBlank": false - } - ] + "links": [] }