mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 18:27:09 +00:00
Tune logbook performance to accomodate recent changes (#39348)
This commit is contained in:
parent
ad0d3b4848
commit
dda4cf4d58
@ -12,14 +12,15 @@ def async_describe_events(hass, async_describe_event): # type: ignore
|
|||||||
@callback
|
@callback
|
||||||
def async_describe_logbook_event(event): # type: ignore
|
def async_describe_logbook_event(event): # type: ignore
|
||||||
"""Describe a logbook event."""
|
"""Describe a logbook event."""
|
||||||
|
data = event.data
|
||||||
message = "has been triggered"
|
message = "has been triggered"
|
||||||
if ATTR_SOURCE in event.data:
|
if ATTR_SOURCE in data:
|
||||||
message = f"{message} by {event.data[ATTR_SOURCE]}"
|
message = f"{message} by {data[ATTR_SOURCE]}"
|
||||||
return {
|
return {
|
||||||
"name": event.data.get(ATTR_NAME),
|
"name": data.get(ATTR_NAME),
|
||||||
"message": message,
|
"message": message,
|
||||||
"source": event.data.get(ATTR_SOURCE),
|
"source": data.get(ATTR_SOURCE),
|
||||||
"entity_id": event.data.get(ATTR_ENTITY_ID),
|
"entity_id": data.get(ATTR_ENTITY_ID),
|
||||||
}
|
}
|
||||||
|
|
||||||
async_describe_event(
|
async_describe_event(
|
||||||
|
@ -3,6 +3,7 @@ from datetime import timedelta
|
|||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from sqlalchemy.orm import aliased
|
from sqlalchemy.orm import aliased
|
||||||
@ -50,6 +51,9 @@ from homeassistant.helpers.integration_platform import (
|
|||||||
from homeassistant.loader import bind_hass
|
from homeassistant.loader import bind_hass
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
|
ENTITY_ID_JSON_EXTRACT = re.compile('"entity_id": "([^"]+)"')
|
||||||
|
DOMAIN_JSON_EXTRACT = re.compile('"domain": "([^"]+)"')
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
ATTR_MESSAGE = "message"
|
ATTR_MESSAGE = "message"
|
||||||
@ -485,20 +489,17 @@ def _keep_event(hass, event, entities_filter):
|
|||||||
entity_id = event.entity_id
|
entity_id = event.entity_id
|
||||||
elif event.event_type in HOMEASSISTANT_EVENTS:
|
elif event.event_type in HOMEASSISTANT_EVENTS:
|
||||||
entity_id = f"{HA_DOMAIN}."
|
entity_id = f"{HA_DOMAIN}."
|
||||||
elif event.event_type in hass.data[DOMAIN] and ATTR_ENTITY_ID not in event.data:
|
|
||||||
# If the entity_id isn't described, use the domain that describes
|
|
||||||
# the event for filtering.
|
|
||||||
domain = hass.data[DOMAIN][event.event_type][0]
|
|
||||||
if domain is None:
|
|
||||||
return False
|
|
||||||
entity_id = f"{domain}."
|
|
||||||
elif event.event_type == EVENT_CALL_SERVICE:
|
elif event.event_type == EVENT_CALL_SERVICE:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
event_data = event.data
|
entity_id = event.data_entity_id
|
||||||
entity_id = event_data.get(ATTR_ENTITY_ID)
|
|
||||||
if not entity_id:
|
if not entity_id:
|
||||||
domain = event_data.get(ATTR_DOMAIN)
|
if event.event_type in hass.data[DOMAIN]:
|
||||||
|
# If the entity_id isn't described, use the domain that describes
|
||||||
|
# the event for filtering.
|
||||||
|
domain = hass.data[DOMAIN][event.event_type][0]
|
||||||
|
else:
|
||||||
|
domain = event.data_domain
|
||||||
if domain is None:
|
if domain is None:
|
||||||
return False
|
return False
|
||||||
entity_id = f"{domain}."
|
entity_id = f"{domain}."
|
||||||
@ -689,6 +690,24 @@ class LazyEventPartialState:
|
|||||||
self.context_user_id = self._row.context_user_id
|
self.context_user_id = self._row.context_user_id
|
||||||
self.time_fired_minute = self._row.time_fired.minute
|
self.time_fired_minute = self._row.time_fired.minute
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data_entity_id(self):
|
||||||
|
"""Extract the entity id from the decoded data or json."""
|
||||||
|
if self._event_data:
|
||||||
|
return self._event_data.get(ATTR_ENTITY_ID)
|
||||||
|
|
||||||
|
result = ENTITY_ID_JSON_EXTRACT.search(self._row.event_data)
|
||||||
|
return result and result.group(1)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data_domain(self):
|
||||||
|
"""Extract the domain from the decoded data or json."""
|
||||||
|
if self._event_data:
|
||||||
|
return self._event_data.get(ATTR_DOMAIN)
|
||||||
|
|
||||||
|
result = DOMAIN_JSON_EXTRACT.search(self._row.event_data)
|
||||||
|
return result and result.group(1)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def attributes(self):
|
def attributes(self):
|
||||||
"""State attributes."""
|
"""State attributes."""
|
||||||
|
@ -12,10 +12,11 @@ def async_describe_events(hass, async_describe_event):
|
|||||||
@callback
|
@callback
|
||||||
def async_describe_logbook_event(event):
|
def async_describe_logbook_event(event):
|
||||||
"""Describe the logbook event."""
|
"""Describe the logbook event."""
|
||||||
|
data = event.data
|
||||||
return {
|
return {
|
||||||
"name": event.data.get(ATTR_NAME),
|
"name": data.get(ATTR_NAME),
|
||||||
"message": "started",
|
"message": "started",
|
||||||
"entity_id": event.data.get(ATTR_ENTITY_ID),
|
"entity_id": data.get(ATTR_ENTITY_ID),
|
||||||
}
|
}
|
||||||
|
|
||||||
async_describe_event(DOMAIN, EVENT_SCRIPT_STARTED, async_describe_logbook_event)
|
async_describe_event(DOMAIN, EVENT_SCRIPT_STARTED, async_describe_logbook_event)
|
||||||
|
@ -2084,6 +2084,16 @@ async def test_logbook_context_from_template(hass, hass_client):
|
|||||||
class MockLazyEventPartialState(ha.Event):
|
class MockLazyEventPartialState(ha.Event):
|
||||||
"""Minimal mock of a Lazy event."""
|
"""Minimal mock of a Lazy event."""
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data_entity_id(self):
|
||||||
|
"""Lookup entity id."""
|
||||||
|
return self.data.get(ATTR_ENTITY_ID)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data_domain(self):
|
||||||
|
"""Lookup domain."""
|
||||||
|
return self.data.get(ATTR_DOMAIN)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def time_fired_minute(self):
|
def time_fired_minute(self):
|
||||||
"""Minute the event was fired."""
|
"""Minute the event was fired."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user