Refactored to database.py

This commit is contained in:
Anton Priestley 2022-08-14 17:30:26 +01:00
parent 119fa01101
commit 0852e5b326
2 changed files with 55 additions and 45 deletions

View File

@ -10,11 +10,6 @@ from typing import Dict, List
import traceback import traceback
import yaml import yaml
from peewee_migrate import Router
from playhouse.sqlite_ext import SqliteExtDatabase
from playhouse.sqliteq import SqliteQueueDatabase
from peewee import MySQLDatabase
from playhouse.shortcuts import ReconnectMixin
from pydantic import ValidationError from pydantic import ValidationError
from frigate.config import DetectorTypeEnum, FrigateConfig from frigate.config import DetectorTypeEnum, FrigateConfig
@ -23,7 +18,6 @@ from frigate.edgetpu import EdgeTPUProcess
from frigate.events import EventCleanup, EventProcessor from frigate.events import EventCleanup, EventProcessor
from frigate.http import create_app from frigate.http import create_app
from frigate.log import log_process, root_configurer from frigate.log import log_process, root_configurer
from frigate.models import Event, Recordings
from frigate.mqtt import MqttSocketRelay, create_mqtt_client from frigate.mqtt import MqttSocketRelay, create_mqtt_client
from frigate.object_processing import TrackedObjectProcessor from frigate.object_processing import TrackedObjectProcessor
from frigate.output import output_frames from frigate.output import output_frames
@ -32,12 +26,10 @@ from frigate.stats import StatsEmitter, stats_init
from frigate.version import VERSION from frigate.version import VERSION
from frigate.video import capture_camera, track_camera from frigate.video import capture_camera, track_camera
from frigate.watchdog import FrigateWatchdog from frigate.watchdog import FrigateWatchdog
from frigate.database import resolve_db_from_config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
pass
class FrigateApp: class FrigateApp:
def __init__(self): def __init__(self):
self.stop_event = mp.Event() self.stop_event = mp.Event()
@ -120,42 +112,7 @@ class FrigateApp:
self.recordings_info_queue = mp.Queue() self.recordings_info_queue = mp.Queue()
def init_database(self): def init_database(self):
if self.config.database.type == "sqlite": self.db = resolve_db_from_config(self.config)
# Migrate DB location
old_db_path = os.path.join(CLIPS_DIR, "frigate.db")
if not os.path.isfile(self.config.database.path) and os.path.isfile(
old_db_path
):
os.rename(old_db_path, self.config.database.path)
# Migrate DB schema
migrate_db = SqliteExtDatabase(self.config.database.path)
# Run migrations
del logging.getLogger("peewee_migrate").handlers[:]
router = Router(migrate_db)
router.run()
migrate_db.close()
self.db = SqliteQueueDatabase(self.config.database.path)
models = [Event, Recordings]
self.db.bind(models)
elif self.config.database.type == "mysql":
self.db = ReconnectMySQLDatabase(self.config.database.database,
host=self.config.database.host,
port=self.config.database.port,
user=self.config.database.user,
passwd=self.config.database.password
)
models = [Event, Recordings]
self.db.bind(models)
Event.create_table()
Recordings.create_table()
models = [Event, Recordings]
self.db.bind(models)
def init_stats(self): def init_stats(self):
self.stats_tracking = stats_init(self.camera_metrics, self.detectors) self.stats_tracking = stats_init(self.camera_metrics, self.detectors)

53
frigate/database.py Normal file
View File

@ -0,0 +1,53 @@
import os
import logging
from peewee import MySQLDatabase
from peewee_migrate import Router
from playhouse.sqlite_ext import SqliteExtDatabase
from playhouse.sqliteq import SqliteQueueDatabase
from playhouse.shortcuts import ReconnectMixin
from frigate.const import CLIPS_DIR
from frigate.models import Event, Recordings
class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
pass
def resolve_db_from_config(config):
db = None
if config.database.type == "sqlite":
# Migrate DB location
old_db_path = os.path.join(CLIPS_DIR, "frigate.db")
if not os.path.isfile(config.database.path) and os.path.isfile(
old_db_path
):
os.rename(old_db_path, config.database.path)
# Migrate DB schema
migrate_db = SqliteExtDatabase(config.database.path)
# Run migrations
del logging.getLogger("peewee_migrate").handlers[:]
router = Router(migrate_db)
router.run()
migrate_db.close()
db = SqliteQueueDatabase(config.database.path)
models = [Event, Recordings]
db.bind(models)
elif config.database.type == "mysql":
db = ReconnectMySQLDatabase(config.database.database,
host=config.database.host,
port=config.database.port,
user=config.database.user,
passwd=config.database.password
)
models = [Event, Recordings]
db.bind(models)
Event.create_table()
Recordings.create_table()
models = [Event, Recordings]
db.bind(models)
return db