1
mirror of https://github.com/home-assistant/core synced 2024-09-15 17:29:45 +02:00

Fix Prometheus casting issues (#22282)

## Description:

Fix Prometheus casting issues

**Related issue (if applicable):** fixes #8659.
## Checklist:
  - [x] The code change is tested and works locally.
  - [x] Local tests pass with `tox`. **Your PR cannot be merged unless tests pass**
  - [x] There is no commented out code in this PR.
This commit is contained in:
Robbie Trencheny 2019-03-22 13:16:17 -07:00 committed by GitHub
parent a58f1eedda
commit e9cd9f88be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -103,6 +103,16 @@ class PrometheusMetrics:
full_metric_name, documentation, labels)
return self._metrics[metric]
@staticmethod
def state_as_number(state):
"""Return a state casted to a float."""
try:
value = state_helper.state_as_number(state)
except ValueError:
_LOGGER.warning("Could not convert %s to float", state)
value = 0
return value
@staticmethod
def _labels(state):
return {
@ -130,7 +140,7 @@ class PrometheusMetrics:
self.prometheus_client.Gauge,
'State of the binary sensor (0/1)',
)
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
def _handle_input_boolean(self, state):
@ -139,7 +149,7 @@ class PrometheusMetrics:
self.prometheus_client.Gauge,
'State of the input boolean (0/1)',
)
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
def _handle_device_tracker(self, state):
@ -148,7 +158,7 @@ class PrometheusMetrics:
self.prometheus_client.Gauge,
'State of the device tracker (0/1)',
)
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
def _handle_person(self, state):
@ -157,7 +167,7 @@ class PrometheusMetrics:
self.prometheus_client.Gauge,
'State of the person (0/1)',
)
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
def _handle_light(self, state):
@ -171,7 +181,7 @@ class PrometheusMetrics:
if 'brightness' in state.attributes:
value = state.attributes['brightness'] / 255.0
else:
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
value = value * 100
metric.labels(**self._labels(state)).set(value)
except ValueError:
@ -183,7 +193,7 @@ class PrometheusMetrics:
self.prometheus_client.Gauge,
'State of the lock (0/1)',
)
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
def _handle_climate(self, state):
@ -209,7 +219,7 @@ class PrometheusMetrics:
'climate_state', self.prometheus_client.Gauge,
'State of the thermostat (0/1)')
try:
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
except ValueError:
pass
@ -232,7 +242,7 @@ class PrometheusMetrics:
state.entity_id)
try:
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
if unit == TEMP_FAHRENHEIT:
value = fahrenheit_to_celsius(value)
_metric.labels(**self._labels(state)).set(value)
@ -249,7 +259,7 @@ class PrometheusMetrics:
)
try:
value = state_helper.state_as_number(state)
value = self.state_as_number(state)
metric.labels(**self._labels(state)).set(value)
except ValueError:
pass