From 5d94c68d66a547b6968eef41c0fabac5ba490d7e Mon Sep 17 00:00:00 2001 From: Jason Hunter Date: Fri, 9 Jul 2021 21:19:39 -0400 Subject: [PATCH] fix recording retention logic --- frigate/events.py | 3 --- frigate/record.py | 17 ++++++++--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/frigate/events.py b/frigate/events.py index f0c5d13a5..84c220b89 100644 --- a/frigate/events.py +++ b/frigate/events.py @@ -87,12 +87,9 @@ class EventProcessor(threading.Thread): try: event_type, camera, event_data = self.event_queue.get(timeout=10) except queue.Empty: - # if not self.stop_event.is_set(): - # self.refresh_cache() continue logger.debug(f"Event received: {event_type} {camera} {event_data['id']}") - # self.refresh_cache() if event_type == "start": self.events_in_process[event_data["id"]] = event_data diff --git a/frigate/record.py b/frigate/record.py index 95cfe8766..233f4fd6d 100644 --- a/frigate/record.py +++ b/frigate/record.py @@ -173,12 +173,12 @@ class RecordingMaintainer(threading.Thread): retain[recording.path] = True # Actually expire recordings - for path, keep in retain.items(): - if not keep: - Path(path).unlink(missing_ok=True) - Recordings.delete_by_id(recording.recording_id) + delete_paths = [path for path, keep in retain.items() if not keep] + for path in delete_paths: + Path(path).unlink(missing_ok=True) + Recordings.delete().where(Recordings.path << delete_paths).execute() - # Update Event + # Update Events to reflect deleted recordings event_no_recordings = ( Event.select() .join( @@ -202,8 +202,7 @@ class RecordingMaintainer(threading.Thread): ) .where(Recordings.id.is_null()) ) - update = Event.update(has_clip=False).where(Event.id << event_no_recordings) - update.execute() + Event.update(has_clip=False).where(Event.id << event_no_recordings).execute() event_paths = list(retain.keys()) @@ -218,7 +217,7 @@ class RecordingMaintainer(threading.Thread): expire_before = ( datetime.datetime.now() - datetime.timedelta(days=expire_days) ).timestamp() - if recording.end_time >= expire_before: + if recording.end_time < expire_before: Path(recording.path).unlink(missing_ok=True) Recordings.delete_by_id(recording.id) @@ -239,7 +238,7 @@ class RecordingMaintainer(threading.Thread): expire_before = ( datetime.datetime.now() - datetime.timedelta(days=expire_days) ).timestamp() - if recording.end_time >= expire_before: + if recording.end_time < expire_before: Path(recording.path).unlink(missing_ok=True) Recordings.delete_by_id(recording.id)