mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 10:45:21 +03:00
Handle external events in the event queue
This commit is contained in:
parent
5456902a76
commit
4d35b92e8a
@ -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})
|
||||||
|
)
|
||||||
|
|||||||
@ -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()
|
||||||
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user