InfluxDB cleanups (#12903)

* Close influxdb on shutdown

* Ignore inf as an influxdb value

* Remove deprecated CONF_RETRY_QUEUE
This commit is contained in:
Anders Melchiorsen 2018-03-04 21:01:16 +01:00 committed by Martin Hjelmare
parent 81ba666db7
commit d418355d4d
2 changed files with 37 additions and 3 deletions

View file

@ -35,7 +35,6 @@ CONF_COMPONENT_CONFIG = 'component_config'
CONF_COMPONENT_CONFIG_GLOB = 'component_config_glob' CONF_COMPONENT_CONFIG_GLOB = 'component_config_glob'
CONF_COMPONENT_CONFIG_DOMAIN = 'component_config_domain' CONF_COMPONENT_CONFIG_DOMAIN = 'component_config_domain'
CONF_RETRY_COUNT = 'max_retries' CONF_RETRY_COUNT = 'max_retries'
CONF_RETRY_QUEUE = 'retry_queue_limit'
DEFAULT_DATABASE = 'home_assistant' DEFAULT_DATABASE = 'home_assistant'
DEFAULT_VERIFY_SSL = True DEFAULT_VERIFY_SSL = True
@ -53,7 +52,7 @@ COMPONENT_CONFIG_SCHEMA_ENTRY = vol.Schema({
}) })
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.All(cv.deprecated(CONF_RETRY_QUEUE), vol.Schema({ DOMAIN: vol.All(vol.Schema({
vol.Optional(CONF_HOST): cv.string, vol.Optional(CONF_HOST): cv.string,
vol.Inclusive(CONF_USERNAME, 'authentication'): cv.string, vol.Inclusive(CONF_USERNAME, 'authentication'): cv.string,
vol.Inclusive(CONF_PASSWORD, 'authentication'): cv.string, vol.Inclusive(CONF_PASSWORD, 'authentication'): cv.string,
@ -71,7 +70,6 @@ CONFIG_SCHEMA = vol.Schema({
vol.Optional(CONF_PORT): cv.port, vol.Optional(CONF_PORT): cv.port,
vol.Optional(CONF_SSL): cv.boolean, vol.Optional(CONF_SSL): cv.boolean,
vol.Optional(CONF_RETRY_COUNT, default=0): cv.positive_int, vol.Optional(CONF_RETRY_COUNT, default=0): cv.positive_int,
vol.Optional(CONF_RETRY_QUEUE, default=20): cv.positive_int,
vol.Optional(CONF_DEFAULT_MEASUREMENT): cv.string, vol.Optional(CONF_DEFAULT_MEASUREMENT): cv.string,
vol.Optional(CONF_OVERRIDE_MEASUREMENT): cv.string, vol.Optional(CONF_OVERRIDE_MEASUREMENT): cv.string,
vol.Optional(CONF_TAGS, default={}): vol.Optional(CONF_TAGS, default={}):
@ -222,6 +220,10 @@ def setup(hass, config):
json['fields'][key] = float( json['fields'][key] = float(
RE_DECIMAL.sub('', new_value)) RE_DECIMAL.sub('', new_value))
# Infinity is not a valid float in InfluxDB
if (key, float("inf")) in json['fields'].items():
del json['fields'][key]
json['tags'].update(tags) json['tags'].update(tags)
return json return json
@ -234,6 +236,7 @@ def setup(hass, config):
"""Shut down the thread.""" """Shut down the thread."""
instance.queue.put(None) instance.queue.put(None)
instance.join() instance.join()
influx.close()
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, shutdown) hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, shutdown)

View file

@ -213,6 +213,37 @@ class TestInfluxDB(unittest.TestCase):
) )
mock_client.return_value.write_points.reset_mock() mock_client.return_value.write_points.reset_mock()
def test_event_listener_inf(self, mock_client):
"""Test the event listener for missing units."""
self._setup()
attrs = {'bignumstring': "9" * 999}
state = mock.MagicMock(
state=8, domain='fake', entity_id='fake.entity-id',
object_id='entity', attributes=attrs)
event = mock.MagicMock(data={'new_state': state}, time_fired=12345)
body = [{
'measurement': 'fake.entity-id',
'tags': {
'domain': 'fake',
'entity_id': 'entity',
},
'time': 12345,
'fields': {
'value': 8,
},
}]
self.handler_method(event)
self.hass.data[influxdb.DOMAIN].block_till_done()
self.assertEqual(
mock_client.return_value.write_points.call_count, 1
)
self.assertEqual(
mock_client.return_value.write_points.call_args,
mock.call(body)
)
mock_client.return_value.write_points.reset_mock()
def test_event_listener_states(self, mock_client): def test_event_listener_states(self, mock_client):
"""Test the event listener against ignored states.""" """Test the event listener against ignored states."""
self._setup() self._setup()