Compare commits

...
2 Commits
Author SHA1 Message Date
Jack DangerandGitHub 40bb20509f Merge bd6aed47ee into ea131e1663 2026-06-28 12:47:27 -07:00
Jack Danger bd6aed47ee Avoid full-table scan in /recordings/unavailable
The query filtered on (end_time >= after AND start_time <= before). With
before defaulting to now, start_time <= before matches every row, so SQLite
range-scans the entire recordings table for any window. Add a start_time lower
bound (segments are short, so a recording overlapping the window starts within
an hour of it). Also fix a 500 on cameras=all, where cameras was reassigned to a
list and later .split().
2026-06-28 19:47:10 +00:00
+6 -2
View File
@@ -274,7 +274,7 @@ async def no_recordings(
return JSONResponse(content=[]) return JSONResponse(content=[])
cameras = ",".join(filtered) cameras = ",".join(filtered)
else: else:
cameras = allowed_cameras cameras = "all"
before = params.before or datetime.datetime.now().timestamp() before = params.before or datetime.datetime.now().timestamp()
after = ( after = (
@@ -283,7 +283,11 @@ async def no_recordings(
) )
scale = params.scale scale = params.scale
clauses = [(Recordings.end_time >= after) & (Recordings.start_time <= before)] clauses = [
(Recordings.start_time >= after - 3600)
& (Recordings.start_time <= before)
& (Recordings.end_time >= after)
]
if cameras != "all": if cameras != "all":
camera_list = cameras.split(",") camera_list = cameras.split(",")
clauses.append((Recordings.camera << camera_list)) clauses.append((Recordings.camera << camera_list))