diff --git a/scripts/dashboards_render_atlas.py b/scripts/dashboards_render_atlas.py index a6fe0ae0..e0ae6f18 100644 --- a/scripts/dashboards_render_atlas.py +++ b/scripts/dashboards_render_atlas.py @@ -543,48 +543,44 @@ ANANKE_UPS_LOAD_BY_SOURCE = f"ananke_ups_load_percent{{{ANANKE_SELECTOR}}}" ANANKE_UPS_CHARGE_BY_SOURCE = f"ananke_ups_battery_charge_percent{{{ANANKE_SELECTOR}}}" ANANKE_UPS_TRIGGER_BY_SOURCE = f"ananke_ups_trigger_active{{{ANANKE_SELECTOR}}}" CLIMATE_SENSOR_COUNT = "count(typhon_temperature_celsius) or on() vector(0)" -CLIMATE_TEMP_MAX = "max(typhon_temperature_celsius) or on() vector(0)" -CLIMATE_PRESSURE_CURRENT = "max(typhon_vpd_kpa) or on() vector(0)" -CLIMATE_HUMIDITY_MAX = "max(typhon_relative_humidity_percent) or on() vector(0)" -CLIMATE_TEMP_SERIES = "typhon_temperature_celsius" -CLIMATE_PRESSURE_SERIES = "typhon_vpd_kpa" -CLIMATE_HUMIDITY_SERIES = "typhon_relative_humidity_percent" -CLIMATE_DEW_POINT_CURRENT = ( - "(243.5 * (ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) " - "+ ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius))))) " - "/ (17.67 - ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) " - "- ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius)))) " - "or on() vector(0)" +CLIMATE_DEDUP_LABELS = "job,instance,pod,service,endpoint,namespace" +CLIMATE_TEMP_SERIES = ( + f"max without ({CLIMATE_DEDUP_LABELS}) (typhon_temperature_celsius)" ) -CLIMATE_DEW_POINT_SERIES = ( - "(243.5 * (ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) " - "+ ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))) " - "/ (17.67 - ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) " - "- ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))" +CLIMATE_TEMP_FAHRENHEIT_SERIES = f"({CLIMATE_TEMP_SERIES}) * 9 / 5 + 32" +CLIMATE_PRESSURE_SERIES = ( + f"max without ({CLIMATE_DEDUP_LABELS}) (typhon_vpd_kpa)" ) +CLIMATE_HUMIDITY_SERIES = ( + f"max without ({CLIMATE_DEDUP_LABELS}) (typhon_relative_humidity_percent)" +) +CLIMATE_TEMP_MAX = f"max({CLIMATE_TEMP_SERIES}) or on() vector(0)" +CLIMATE_TEMP_FAHRENHEIT_MAX = f"max({CLIMATE_TEMP_FAHRENHEIT_SERIES}) or on() vector(0)" +CLIMATE_PRESSURE_CURRENT = f"max({CLIMATE_PRESSURE_SERIES}) or on() vector(0)" +CLIMATE_HUMIDITY_MAX = f"max({CLIMATE_HUMIDITY_SERIES}) or on() vector(0)" CLIMATE_FAN_OUTLET_CURRENT = ( - 'max(typhon_fan_speed_level{fan_group="outlet"}) or on() vector(0)' + f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outlet"}})) or on() vector(0)' ) CLIMATE_FAN_INSIDE_INLET_CURRENT = ( - 'max(typhon_fan_speed_level{fan_group="inside_inlet"}) or on() vector(0)' + f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="inside_inlet"}})) or on() vector(0)' ) CLIMATE_FAN_OUTSIDE_INLET_CURRENT = ( - 'max(typhon_fan_speed_level{fan_group="outside_inlet"}) or on() vector(0)' + f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outside_inlet"}})) or on() vector(0)' ) CLIMATE_FAN_INTERIOR_CURRENT = ( - 'max(typhon_fan_speed_level{fan_group=~"interior|unknown"}) or on() vector(0)' + f'max(max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group=~"interior|unknown"}})) or on() vector(0)' ) CLIMATE_FAN_OUTLET_SERIES = ( - 'typhon_fan_speed_level{fan_group="outlet"}' + f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outlet"}})' ) CLIMATE_FAN_INSIDE_INLET_SERIES = ( - 'typhon_fan_speed_level{fan_group="inside_inlet"}' + f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="inside_inlet"}})' ) CLIMATE_FAN_OUTSIDE_INLET_SERIES = ( - 'typhon_fan_speed_level{fan_group="outside_inlet"}' + f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group="outside_inlet"}})' ) CLIMATE_FAN_INTERIOR_SERIES = ( - 'typhon_fan_speed_level{fan_group=~"interior|unknown"}' + f'max without ({CLIMATE_DEDUP_LABELS}) (typhon_fan_speed_level{{fan_group=~"interior|unknown"}})' ) POSTGRES_CONN_USED = ( 'label_replace(sum(pg_stat_activity_count), "conn", "used", "__name__", ".*") ' @@ -1382,18 +1378,18 @@ def build_overview(): text_mode="value", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True}, - {"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent VPD (kPa)", "instant": True}, + {"refId": "B", "expr": CLIMATE_TEMP_FAHRENHEIT_MAX, "legendFormat": "Tent Temp (°F)", "instant": True}, {"refId": "C", "expr": CLIMATE_HUMIDITY_MAX, "legendFormat": "Tent RH (%)", "instant": True}, - {"refId": "D", "expr": CLIMATE_DEW_POINT_CURRENT, "legendFormat": "Dew Point (°C)", "instant": True}, + {"refId": "D", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent Pressure (VPD kPa)", "instant": True}, ], field_overrides=[ {"matcher": {"id": "byName", "options": "Tent Temp (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]}, - {"matcher": {"id": "byName", "options": "Tent VPD (kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]}, + {"matcher": {"id": "byName", "options": "Tent Temp (°F)"}, "properties": [{"id": "unit", "value": "fahrenheit"}]}, {"matcher": {"id": "byName", "options": "Tent RH (%)"}, "properties": [{"id": "unit", "value": "percent"}]}, - {"matcher": {"id": "byName", "options": "Dew Point (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]}, + {"matcher": {"id": "byName", "options": "Tent Pressure (VPD kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]}, ], links=link_to("atlas-power"), - description="Current tent temperature, VPD, humidity, and dew point.", + description="Current tent temperature in C/F, humidity, and pressure proxy (VPD in kPa).", orientation="vertical", wide_layout=False, ) @@ -1407,23 +1403,29 @@ def build_overview(): unit="celsius", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"}, - {"refId": "B", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"}, - {"refId": "C", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "VPD (kPa)"}, - {"refId": "D", "expr": CLIMATE_DEW_POINT_SERIES, "legendFormat": "Dew Point (°C)"}, + {"refId": "B", "expr": CLIMATE_TEMP_FAHRENHEIT_SERIES, "legendFormat": "Temperature (°F)"}, + {"refId": "C", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"}, + {"refId": "D", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "Pressure (VPD kPa)"}, ], field_overrides=[ + { + "matcher": {"id": "byName", "options": "Temperature (°F)"}, + "properties": [ + {"id": "unit", "value": "fahrenheit"}, + ], + }, { "matcher": {"id": "byName", "options": "Humidity (%)"}, "properties": [ {"id": "unit", "value": "percent"}, + {"id": "custom.axisPlacement", "value": "right"}, ], }, { - "matcher": {"id": "byName", "options": "VPD (kPa)"}, + "matcher": {"id": "byName", "options": "Pressure (VPD kPa)"}, "properties": [ - {"id": "unit", "value": "none"}, + {"id": "unit", "value": "suffix:kPa"}, {"id": "custom.axisPlacement", "value": "right"}, - {"id": "custom.axisLabel", "value": "kPa"}, {"id": "decimals", "value": 2}, ], } @@ -1431,6 +1433,7 @@ def build_overview(): legend_display="list", legend_placement="bottom", links=link_to("atlas-power"), + description="Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa).", ) ) panels.append( @@ -3175,17 +3178,17 @@ def build_power_dashboard(): text_mode="name_and_value", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_MAX, "legendFormat": "Tent Temp (°C)", "instant": True}, - {"refId": "B", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent VPD (kPa)", "instant": True}, + {"refId": "B", "expr": CLIMATE_TEMP_FAHRENHEIT_MAX, "legendFormat": "Tent Temp (°F)", "instant": True}, {"refId": "C", "expr": CLIMATE_HUMIDITY_MAX, "legendFormat": "Tent RH (%)", "instant": True}, - {"refId": "D", "expr": CLIMATE_DEW_POINT_CURRENT, "legendFormat": "Dew Point (°C)", "instant": True}, + {"refId": "D", "expr": CLIMATE_PRESSURE_CURRENT, "legendFormat": "Tent Pressure (VPD kPa)", "instant": True}, ], field_overrides=[ {"matcher": {"id": "byName", "options": "Tent Temp (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]}, - {"matcher": {"id": "byName", "options": "Tent VPD (kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]}, + {"matcher": {"id": "byName", "options": "Tent Temp (°F)"}, "properties": [{"id": "unit", "value": "fahrenheit"}]}, {"matcher": {"id": "byName", "options": "Tent RH (%)"}, "properties": [{"id": "unit", "value": "percent"}]}, - {"matcher": {"id": "byName", "options": "Dew Point (°C)"}, "properties": [{"id": "unit", "value": "celsius"}]}, + {"matcher": {"id": "byName", "options": "Tent Pressure (VPD kPa)"}, "properties": [{"id": "unit", "value": "suffix:kPa"}]}, ], - description="Current tent temperature, VPD, humidity, and dew point. These render once climate telemetry is online.", + description="Current tent temperature in C/F, humidity, and pressure proxy (VPD kPa).", ) ) panels.append( @@ -3197,30 +3200,36 @@ def build_power_dashboard(): unit="celsius", targets=[ {"refId": "A", "expr": CLIMATE_TEMP_SERIES, "legendFormat": "Temperature (°C)"}, - {"refId": "B", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"}, - {"refId": "C", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "VPD (kPa)"}, - {"refId": "D", "expr": CLIMATE_DEW_POINT_SERIES, "legendFormat": "Dew Point (°C)"}, + {"refId": "B", "expr": CLIMATE_TEMP_FAHRENHEIT_SERIES, "legendFormat": "Temperature (°F)"}, + {"refId": "C", "expr": CLIMATE_HUMIDITY_SERIES, "legendFormat": "Humidity (%)"}, + {"refId": "D", "expr": CLIMATE_PRESSURE_SERIES, "legendFormat": "Pressure (VPD kPa)"}, ], field_overrides=[ + { + "matcher": {"id": "byName", "options": "Temperature (°F)"}, + "properties": [ + {"id": "unit", "value": "fahrenheit"}, + ], + }, { "matcher": {"id": "byName", "options": "Humidity (%)"}, "properties": [ {"id": "unit", "value": "percent"}, + {"id": "custom.axisPlacement", "value": "right"}, ], }, { - "matcher": {"id": "byName", "options": "VPD (kPa)"}, + "matcher": {"id": "byName", "options": "Pressure (VPD kPa)"}, "properties": [ - {"id": "unit", "value": "none"}, + {"id": "unit", "value": "suffix:kPa"}, {"id": "custom.axisPlacement", "value": "right"}, - {"id": "custom.axisLabel", "value": "kPa"}, {"id": "decimals", "value": 2}, ], } ], legend_display="table", legend_placement="right", - description="Two-axis chart: temperature/humidity/dew point (left axis) and VPD in kPa (right axis).", + description="Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa).", ) ) panels.append( diff --git a/services/monitoring/dashboards/atlas-overview.json b/services/monitoring/dashboards/atlas-overview.json index 9d3d9ccb..7b860e4e 100644 --- a/services/monitoring/dashboards/atlas-overview.json +++ b/services/monitoring/dashboards/atlas-overview.json @@ -1363,26 +1363,26 @@ "targets": [ { "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (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)", + "expr": "max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0F)", "instant": true }, { "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)) or on() vector(0)", "legendFormat": "Tent RH (%)", "instant": true }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) + ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius))))) / (17.67 - ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) - ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)) or on() vector(0)", + "legendFormat": "Tent Pressure (VPD kPa)", "instant": true } ], @@ -1427,12 +1427,12 @@ { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "Tent Temp (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" + "value": "fahrenheit" } ] }, @@ -1451,12 +1451,12 @@ { "matcher": { "id": "byName", - "options": "Dew Point (\u00b0C)" + "options": "Tent Pressure (VPD kPa)" }, "properties": [ { "id": "unit", - "value": "celsius" + "value": "suffix:kPa" } ] } @@ -1484,7 +1484,7 @@ "targetBlank": true } ], - "description": "Current tent temperature, VPD, humidity, and dew point." + "description": "Current tent temperature in C/F, humidity, and pressure proxy (VPD in kPa)." }, { "id": 43, @@ -1503,23 +1503,23 @@ "targets": [ { "refId": "A", - "expr": "typhon_temperature_celsius", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)", "legendFormat": "Temperature (\u00b0C)" }, { "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" + "expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32", + "legendFormat": "Temperature (\u00b0F)" }, { "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)", + "legendFormat": "Humidity (%)" }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) + ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))) / (17.67 - ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) - ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)", + "legendFormat": "Pressure (VPD kPa)" } ], "fieldConfig": { @@ -1530,32 +1530,44 @@ { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "Temperature (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "fahrenheit" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "Humidity (%)" }, "properties": [ { "id": "unit", - "value": "none" + "value": "percent" }, { "id": "custom.axisPlacement", "value": "right" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pressure (VPD kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", @@ -1580,7 +1592,8 @@ "url": "/d/atlas-power", "targetBlank": true } - ] + ], + "description": "Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa)." }, { "id": 140, @@ -1599,25 +1612,25 @@ "targets": [ { "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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|unknown\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))", "legendFormat": "Interior Fans", "instant": true } @@ -1691,22 +1704,22 @@ "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "legendFormat": "Inside Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "legendFormat": "Inside Inlet" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "legendFormat": "Outside Inlet" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=~\"interior|unknown\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "legendFormat": "Interior Fans" } ], diff --git a/services/monitoring/dashboards/atlas-power.json b/services/monitoring/dashboards/atlas-power.json index 96752ba7..5b8e7179 100644 --- a/services/monitoring/dashboards/atlas-power.json +++ b/services/monitoring/dashboards/atlas-power.json @@ -284,26 +284,26 @@ "targets": [ { "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (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)", + "expr": "max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0F)", "instant": true }, { "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)) or on() vector(0)", "legendFormat": "Tent RH (%)", "instant": true }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) + ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius))))) / (17.67 - ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) - ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)) or on() vector(0)", + "legendFormat": "Tent Pressure (VPD kPa)", "instant": true } ], @@ -348,12 +348,12 @@ { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "Tent Temp (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" + "value": "fahrenheit" } ] }, @@ -372,12 +372,12 @@ { "matcher": { "id": "byName", - "options": "Dew Point (\u00b0C)" + "options": "Tent Pressure (VPD kPa)" }, "properties": [ { "id": "unit", - "value": "celsius" + "value": "suffix:kPa" } ] } @@ -396,7 +396,7 @@ }, "textMode": "name_and_value" }, - "description": "Current tent temperature, VPD, humidity, and dew point. These render once climate telemetry is online." + "description": "Current tent temperature in C/F, humidity, and pressure proxy (VPD kPa)." }, { "id": 4, @@ -415,23 +415,23 @@ "targets": [ { "refId": "A", - "expr": "typhon_temperature_celsius", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)", "legendFormat": "Temperature (\u00b0C)" }, { "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" + "expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32", + "legendFormat": "Temperature (\u00b0F)" }, { "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)", + "legendFormat": "Humidity (%)" }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) + ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))) / (17.67 - ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) - ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)", + "legendFormat": "Pressure (VPD kPa)" } ], "fieldConfig": { @@ -442,32 +442,44 @@ { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "Temperature (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "fahrenheit" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "Humidity (%)" }, "properties": [ { "id": "unit", - "value": "none" + "value": "percent" }, { "id": "custom.axisPlacement", "value": "right" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pressure (VPD kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", @@ -486,7 +498,7 @@ "mode": "multi" } }, - "description": "Two-axis chart: temperature/humidity/dew point (left axis) and VPD in kPa (right axis)." + "description": "Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa)." }, { "id": 5, @@ -505,25 +517,25 @@ "targets": [ { "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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|unknown\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))", "legendFormat": "Interior Fans", "instant": true } @@ -591,22 +603,22 @@ "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "legendFormat": "Inside Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "legendFormat": "Inside Inlet" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "legendFormat": "Outside Inlet" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=~\"interior|unknown\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "legendFormat": "Interior Fans" } ], diff --git a/services/monitoring/grafana-dashboard-overview.yaml b/services/monitoring/grafana-dashboard-overview.yaml index b9af6fbf..d1e7264e 100644 --- a/services/monitoring/grafana-dashboard-overview.yaml +++ b/services/monitoring/grafana-dashboard-overview.yaml @@ -1372,26 +1372,26 @@ data: "targets": [ { "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (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)", + "expr": "max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0F)", "instant": true }, { "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)) or on() vector(0)", "legendFormat": "Tent RH (%)", "instant": true }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) + ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius))))) / (17.67 - ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) - ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)) or on() vector(0)", + "legendFormat": "Tent Pressure (VPD kPa)", "instant": true } ], @@ -1436,12 +1436,12 @@ data: { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "Tent Temp (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" + "value": "fahrenheit" } ] }, @@ -1460,12 +1460,12 @@ data: { "matcher": { "id": "byName", - "options": "Dew Point (\u00b0C)" + "options": "Tent Pressure (VPD kPa)" }, "properties": [ { "id": "unit", - "value": "celsius" + "value": "suffix:kPa" } ] } @@ -1493,7 +1493,7 @@ data: "targetBlank": true } ], - "description": "Current tent temperature, VPD, humidity, and dew point." + "description": "Current tent temperature in C/F, humidity, and pressure proxy (VPD in kPa)." }, { "id": 43, @@ -1512,23 +1512,23 @@ data: "targets": [ { "refId": "A", - "expr": "typhon_temperature_celsius", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)", "legendFormat": "Temperature (\u00b0C)" }, { "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" + "expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32", + "legendFormat": "Temperature (\u00b0F)" }, { "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)", + "legendFormat": "Humidity (%)" }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) + ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))) / (17.67 - ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) - ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)", + "legendFormat": "Pressure (VPD kPa)" } ], "fieldConfig": { @@ -1539,32 +1539,44 @@ data: { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "Temperature (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "fahrenheit" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "Humidity (%)" }, "properties": [ { "id": "unit", - "value": "none" + "value": "percent" }, { "id": "custom.axisPlacement", "value": "right" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pressure (VPD kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", @@ -1589,7 +1601,8 @@ data: "url": "/d/atlas-power", "targetBlank": true } - ] + ], + "description": "Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa)." }, { "id": 140, @@ -1608,25 +1621,25 @@ data: "targets": [ { "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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|unknown\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))", "legendFormat": "Interior Fans", "instant": true } @@ -1700,22 +1713,22 @@ data: "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "legendFormat": "Inside Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "legendFormat": "Inside Inlet" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "legendFormat": "Outside Inlet" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=~\"interior|unknown\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "legendFormat": "Interior Fans" } ], diff --git a/services/monitoring/grafana-dashboard-power.yaml b/services/monitoring/grafana-dashboard-power.yaml index 617e2535..3c64eae5 100644 --- a/services/monitoring/grafana-dashboard-power.yaml +++ b/services/monitoring/grafana-dashboard-power.yaml @@ -293,26 +293,26 @@ data: "targets": [ { "refId": "A", - "expr": "max(typhon_temperature_celsius) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (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)", + "expr": "max((max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32) or on() vector(0)", + "legendFormat": "Tent Temp (\u00b0F)", "instant": true }, { "refId": "C", - "expr": "max(typhon_relative_humidity_percent) or on() vector(0)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)) or on() vector(0)", "legendFormat": "Tent RH (%)", "instant": true }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) + ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius))))) / (17.67 - ln(clamp_min(max(typhon_relative_humidity_percent) / 100, 0.01)) - ((17.67 * max(typhon_temperature_celsius)) / (243.5 + max(typhon_temperature_celsius)))) or on() vector(0)", - "legendFormat": "Dew Point (\u00b0C)", + "expr": "max(max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)) or on() vector(0)", + "legendFormat": "Tent Pressure (VPD kPa)", "instant": true } ], @@ -357,12 +357,12 @@ data: { "matcher": { "id": "byName", - "options": "Tent VPD (kPa)" + "options": "Tent Temp (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "suffix:kPa" + "value": "fahrenheit" } ] }, @@ -381,12 +381,12 @@ data: { "matcher": { "id": "byName", - "options": "Dew Point (\u00b0C)" + "options": "Tent Pressure (VPD kPa)" }, "properties": [ { "id": "unit", - "value": "celsius" + "value": "suffix:kPa" } ] } @@ -405,7 +405,7 @@ data: }, "textMode": "name_and_value" }, - "description": "Current tent temperature, VPD, humidity, and dew point. These render once climate telemetry is online." + "description": "Current tent temperature in C/F, humidity, and pressure proxy (VPD kPa)." }, { "id": 4, @@ -424,23 +424,23 @@ data: "targets": [ { "refId": "A", - "expr": "typhon_temperature_celsius", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)", "legendFormat": "Temperature (\u00b0C)" }, { "refId": "B", - "expr": "typhon_relative_humidity_percent", - "legendFormat": "Humidity (%)" + "expr": "(max without (job,instance,pod,service,endpoint,namespace) (typhon_temperature_celsius)) * 9 / 5 + 32", + "legendFormat": "Temperature (\u00b0F)" }, { "refId": "C", - "expr": "typhon_vpd_kpa", - "legendFormat": "VPD (kPa)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_relative_humidity_percent)", + "legendFormat": "Humidity (%)" }, { "refId": "D", - "expr": "(243.5 * (ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) + ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))) / (17.67 - ln(clamp_min(typhon_relative_humidity_percent / 100, 0.01)) - ((17.67 * typhon_temperature_celsius) / (243.5 + typhon_temperature_celsius)))", - "legendFormat": "Dew Point (\u00b0C)" + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_vpd_kpa)", + "legendFormat": "Pressure (VPD kPa)" } ], "fieldConfig": { @@ -451,32 +451,44 @@ data: { "matcher": { "id": "byName", - "options": "Humidity (%)" + "options": "Temperature (\u00b0F)" }, "properties": [ { "id": "unit", - "value": "percent" + "value": "fahrenheit" } ] }, { "matcher": { "id": "byName", - "options": "VPD (kPa)" + "options": "Humidity (%)" }, "properties": [ { "id": "unit", - "value": "none" + "value": "percent" }, { "id": "custom.axisPlacement", "value": "right" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pressure (VPD kPa)" + }, + "properties": [ + { + "id": "unit", + "value": "suffix:kPa" }, { - "id": "custom.axisLabel", - "value": "kPa" + "id": "custom.axisPlacement", + "value": "right" }, { "id": "decimals", @@ -495,7 +507,7 @@ data: "mode": "multi" } }, - "description": "Two-axis chart: temperature/humidity/dew point (left axis) and VPD in kPa (right axis)." + "description": "Historical tent temperature (C/F), humidity, and pressure proxy (VPD kPa)." }, { "id": 5, @@ -514,25 +526,25 @@ data: "targets": [ { "refId": "A", - "expr": "round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (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|unknown\"}) or on() vector(0))", + "expr": "round(max(max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})) or on() vector(0))", "legendFormat": "Interior Fans", "instant": true } @@ -600,22 +612,22 @@ data: "targets": [ { "refId": "A", - "expr": "typhon_fan_speed_level{fan_group=\"outlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outlet\"})", "legendFormat": "Inside Outlet" }, { "refId": "B", - "expr": "typhon_fan_speed_level{fan_group=\"inside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})", "legendFormat": "Inside Inlet" }, { "refId": "C", - "expr": "typhon_fan_speed_level{fan_group=\"outside_inlet\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})", "legendFormat": "Outside Inlet" }, { "refId": "D", - "expr": "typhon_fan_speed_level{fan_group=~\"interior|unknown\"}", + "expr": "max without (job,instance,pod,service,endpoint,namespace) (typhon_fan_speed_level{fan_group=~\"interior|unknown\"})", "legendFormat": "Interior Fans" } ],