1 """Support to send data to a Splunk instance."""
3 from http
import HTTPStatus
8 from aiohttp
import ClientConnectionError, ClientResponseError
9 from hass_splunk
import SplunkPayloadError, hass_splunk
10 import voluptuous
as vol
29 _LOGGER = logging.getLogger(__name__)
32 CONF_FILTER =
"filter"
34 DEFAULT_HOST =
"localhost"
39 CONFIG_SCHEMA = vol.Schema(
43 vol.Required(CONF_TOKEN): cv.string,
44 vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
45 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
46 vol.Optional(CONF_SSL, default=
False): cv.boolean,
47 vol.Optional(CONF_VERIFY_SSL, default=
True): cv.boolean,
48 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
49 vol.Optional(CONF_FILTER, default={}): FILTER_SCHEMA,
53 extra=vol.ALLOW_EXTRA,
57 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
58 """Set up the Splunk component."""
60 host = conf.get(CONF_HOST)
61 port = conf.get(CONF_PORT)
62 token = conf.get(CONF_TOKEN)
63 use_ssl = conf[CONF_SSL]
64 verify_ssl = conf.get(CONF_VERIFY_SSL)
65 name = conf.get(CONF_NAME)
66 entity_filter = conf[CONF_FILTER]
68 event_collector = hass_splunk(
74 verify_ssl=verify_ssl,
77 if not await event_collector.check(connectivity=
False, token=
True, busy=
False):
85 "meta":
"Splunk integration has started",
89 await event_collector.queue(json.dumps(payload, cls=JSONEncoder), send=
False)
91 async
def splunk_event_listener(event):
92 """Listen for new messages on the bus and sends them to Splunk."""
94 state = event.data.get(
"new_state")
95 if state
is None or not entity_filter(state.entity_id):
99 _state = state_helper.state_as_number(state)
104 "time": event.time_fired.timestamp(),
107 "domain": state.domain,
108 "entity_id": state.object_id,
109 "attributes":
dict(state.attributes),
115 await event_collector.queue(json.dumps(payload, cls=JSONEncoder), send=
True)
116 except SplunkPayloadError
as err:
117 if err.status == HTTPStatus.UNAUTHORIZED:
121 except ClientConnectionError
as err:
124 _LOGGER.warning(
"Connection to %s:%s timed out", host, port)
125 except ClientResponseError
as err:
126 _LOGGER.error(err.message)
128 hass.bus.async_listen(EVENT_STATE_CHANGED, splunk_event_listener)
bool async_setup(HomeAssistant hass, ConfigType config)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)