monitoring(overview): dedupe typhon series and map fans by port

This commit is contained in:
Brad Stein 2026-04-14 00:31:38 -03:00
parent 6b75ae7dcc
commit 496f7a12dd
5 changed files with 102 additions and 99 deletions

View File

@ -689,7 +689,10 @@ ANANKE_UPS_DISCHARGE_RISK_TETHYS = ups_discharge_risk_expr(
ANANKE_UPS_THRESHOLD_TETHYS, ANANKE_UPS_THRESHOLD_TETHYS,
) )
CLIMATE_SENSOR_COUNT = "count(typhon_temperature_celsius) or on() vector(0)" CLIMATE_SENSOR_COUNT = "count(typhon_temperature_celsius) or on() vector(0)"
CLIMATE_DEDUP_LABELS = "job,instance,pod,service,endpoint,namespace" # Drop volatile labels so historical series stay merged when controller naming/group metadata changes.
CLIMATE_DEDUP_LABELS = (
"job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group"
)
CLIMATE_TEMP_SERIES = ( CLIMATE_TEMP_SERIES = (
f"max without ({CLIMATE_DEDUP_LABELS}) (typhon_temperature_celsius != 0)" f"max without ({CLIMATE_DEDUP_LABELS}) (typhon_temperature_celsius != 0)"
) )
@ -719,28 +722,28 @@ CLIMATE_PRESSURE_MAX_BOUND_SERIES = (
f"(max_over_time({CLIMATE_PRESSURE_SERIES}[$__range]) + 0.03)" f"(max_over_time({CLIMATE_PRESSURE_SERIES}[$__range]) + 0.03)"
) )
CLIMATE_FAN_OUTLET_CURRENT = ( CLIMATE_FAN_OUTLET_CURRENT = (
f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outlet"}})) or on() vector(0)' f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="1"}})) or on() vector(0)'
) )
CLIMATE_FAN_INSIDE_INLET_CURRENT = ( CLIMATE_FAN_INSIDE_INLET_CURRENT = (
f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="inside_inlet"}})) or on() vector(0)' f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="2"}})) or on() vector(0)'
) )
CLIMATE_FAN_OUTSIDE_INLET_CURRENT = ( CLIMATE_FAN_OUTSIDE_INLET_CURRENT = (
f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outside_inlet"}})) or on() vector(0)' f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="3"}})) or on() vector(0)'
) )
CLIMATE_FAN_INTERIOR_CURRENT = ( CLIMATE_FAN_INTERIOR_CURRENT = (
f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group=~"interior|unknown"}})) or on() vector(0)' f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="4"}})) or on() vector(0)'
) )
CLIMATE_FAN_OUTLET_SERIES = ( CLIMATE_FAN_OUTLET_SERIES = (
f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outlet"}})' f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="1"}})'
) )
CLIMATE_FAN_INSIDE_INLET_SERIES = ( CLIMATE_FAN_INSIDE_INLET_SERIES = (
f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="inside_inlet"}})' f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="2"}})'
) )
CLIMATE_FAN_OUTSIDE_INLET_SERIES = ( CLIMATE_FAN_OUTSIDE_INLET_SERIES = (
f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outside_inlet"}})' f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="3"}})'
) )
CLIMATE_FAN_INTERIOR_SERIES = ( CLIMATE_FAN_INTERIOR_SERIES = (
f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group=~"interior|unknown"}})' f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{port="4"}})'
) )
@ -768,8 +771,8 @@ CLIMATE_CURRENT_ROW_EXPR = " or ".join(
CLIMATE_FAN_CURRENT_ROW_EXPR = " or ".join( CLIMATE_FAN_CURRENT_ROW_EXPR = " or ".join(
[ [
with_metric_label(f"round({CLIMATE_FAN_OUTLET_CURRENT})", "Outlet"), with_metric_label(f"round({CLIMATE_FAN_OUTLET_CURRENT})", "Outlet"),
with_metric_label(f"round({CLIMATE_FAN_INSIDE_INLET_CURRENT})", "Inlet In"), with_metric_label(f"round({CLIMATE_FAN_INSIDE_INLET_CURRENT})", "Inlet - Inside"),
with_metric_label(f"round({CLIMATE_FAN_OUTSIDE_INLET_CURRENT})", "Inlet Out"), with_metric_label(f"round({CLIMATE_FAN_OUTSIDE_INLET_CURRENT})", "Inlet - Outside"),
with_metric_label(f"round({CLIMATE_FAN_INTERIOR_CURRENT})", "Interior"), with_metric_label(f"round({CLIMATE_FAN_INTERIOR_CURRENT})", "Interior"),
] ]
) )
@ -2171,8 +2174,8 @@ def build_overview():
}, },
field_overrides=[ field_overrides=[
{"matcher": {"id": "byName", "options": "Outlet"}, "properties": [{"id": "decimals", "value": 0}]}, {"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 - Inside"}, "properties": [{"id": "decimals", "value": 0}]},
{"matcher": {"id": "byName", "options": "Inlet Out"}, "properties": [{"id": "decimals", "value": 0}]}, {"matcher": {"id": "byName", "options": "Inlet - Outside"}, "properties": [{"id": "decimals", "value": 0}]},
{"matcher": {"id": "byName", "options": "Interior"}, "properties": [{"id": "decimals", "value": 0}]}, {"matcher": {"id": "byName", "options": "Interior"}, "properties": [{"id": "decimals", "value": 0}]},
], ],
links=link_to("atlas-power"), links=link_to("atlas-power"),
@ -2190,10 +2193,10 @@ def build_overview():
unit="none", unit="none",
max_value=10, max_value=10,
targets=[ targets=[
{"refId": "A", "expr": CLIMATE_FAN_OUTLET_SERIES, "legendFormat": "Inside Outlet"}, {"refId": "A", "expr": CLIMATE_FAN_OUTLET_SERIES, "legendFormat": "Outlet"},
{"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_SERIES, "legendFormat": "Inside Inlet"}, {"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_SERIES, "legendFormat": "Inlet - Inside"},
{"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Outside Inlet"}, {"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Inlet - Outside"},
{"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior Fans"}, {"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior"},
], ],
legend_display="table", legend_display="table",
legend_placement="right", legend_placement="right",
@ -4346,8 +4349,8 @@ def build_power_dashboard():
}, },
field_overrides=[ field_overrides=[
{"matcher": {"id": "byName", "options": "Outlet"}, "properties": [{"id": "decimals", "value": 0}]}, {"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 - Inside"}, "properties": [{"id": "decimals", "value": 0}]},
{"matcher": {"id": "byName", "options": "Inlet Out"}, "properties": [{"id": "decimals", "value": 0}]}, {"matcher": {"id": "byName", "options": "Inlet - Outside"}, "properties": [{"id": "decimals", "value": 0}]},
{"matcher": {"id": "byName", "options": "Interior"}, "properties": [{"id": "decimals", "value": 0}]}, {"matcher": {"id": "byName", "options": "Interior"}, "properties": [{"id": "decimals", "value": 0}]},
], ],
orientation="vertical", orientation="vertical",
@ -4364,10 +4367,10 @@ def build_power_dashboard():
unit="none", unit="none",
max_value=10, max_value=10,
targets=[ targets=[
{"refId": "A", "expr": CLIMATE_FAN_OUTLET_SERIES, "legendFormat": "Inside Outlet"}, {"refId": "A", "expr": CLIMATE_FAN_OUTLET_SERIES, "legendFormat": "Outlet"},
{"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_SERIES, "legendFormat": "Inside Inlet"}, {"refId": "B", "expr": CLIMATE_FAN_INSIDE_INLET_SERIES, "legendFormat": "Inlet - Inside"},
{"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Outside Inlet"}, {"refId": "C", "expr": CLIMATE_FAN_OUTSIDE_INLET_SERIES, "legendFormat": "Inlet - Outside"},
{"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior Fans"}, {"refId": "D", "expr": CLIMATE_FAN_INTERIOR_SERIES, "legendFormat": "Interior"},
], ],
legend_display="table", legend_display="table",
legend_placement="right", legend_placement="right",

View File

@ -1336,7 +1336,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) or on() vector(0), \"metric\", \"\u00b0C\", \"__name__\", \".*\") or label_replace(max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0), \"metric\", \"\u00b0F\", \"__name__\", \".*\")", "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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1430,7 +1430,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)) or on() vector(0), \"metric\", \"%RH\", \"__name__\", \".*\") or label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)) or on() vector(0), \"metric\", \"kPa\", \"__name__\", \".*\")", "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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1525,47 +1525,47 @@
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)",
"legendFormat": "C" "legendFormat": "C"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
"legendFormat": "RH" "legendFormat": "RH"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)",
"legendFormat": "P" "legendFormat": "P"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "(min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)[$__range]) - 0.08)", "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" "legendFormat": "C bound min"
}, },
{ {
"refId": "E", "refId": "E",
"expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)[$__range]) + 0.08)", "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" "legendFormat": "C bound max"
}, },
{ {
"refId": "F", "refId": "F",
"expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)[$__range]) - 0.35), 0)", "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" "legendFormat": "RH bound min"
}, },
{ {
"refId": "G", "refId": "G",
"expr": "clamp_max((max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)[$__range]) + 0.35), 100)", "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" "legendFormat": "RH bound max"
}, },
{ {
"refId": "H", "refId": "H",
"expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)[$__range]) - 0.03), 0)", "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" "legendFormat": "P bound min"
}, },
{ {
"refId": "I", "refId": "I",
"expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)[$__range]) + 0.03)", "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" "legendFormat": "P bound max"
} }
], ],
@ -1831,7 +1831,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "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 - Inside\", \"__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 - Outside\", \"__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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1882,7 +1882,7 @@
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet In" "options": "Inlet - Inside"
}, },
"properties": [ "properties": [
{ {
@ -1894,7 +1894,7 @@
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet Out" "options": "Inlet - Outside"
}, },
"properties": [ "properties": [
{ {
@ -1960,23 +1960,23 @@
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})",
"legendFormat": "Inside Outlet" "legendFormat": "Outlet"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})",
"legendFormat": "Inside Inlet" "legendFormat": "Inlet - Inside"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})",
"legendFormat": "Outside Inlet" "legendFormat": "Inlet - Outside"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})",
"legendFormat": "Interior Fans" "legendFormat": "Interior"
} }
], ],
"fieldConfig": { "fieldConfig": {

View File

@ -163,7 +163,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) or on() vector(0)), \"metric\", \"Temp \u00b0C\", \"__name__\", \".*\") or label_replace((max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0)), \"metric\", \"Temp \u00b0F\", \"__name__\", \".*\") or label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)) or on() vector(0)), \"metric\", \"Humidity\", \"__name__\", \".*\") or label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)) or on() vector(0)), \"metric\", \"Pressure\", \"__name__\", \".*\")", "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\", \"Temp \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\", \"Temp \u00b0F\", \"__name__\", \".*\") or 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\", \"Humidity\", \"__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\", \"Pressure\", \"__name__\", \".*\")",
"refId": "A", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -283,22 +283,22 @@
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)",
"legendFormat": "Temperature (\u00b0C)" "legendFormat": "Temperature (\u00b0C)"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32", "expr": "(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) * 9 / 5 + 32",
"legendFormat": "Temperature (\u00b0F)" "legendFormat": "Temperature (\u00b0F)"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
"legendFormat": "Humidity (%)" "legendFormat": "Humidity (%)"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)",
"legendFormat": "Pressure (VPD kPa)" "legendFormat": "Pressure (VPD kPa)"
} }
], ],
@ -424,7 +424,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "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 - Inside\", \"__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 - Outside\", \"__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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -475,7 +475,7 @@
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet In" "options": "Inlet - Inside"
}, },
"properties": [ "properties": [
{ {
@ -487,7 +487,7 @@
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet Out" "options": "Inlet - Outside"
}, },
"properties": [ "properties": [
{ {
@ -544,23 +544,23 @@
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})",
"legendFormat": "Inside Outlet" "legendFormat": "Outlet"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})",
"legendFormat": "Inside Inlet" "legendFormat": "Inlet - Inside"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})",
"legendFormat": "Outside Inlet" "legendFormat": "Inlet - Outside"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})",
"legendFormat": "Interior Fans" "legendFormat": "Interior"
} }
], ],
"fieldConfig": { "fieldConfig": {

View File

@ -1345,7 +1345,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) or on() vector(0), \"metric\", \"\u00b0C\", \"__name__\", \".*\") or label_replace(max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0), \"metric\", \"\u00b0F\", \"__name__\", \".*\")", "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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1439,7 +1439,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)) or on() vector(0), \"metric\", \"%RH\", \"__name__\", \".*\") or label_replace(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)) or on() vector(0), \"metric\", \"kPa\", \"__name__\", \".*\")", "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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1534,47 +1534,47 @@ data:
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)",
"legendFormat": "C" "legendFormat": "C"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
"legendFormat": "RH" "legendFormat": "RH"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)",
"legendFormat": "P" "legendFormat": "P"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "(min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)[$__range]) - 0.08)", "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" "legendFormat": "C bound min"
}, },
{ {
"refId": "E", "refId": "E",
"expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)[$__range]) + 0.08)", "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" "legendFormat": "C bound max"
}, },
{ {
"refId": "F", "refId": "F",
"expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)[$__range]) - 0.35), 0)", "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" "legendFormat": "RH bound min"
}, },
{ {
"refId": "G", "refId": "G",
"expr": "clamp_max((max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)[$__range]) + 0.35), 100)", "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" "legendFormat": "RH bound max"
}, },
{ {
"refId": "H", "refId": "H",
"expr": "clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)[$__range]) - 0.03), 0)", "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" "legendFormat": "P bound min"
}, },
{ {
"refId": "I", "refId": "I",
"expr": "(max_over_time(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)[$__range]) + 0.03)", "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" "legendFormat": "P bound max"
} }
], ],
@ -1840,7 +1840,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "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 - Inside\", \"__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 - Outside\", \"__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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -1891,7 +1891,7 @@ data:
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet In" "options": "Inlet - Inside"
}, },
"properties": [ "properties": [
{ {
@ -1903,7 +1903,7 @@ data:
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet Out" "options": "Inlet - Outside"
}, },
"properties": [ "properties": [
{ {
@ -1969,23 +1969,23 @@ data:
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})",
"legendFormat": "Inside Outlet" "legendFormat": "Outlet"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})",
"legendFormat": "Inside Inlet" "legendFormat": "Inlet - Inside"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})",
"legendFormat": "Outside Inlet" "legendFormat": "Inlet - Outside"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})",
"legendFormat": "Interior Fans" "legendFormat": "Interior"
} }
], ],
"fieldConfig": { "fieldConfig": {

View File

@ -172,7 +172,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) or on() vector(0)), \"metric\", \"Temp \u00b0C\", \"__name__\", \".*\") or label_replace((max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0)), \"metric\", \"Temp \u00b0F\", \"__name__\", \".*\") or label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)) or on() vector(0)), \"metric\", \"Humidity\", \"__name__\", \".*\") or label_replace((max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)) or on() vector(0)), \"metric\", \"Pressure\", \"__name__\", \".*\")", "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\", \"Temp \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\", \"Temp \u00b0F\", \"__name__\", \".*\") or 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\", \"Humidity\", \"__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\", \"Pressure\", \"__name__\", \".*\")",
"refId": "A", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -292,22 +292,22 @@ data:
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)",
"legendFormat": "Temperature (\u00b0C)" "legendFormat": "Temperature (\u00b0C)"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius != 0)) * 9 / 5 + 32", "expr": "(max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_temperature_celsius != 0)) * 9 / 5 + 32",
"legendFormat": "Temperature (\u00b0F)" "legendFormat": "Temperature (\u00b0F)"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
"legendFormat": "Humidity (%)" "legendFormat": "Humidity (%)"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa != 0)", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_vpd_kpa != 0)",
"legendFormat": "Pressure (VPD kPa)" "legendFormat": "Pressure (VPD kPa)"
} }
], ],
@ -433,7 +433,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})) or on() vector(0))), \"metric\", \"Outlet\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet In\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})) or on() vector(0))), \"metric\", \"Inlet Out\", \"__name__\", \".*\") or label_replace((round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))), \"metric\", \"Interior\", \"__name__\", \".*\")", "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 - Inside\", \"__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 - Outside\", \"__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", "refId": "A",
"legendFormat": "{{metric}}", "legendFormat": "{{metric}}",
"instant": true "instant": true
@ -484,7 +484,7 @@ data:
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet In" "options": "Inlet - Inside"
}, },
"properties": [ "properties": [
{ {
@ -496,7 +496,7 @@ data:
{ {
"matcher": { "matcher": {
"id": "byName", "id": "byName",
"options": "Inlet Out" "options": "Inlet - Outside"
}, },
"properties": [ "properties": [
{ {
@ -553,23 +553,23 @@ data:
"targets": [ "targets": [
{ {
"refId": "A", "refId": "A",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"})",
"legendFormat": "Inside Outlet" "legendFormat": "Outlet"
}, },
{ {
"refId": "B", "refId": "B",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"})",
"legendFormat": "Inside Inlet" "legendFormat": "Inlet - Inside"
}, },
{ {
"refId": "C", "refId": "C",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"})",
"legendFormat": "Outside Inlet" "legendFormat": "Inlet - Outside"
}, },
{ {
"refId": "D", "refId": "D",
"expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "expr": "max without (job,instance,pod,service,endpoint,namespace,controller_name,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"})",
"legendFormat": "Interior Fans" "legendFormat": "Interior"
} }
], ],
"fieldConfig": { "fieldConfig": {