Handle external events in the event queue

This commit is contained in:
Nick Mowen 2023-05-01 08:17:10 -06:00
parent 5456902a76
commit 4d35b92e8a
2 changed files with 33 additions and 3 deletions

View File

@ -60,4 +60,6 @@ class ExternalEventProcessor:
def finish_manual_event(self, event_id: str): def finish_manual_event(self, event_id: str):
"""Finish external event with indeterminate duration.""" """Finish external event with indeterminate duration."""
now = datetime.datetime.now().timestamp() now = datetime.datetime.now().timestamp()
self.queue.put((EventTypeEnum.api, "end", None, {"end_time": now})) self.queue.put(
(EventTypeEnum.api, "end", None, {"id": event_id, "end_time": now})
)

View File

@ -1,11 +1,9 @@
import datetime import datetime
import logging import logging
import os
import queue import queue
import threading import threading
from enum import Enum from enum import Enum
from pathlib import Path
from peewee import fn from peewee import fn
@ -96,6 +94,8 @@ class EventProcessor(threading.Thread):
continue continue
self.handle_object_detection(event_type, camera, event_data) self.handle_object_detection(event_type, camera, event_data)
elif source_type == EventTypeEnum.api:
self.handle_external_detection(event_type, event_data)
# set an end_time on events without an end_time before exiting # set an end_time on events without an end_time before exiting
Event.update(end_time=datetime.datetime.now().timestamp()).where( Event.update(end_time=datetime.datetime.now().timestamp()).where(
@ -195,3 +195,31 @@ class EventProcessor(threading.Thread):
if event_type == "end": if event_type == "end":
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))
def handle_external_detection(self, type: str, event_data: Event):
if type == "new":
event = {
Event.id: event_data["id"],
Event.label: event_data["label"],
Event.sub_label: event_data["sub_label"],
Event.camera: event_data["camera"],
Event.start_time: event_data["start_time"],
Event.end_time: event_data["end_time"],
Event.thumbnail: event_data["thumbnail"],
Event.has_clip: event_data["has_clip"],
Event.has_snapshot: event_data["has_snapshot"],
}
elif type == "end":
event = {
Event.id: event_data["id"],
Event.end_time: event_data["end_time"],
}
(
Event.insert(event)
.on_conflict(
conflict_target=[Event.id],
update=event,
)
.execute()
)