From b8311071f2818b867385fa9b68a13b844bdf3ee5 Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Fri, 7 Oct 2022 09:36:31 -0600 Subject: [PATCH] Add expire interval option for snaphots --- frigate/config.py | 4 ++++ frigate/events.py | 24 ++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/frigate/config.py b/frigate/config.py index 1370dcf88..0c245443e 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -440,6 +440,10 @@ class CameraFfmpegConfig(FfmpegConfig): class SnapshotsConfig(FrigateBaseModel): enabled: bool = Field(default=False, title="Snapshots enabled.") + expire_interval: int = Field( + default=5, + title="Number of minutes to wait between cleanup runs.", + ) clean_copy: bool = Field( default=True, title="Create a clean copy of the snapshot image." ) diff --git a/frigate/events.py b/frigate/events.py index 2dfe40f3e..a5763687a 100644 --- a/frigate/events.py +++ b/frigate/events.py @@ -1,4 +1,5 @@ import datetime +import itertools import logging import os import queue @@ -289,15 +290,18 @@ class EventCleanup(threading.Thread): def run(self): # only expire events every 5 minutes - while not self.stop_event.wait(300): - self.expire("clips") - self.expire("snapshots") - self.purge_duplicates() + for counter in itertools.cycle(range(self.config.snapshots.expire_interval)): + if self.stop_event.wait(60): + logger.info(f"Exiting event cleanup...") + break - # drop events from db where has_clip and has_snapshot are false - delete_query = Event.delete().where( - Event.has_clip == False, Event.has_snapshot == False - ) - delete_query.execute() + if counter == 0: + self.expire("clips") + self.expire("snapshots") + self.purge_duplicates() - logger.info(f"Exiting event cleanup...") + # drop events from db where has_clip and has_snapshot are false + delete_query = Event.delete().where( + Event.has_clip == False, Event.has_snapshot == False + ) + delete_query.execute()