mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
ab50d0b006
* Add isort and ruff linter Both linters are pretty common among modern python code bases. The isort tool provides stable sorting and grouping, as well as pruning of unused imports. Ruff is a modern linter, that is very fast due to being written in rust. It can detect many common issues in a python codebase. Removes the pylint dev requirement, since ruff replaces it. * treewide: fix issues detected by ruff * treewide: fix bare except clauses * .devcontainer: Set up isort * treewide: optimize imports * treewide: apply black * treewide: make regex patterns raw strings This is necessary for escape sequences to be properly recognized.
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
"""Run recording maintainer and cleanup."""
|
|
|
|
import logging
|
|
import multiprocessing as mp
|
|
import signal
|
|
import threading
|
|
from types import FrameType
|
|
from typing import Optional
|
|
|
|
from playhouse.sqliteq import SqliteQueueDatabase
|
|
from setproctitle import setproctitle
|
|
|
|
from frigate.config import FrigateConfig
|
|
from frigate.models import Event, Recordings, Timeline
|
|
from frigate.record.cleanup import RecordingCleanup
|
|
from frigate.record.maintainer import RecordingMaintainer
|
|
from frigate.types import RecordMetricsTypes
|
|
from frigate.util import listen
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def manage_recordings(
|
|
config: FrigateConfig,
|
|
recordings_info_queue: mp.Queue,
|
|
process_info: dict[str, RecordMetricsTypes],
|
|
) -> None:
|
|
stop_event = mp.Event()
|
|
|
|
def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None:
|
|
stop_event.set()
|
|
|
|
signal.signal(signal.SIGTERM, receiveSignal)
|
|
signal.signal(signal.SIGINT, receiveSignal)
|
|
|
|
threading.current_thread().name = "process:recording_manager"
|
|
setproctitle("frigate.recording_manager")
|
|
listen()
|
|
|
|
db = SqliteQueueDatabase(config.database.path)
|
|
models = [Event, Recordings, Timeline]
|
|
db.bind(models)
|
|
|
|
maintainer = RecordingMaintainer(
|
|
config, recordings_info_queue, process_info, stop_event
|
|
)
|
|
maintainer.start()
|
|
|
|
cleanup = RecordingCleanup(config, stop_event)
|
|
cleanup.start()
|
|
|
|
logger.info("recording_manager: exiting subprocess")
|