1 """Support for sending data to StatsD."""
6 import voluptuous
as vol
14 _LOGGER = logging.getLogger(__name__)
16 CONF_ATTR =
"log_attributes"
18 CONF_VALUE_MAP =
"value_mapping"
20 DEFAULT_HOST =
"localhost"
22 DEFAULT_PREFIX =
"hass"
26 CONFIG_SCHEMA = vol.Schema(
30 vol.Required(CONF_HOST, default=DEFAULT_HOST): cv.string,
31 vol.Optional(CONF_ATTR, default=
False): cv.boolean,
32 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
33 vol.Optional(CONF_PREFIX, default=DEFAULT_PREFIX): cv.string,
34 vol.Optional(CONF_RATE, default=DEFAULT_RATE): vol.All(
35 vol.Coerce(int), vol.Range(min=1)
37 vol.Optional(CONF_VALUE_MAP): dict,
41 extra=vol.ALLOW_EXTRA,
45 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
46 """Set up the StatsD component."""
49 host = conf.get(CONF_HOST)
50 port = conf.get(CONF_PORT)
51 sample_rate = conf.get(CONF_RATE)
52 prefix = conf.get(CONF_PREFIX)
53 value_mapping = conf.get(CONF_VALUE_MAP)
54 show_attribute_flag = conf.get(CONF_ATTR)
56 statsd_client = statsd.StatsClient(host=host, port=port, prefix=prefix)
58 def statsd_event_listener(event):
59 """Listen for new messages on the bus and sends them to StatsD."""
60 if (state := event.data.get(
"new_state"))
is None:
64 if value_mapping
and state.state
in value_mapping:
65 _state =
float(value_mapping[state.state])
67 _state = state_helper.state_as_number(state)
72 states =
dict(state.attributes)
74 _LOGGER.debug(
"Sending %s", state.entity_id)
76 if show_attribute_flag
is True:
77 if isinstance(_state, (float, int)):
78 statsd_client.gauge(f
"{state.entity_id}.state", _state, sample_rate)
81 for key, value
in states.items():
82 if isinstance(value, (float, int)):
83 stat = f
"{state.entity_id}.{key.replace(' ', '_')}"
84 statsd_client.gauge(stat, value, sample_rate)
86 elif isinstance(_state, (float, int)):
87 statsd_client.gauge(state.entity_id, _state, sample_rate)
90 statsd_client.incr(state.entity_id, rate=sample_rate)
92 hass.bus.listen(EVENT_STATE_CHANGED, statsd_event_listener)
bool setup(HomeAssistant hass, ConfigType config)