Prometheus to support input_number (#58964)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
This commit is contained in:
parent
8a8ffa1c08
commit
6af99882c5
2 changed files with 44 additions and 7 deletions
|
@ -1,4 +1,5 @@
|
|||
"""Support for Prometheus metrics export."""
|
||||
from contextlib import suppress
|
||||
import logging
|
||||
import string
|
||||
|
||||
|
@ -284,13 +285,24 @@ class PrometheusMetrics:
|
|||
metric.labels(**self._labels(state)).set(value)
|
||||
|
||||
def _handle_input_number(self, state):
|
||||
metric = self._metric(
|
||||
"input_number_state",
|
||||
self.prometheus_cli.Gauge,
|
||||
"State of the input number",
|
||||
)
|
||||
value = self.state_as_number(state)
|
||||
metric.labels(**self._labels(state)).set(value)
|
||||
if unit := self._unit_string(state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)):
|
||||
metric = self._metric(
|
||||
f"input_number_state_{unit}",
|
||||
self.prometheus_cli.Gauge,
|
||||
f"State of the input number measured in {unit}",
|
||||
)
|
||||
else:
|
||||
metric = self._metric(
|
||||
"input_number_state",
|
||||
self.prometheus_cli.Gauge,
|
||||
"State of the input number",
|
||||
)
|
||||
|
||||
with suppress(ValueError):
|
||||
value = self.state_as_number(state)
|
||||
if state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == TEMP_FAHRENHEIT:
|
||||
value = fahrenheit_to_celsius(value)
|
||||
metric.labels(**self._labels(state)).set(value)
|
||||
|
||||
def _handle_device_tracker(self, state):
|
||||
metric = self._metric(
|
||||
|
|
|
@ -20,6 +20,7 @@ from homeassistant.const import (
|
|||
DEGREE,
|
||||
ENERGY_KILO_WATT_HOUR,
|
||||
EVENT_STATE_CHANGED,
|
||||
TEMP_CELSIUS,
|
||||
TEMP_FAHRENHEIT,
|
||||
)
|
||||
from homeassistant.core import split_entity_id
|
||||
|
@ -201,6 +202,13 @@ async def test_sensor_unit(hass, hass_client):
|
|||
sensor5.entity_id = "sensor.sps30_pm_1um_weight_concentration"
|
||||
await sensor5.async_update_ha_state()
|
||||
|
||||
sensor6 = DemoSensor(
|
||||
None, "Target temperature", 22.7, None, None, TEMP_CELSIUS, None
|
||||
)
|
||||
sensor6.hass = hass
|
||||
sensor6.entity_id = "input_number.target_temperature"
|
||||
await sensor6.async_update_ha_state()
|
||||
|
||||
await hass.async_block_till_done()
|
||||
body = await generate_latest_metrics(client)
|
||||
|
||||
|
@ -228,6 +236,12 @@ async def test_sensor_unit(hass, hass_client):
|
|||
'friendly_name="SPS30 PM <1µm Weight concentration"} 3.7069' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'input_number_state_celsius{domain="input_number",'
|
||||
'entity="input_number.target_temperature",'
|
||||
'friendly_name="Target temperature"} 22.7' in body
|
||||
)
|
||||
|
||||
|
||||
async def test_sensor_without_unit(hass, hass_client):
|
||||
"""Test prometheus metrics for sensors without a unit."""
|
||||
|
@ -355,6 +369,11 @@ async def test_input_number(hass, hass_client):
|
|||
number2._attr_name = None
|
||||
await number2.async_update_ha_state()
|
||||
|
||||
number3 = DemoSensor(None, "Retry count", 5, None, None, None, None)
|
||||
number3.hass = hass
|
||||
number3.entity_id = "input_number.retry_count"
|
||||
await number3.async_update_ha_state()
|
||||
|
||||
await hass.async_block_till_done()
|
||||
body = await generate_latest_metrics(client)
|
||||
|
||||
|
@ -370,6 +389,12 @@ async def test_input_number(hass, hass_client):
|
|||
'friendly_name="None"} 60.0' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'input_number_state{domain="input_number",'
|
||||
'entity="input_number.retry_count",'
|
||||
'friendly_name="Retry count"} 5.0' in body
|
||||
)
|
||||
|
||||
|
||||
async def test_battery(hass, hass_client):
|
||||
"""Test prometheus metrics for battery."""
|
||||
|
|
Loading…
Add table
Reference in a new issue