mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-01-07 00:06:57 +01:00
limit legacy expiration to files after the oldest recording in the db
This commit is contained in:
parent
354a9240f0
commit
29de723267
@ -245,23 +245,32 @@ class RecordingCleanup(threading.Thread):
|
|||||||
def expire_files(self):
|
def expire_files(self):
|
||||||
logger.debug("Start expire files (legacy).")
|
logger.debug("Start expire files (legacy).")
|
||||||
|
|
||||||
shortest_retention = self.config.record.retain_days
|
|
||||||
default_expire = (
|
default_expire = (
|
||||||
datetime.datetime.now().timestamp()
|
datetime.datetime.now().timestamp()
|
||||||
- SECONDS_IN_DAY * self.config.record.retain_days
|
- SECONDS_IN_DAY * self.config.record.retain_days
|
||||||
)
|
)
|
||||||
delete_before = {}
|
delete_before = {}
|
||||||
|
|
||||||
for name, camera in self.config.cameras.items():
|
for name, camera in self.config.cameras.items():
|
||||||
delete_before[name] = (
|
delete_before[name] = (
|
||||||
datetime.datetime.now().timestamp()
|
datetime.datetime.now().timestamp()
|
||||||
- SECONDS_IN_DAY * camera.record.retain_days
|
- SECONDS_IN_DAY * camera.record.retain_days
|
||||||
)
|
)
|
||||||
if camera.record.retain_days < shortest_retention:
|
|
||||||
shortest_retention = camera.record.retain_days
|
|
||||||
|
|
||||||
logger.debug(f"Shortest retention: {shortest_retention}")
|
# find all the recordings older than the oldest recording in the db
|
||||||
|
oldest_recording = (
|
||||||
|
Recordings.select().order_by(Recordings.start_time.desc()).get()
|
||||||
|
)
|
||||||
|
|
||||||
|
oldest_timestamp = (
|
||||||
|
oldest_recording.start_time
|
||||||
|
if oldest_recording
|
||||||
|
else datetime.datetime.now().timestamp()
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.debug(f"Oldest recording in the db: {oldest_timestamp}")
|
||||||
process = sp.run(
|
process = sp.run(
|
||||||
["find", RECORD_DIR, "-type", "f", "-mtime", f"+{shortest_retention}"],
|
["find", RECORD_DIR, "-type", "f", "-newermt", f"@{oldest_timestamp}"],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
)
|
)
|
||||||
@ -269,9 +278,6 @@ class RecordingCleanup(threading.Thread):
|
|||||||
|
|
||||||
for f in files_to_check:
|
for f in files_to_check:
|
||||||
p = Path(f)
|
p = Path(f)
|
||||||
# Ignore files that have a record in the recordings DB
|
|
||||||
if Recordings.select().where(Recordings.path == str(p)).count():
|
|
||||||
continue
|
|
||||||
if p.stat().st_mtime < delete_before.get(p.parent.name, default_expire):
|
if p.stat().st_mtime < delete_before.get(p.parent.name, default_expire):
|
||||||
p.unlink(missing_ok=True)
|
p.unlink(missing_ok=True)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user