mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Move recorder query out of event loop (#12615)
This commit is contained in:
parent
19d34daef0
commit
43ad3ae2d4
@ -256,28 +256,6 @@ class Recorder(threading.Thread):
|
|||||||
self.hass.bus.async_listen_once(
|
self.hass.bus.async_listen_once(
|
||||||
EVENT_HOMEASSISTANT_START, notify_hass_started)
|
EVENT_HOMEASSISTANT_START, notify_hass_started)
|
||||||
|
|
||||||
if self.keep_days and self.purge_interval:
|
|
||||||
@callback
|
|
||||||
def async_purge(now):
|
|
||||||
"""Trigger the purge and schedule the next run."""
|
|
||||||
self.queue.put(
|
|
||||||
PurgeTask(self.keep_days, repack=not self.did_vacuum))
|
|
||||||
self.hass.helpers.event.async_track_point_in_time(
|
|
||||||
async_purge, now + timedelta(days=self.purge_interval))
|
|
||||||
|
|
||||||
earliest = dt_util.utcnow() + timedelta(minutes=30)
|
|
||||||
run = latest = dt_util.utcnow() + \
|
|
||||||
timedelta(days=self.purge_interval)
|
|
||||||
with session_scope(session=self.get_session()) as session:
|
|
||||||
event = session.query(Events).first()
|
|
||||||
if event is not None:
|
|
||||||
session.expunge(event)
|
|
||||||
run = dt_util.as_utc(event.time_fired) + \
|
|
||||||
timedelta(days=self.keep_days+self.purge_interval)
|
|
||||||
run = min(latest, max(run, earliest))
|
|
||||||
self.hass.helpers.event.async_track_point_in_time(
|
|
||||||
async_purge, run)
|
|
||||||
|
|
||||||
self.hass.add_job(register)
|
self.hass.add_job(register)
|
||||||
result = hass_started.result()
|
result = hass_started.result()
|
||||||
|
|
||||||
@ -285,6 +263,29 @@ class Recorder(threading.Thread):
|
|||||||
if result is shutdown_task:
|
if result is shutdown_task:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Start periodic purge
|
||||||
|
if self.keep_days and self.purge_interval:
|
||||||
|
@callback
|
||||||
|
def async_purge(now):
|
||||||
|
"""Trigger the purge and schedule the next run."""
|
||||||
|
self.queue.put(
|
||||||
|
PurgeTask(self.keep_days, repack=not self.did_vacuum))
|
||||||
|
self.hass.helpers.event.async_track_point_in_time(
|
||||||
|
async_purge, now + timedelta(days=self.purge_interval))
|
||||||
|
|
||||||
|
earliest = dt_util.utcnow() + timedelta(minutes=30)
|
||||||
|
run = latest = dt_util.utcnow() + \
|
||||||
|
timedelta(days=self.purge_interval)
|
||||||
|
with session_scope(session=self.get_session()) as session:
|
||||||
|
event = session.query(Events).first()
|
||||||
|
if event is not None:
|
||||||
|
session.expunge(event)
|
||||||
|
run = dt_util.as_utc(event.time_fired) + timedelta(
|
||||||
|
days=self.keep_days+self.purge_interval)
|
||||||
|
run = min(latest, max(run, earliest))
|
||||||
|
|
||||||
|
self.hass.helpers.event.track_point_in_time(async_purge, run)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
event = self.queue.get()
|
event = self.queue.get()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user