replace motion activity resample apply/agg lambdas with vectorized max() and first()

This commit is contained in:
Josh Hawkins 2026-06-01 16:47:14 -05:00
parent 570e21340a
commit 85f117d102

View File

@ -605,9 +605,10 @@ def motion_activity(
if not filtered: if not filtered:
return JSONResponse(content=[]) return JSONResponse(content=[])
camera_list = list(filtered) camera_list = list(filtered)
clauses.append((Recordings.camera << camera_list))
else: else:
clauses.append((Recordings.camera << allowed_cameras)) camera_list = list(allowed_cameras)
clauses.append((Recordings.camera << camera_list))
data: list[Recordings] = ( data: list[Recordings] = (
Recordings.select( Recordings.select(
@ -635,14 +636,12 @@ def motion_activity(
df.set_index(["start_time"], inplace=True) df.set_index(["start_time"], inplace=True)
# normalize data # normalize data
motion = ( motion = df["motion"].resample(f"{scale}s").max().fillna(0.0).to_frame()
df["motion"]
.resample(f"{scale}s") if len(camera_list) == 1:
.apply(lambda x: max(x, key=abs, default=0.0)) cameras = df["camera"].resample(f"{scale}s").first().fillna("")
.fillna(0.0) else:
.to_frame() cameras = df["camera"].resample(f"{scale}s").agg(lambda x: ",".join(set(x)))
)
cameras = df["camera"].resample(f"{scale}s").agg(lambda x: ",".join(set(x)))
df = motion.join(cameras) df = motion.join(cameras)
length = df.shape[0] length = df.shape[0]