Adding support for mapping keys to value in statsd (#8665)

* Adding ability to map specific states to values

* Adding test for mapping
This commit is contained in:
Richard Cox 2017-07-26 23:58:34 -07:00 committed by Pascal Vizeli
parent 9d5c61b2f0
commit 1e8c00ac02
2 changed files with 9 additions and 1 deletions

View file

@ -19,6 +19,7 @@ _LOGGER = logging.getLogger(__name__)
CONF_ATTR = 'log_attributes' CONF_ATTR = 'log_attributes'
CONF_RATE = 'rate' CONF_RATE = 'rate'
CONF_VALUE_MAP = 'value_mapping'
DEFAULT_HOST = 'localhost' DEFAULT_HOST = 'localhost'
DEFAULT_PORT = 8125 DEFAULT_PORT = 8125
@ -34,6 +35,7 @@ CONFIG_SCHEMA = vol.Schema({
vol.Optional(CONF_PREFIX, default=DEFAULT_PREFIX): cv.string, vol.Optional(CONF_PREFIX, default=DEFAULT_PREFIX): cv.string,
vol.Optional(CONF_RATE, default=DEFAULT_RATE): vol.Optional(CONF_RATE, default=DEFAULT_RATE):
vol.All(vol.Coerce(int), vol.Range(min=1)), vol.All(vol.Coerce(int), vol.Range(min=1)),
vol.Optional(CONF_VALUE_MAP, default=None): dict,
}), }),
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -47,6 +49,7 @@ def setup(hass, config):
port = conf.get(CONF_PORT) port = conf.get(CONF_PORT)
sample_rate = conf.get(CONF_RATE) sample_rate = conf.get(CONF_RATE)
prefix = conf.get(CONF_PREFIX) prefix = conf.get(CONF_PREFIX)
value_mapping = conf.get(CONF_VALUE_MAP)
show_attribute_flag = conf.get(CONF_ATTR) show_attribute_flag = conf.get(CONF_ATTR)
statsd_client = statsd.StatsClient(host=host, port=port, prefix=prefix) statsd_client = statsd.StatsClient(host=host, port=port, prefix=prefix)
@ -59,7 +62,10 @@ def setup(hass, config):
return return
try: try:
_state = state_helper.state_as_number(state) if value_mapping and state.state in value_mapping:
_state = float(value_mapping[state.state])
else:
_state = state_helper.state_as_number(state)
except ValueError: except ValueError:
# Set the state to none and continue for any numeric attributes. # Set the state to none and continue for any numeric attributes.
_state = None _state = None

View file

@ -86,6 +86,7 @@ class TestStatsd(unittest.TestCase):
config = { config = {
'statsd': { 'statsd': {
'host': 'host', 'host': 'host',
'value_mapping': {'custom': 3}
} }
} }
@ -98,6 +99,7 @@ class TestStatsd(unittest.TestCase):
valid = {'1': 1, valid = {'1': 1,
'1.0': 1.0, '1.0': 1.0,
'custom': 3,
STATE_ON: 1, STATE_ON: 1,
STATE_OFF: 0} STATE_OFF: 0}
for in_, out in valid.items(): for in_, out in valid.items():