mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Add number
state to prometheus metrics (#102518)
This commit is contained in:
parent
ba3269540f
commit
1e57bc5415
@ -353,18 +353,18 @@ class PrometheusMetrics:
|
|||||||
value = self.state_as_number(state)
|
value = self.state_as_number(state)
|
||||||
metric.labels(**self._labels(state)).set(value)
|
metric.labels(**self._labels(state)).set(value)
|
||||||
|
|
||||||
def _handle_input_number(self, state):
|
def _numeric_handler(self, state, domain, title):
|
||||||
if unit := self._unit_string(state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)):
|
if unit := self._unit_string(state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)):
|
||||||
metric = self._metric(
|
metric = self._metric(
|
||||||
f"input_number_state_{unit}",
|
f"{domain}_state_{unit}",
|
||||||
self.prometheus_cli.Gauge,
|
self.prometheus_cli.Gauge,
|
||||||
f"State of the input number measured in {unit}",
|
f"State of the {title} measured in {unit}",
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
metric = self._metric(
|
metric = self._metric(
|
||||||
"input_number_state",
|
f"{domain}_state",
|
||||||
self.prometheus_cli.Gauge,
|
self.prometheus_cli.Gauge,
|
||||||
"State of the input number",
|
f"State of the {title}",
|
||||||
)
|
)
|
||||||
|
|
||||||
with suppress(ValueError):
|
with suppress(ValueError):
|
||||||
@ -378,6 +378,12 @@ class PrometheusMetrics:
|
|||||||
)
|
)
|
||||||
metric.labels(**self._labels(state)).set(value)
|
metric.labels(**self._labels(state)).set(value)
|
||||||
|
|
||||||
|
def _handle_input_number(self, state):
|
||||||
|
self._numeric_handler(state, "input_number", "input number")
|
||||||
|
|
||||||
|
def _handle_number(self, state):
|
||||||
|
self._numeric_handler(state, "number", "number")
|
||||||
|
|
||||||
def _handle_device_tracker(self, state):
|
def _handle_device_tracker(self, state):
|
||||||
metric = self._metric(
|
metric = self._metric(
|
||||||
"device_tracker_state",
|
"device_tracker_state",
|
||||||
|
@ -20,6 +20,7 @@ from homeassistant.components import (
|
|||||||
input_number,
|
input_number,
|
||||||
light,
|
light,
|
||||||
lock,
|
lock,
|
||||||
|
number,
|
||||||
person,
|
person,
|
||||||
prometheus,
|
prometheus,
|
||||||
sensor,
|
sensor,
|
||||||
@ -292,6 +293,30 @@ async def test_input_number(client, input_number_entities) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("namespace", [""])
|
||||||
|
async def test_number(client, number_entities) -> None:
|
||||||
|
"""Test prometheus metrics for number."""
|
||||||
|
body = await generate_latest_metrics(client)
|
||||||
|
|
||||||
|
assert (
|
||||||
|
'number_state{domain="number",'
|
||||||
|
'entity="number.threshold",'
|
||||||
|
'friendly_name="Threshold"} 5.2' in body
|
||||||
|
)
|
||||||
|
|
||||||
|
assert (
|
||||||
|
'number_state{domain="number",'
|
||||||
|
'entity="number.brightness",'
|
||||||
|
'friendly_name="None"} 60.0' in body
|
||||||
|
)
|
||||||
|
|
||||||
|
assert (
|
||||||
|
'number_state_celsius{domain="number",'
|
||||||
|
'entity="number.target_temperature",'
|
||||||
|
'friendly_name="Target temperature"} 22.7' in body
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("namespace", [""])
|
@pytest.mark.parametrize("namespace", [""])
|
||||||
async def test_battery(client, sensor_entities) -> None:
|
async def test_battery(client, sensor_entities) -> None:
|
||||||
"""Test prometheus metrics for battery."""
|
"""Test prometheus metrics for battery."""
|
||||||
@ -1382,6 +1407,46 @@ async def input_number_fixture(
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="number_entities")
|
||||||
|
async def number_fixture(
|
||||||
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
||||||
|
) -> dict[str, er.RegistryEntry]:
|
||||||
|
"""Simulate number entities."""
|
||||||
|
data = {}
|
||||||
|
number_1 = entity_registry.async_get_or_create(
|
||||||
|
domain=number.DOMAIN,
|
||||||
|
platform="test",
|
||||||
|
unique_id="number_1",
|
||||||
|
suggested_object_id="threshold",
|
||||||
|
original_name="Threshold",
|
||||||
|
)
|
||||||
|
set_state_with_entry(hass, number_1, 5.2)
|
||||||
|
data["number_1"] = number_1
|
||||||
|
|
||||||
|
number_2 = entity_registry.async_get_or_create(
|
||||||
|
domain=number.DOMAIN,
|
||||||
|
platform="test",
|
||||||
|
unique_id="number_2",
|
||||||
|
suggested_object_id="brightness",
|
||||||
|
)
|
||||||
|
set_state_with_entry(hass, number_2, 60)
|
||||||
|
data["number_2"] = number_2
|
||||||
|
|
||||||
|
number_3 = entity_registry.async_get_or_create(
|
||||||
|
domain=number.DOMAIN,
|
||||||
|
platform="test",
|
||||||
|
unique_id="number_3",
|
||||||
|
suggested_object_id="target_temperature",
|
||||||
|
original_name="Target temperature",
|
||||||
|
unit_of_measurement=UnitOfTemperature.CELSIUS,
|
||||||
|
)
|
||||||
|
set_state_with_entry(hass, number_3, 22.7)
|
||||||
|
data["number_3"] = number_3
|
||||||
|
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="input_boolean_entities")
|
@pytest.fixture(name="input_boolean_entities")
|
||||||
async def input_boolean_fixture(
|
async def input_boolean_fixture(
|
||||||
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
hass: HomeAssistant, entity_registry: er.EntityRegistry
|
||||||
|
Loading…
x
Reference in New Issue
Block a user