Separate insert and update to make sure updated values are retained when event ends

This commit is contained in:
Nick Mowen 2022-03-13 10:46:13 -06:00
parent 6658b2c624
commit 701da572d0

View File

@ -14,6 +14,11 @@ from frigate.models import Event
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def should_insert_db(prev_event, current_event):
return (
(not prev_event["has_clip"] and not prev_event["has_snapshot"])
and (current_event["has_clip"] or current_event["has_snapshot"])
)
def should_update_db(prev_event, current_event): def should_update_db(prev_event, current_event):
return ( return (
@ -58,7 +63,7 @@ class EventProcessor(threading.Thread):
if event_type == "start": if event_type == "start":
self.events_in_process[event_data["id"]] = event_data self.events_in_process[event_data["id"]] = event_data
elif event_type == "update" and should_update_db( elif event_type == "update" and should_insert_db(
self.events_in_process[event_data["id"]], event_data self.events_in_process[event_data["id"]], event_data
): ):
self.events_in_process[event_data["id"]] = event_data self.events_in_process[event_data["id"]] = event_data
@ -81,10 +86,31 @@ class EventProcessor(threading.Thread):
has_snapshot=event_data["has_snapshot"], has_snapshot=event_data["has_snapshot"],
).execute() ).execute()
elif event_type == "update" and should_update_db(
self.events_in_process[event_data["id"]], event_data
):
self.events_in_process[event_data["id"]] = event_data
# TODO: this will generate a lot of db activity possibly
if event_data["has_clip"] or event_data["has_snapshot"]:
Event.update(
label=event_data["label"],
camera=camera,
start_time=event_data["start_time"] - event_config.pre_capture,
end_time=None,
top_score=event_data["top_score"],
false_positive=event_data["false_positive"],
zones=list(event_data["entered_zones"]),
thumbnail=event_data["thumbnail"],
region=event_data["region"],
box=event_data["box"],
area=event_data["area"],
has_clip=event_data["has_clip"],
has_snapshot=event_data["has_snapshot"],
).where(Event.id == event_data["id"]).execute()
elif event_type == "end": elif event_type == "end":
if event_data["has_clip"] or event_data["has_snapshot"]: if event_data["has_clip"] or event_data["has_snapshot"]:
Event.replace( Event.update(
id=event_data["id"],
label=event_data["label"], label=event_data["label"],
camera=camera, camera=camera,
start_time=event_data["start_time"] - event_config.pre_capture, start_time=event_data["start_time"] - event_config.pre_capture,
@ -98,7 +124,7 @@ class EventProcessor(threading.Thread):
area=event_data["area"], area=event_data["area"],
has_clip=event_data["has_clip"], has_clip=event_data["has_clip"],
has_snapshot=event_data["has_snapshot"], has_snapshot=event_data["has_snapshot"],
).execute() ).where(Event.id == event_data["id"]).execute()
del self.events_in_process[event_data["id"]] del self.events_in_process[event_data["id"]]
self.event_processed_queue.put((event_data["id"], camera)) self.event_processed_queue.put((event_data["id"], camera))