62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
import os
|
||
|
||
from django.apps import AppConfig
|
||
|
||
|
||
class AppConfig(AppConfig):
|
||
default_auto_field = 'django.db.models.BigAutoField'
|
||
name = 'app'
|
||
|
||
def ready(self):
|
||
# SQLite 优化:每个新连接执行 PRAGMA
|
||
# - journal_mode=DELETE:传统 rollback journal 模式,只产生一个 monitor.sqlite3 文件
|
||
# - busy_timeout=5000:写冲突等 5s 而非立即报错
|
||
# - cache_size=-65536:64MB 页缓存
|
||
# - temp_store=MEMORY:临时表用内存
|
||
from django.db.backends.signals import connection_created
|
||
|
||
def _setup_sqlite_pragma(sender, connection, **kwargs):
|
||
if connection.vendor != 'sqlite':
|
||
return
|
||
with connection.cursor() as cur:
|
||
cur.execute('PRAGMA journal_mode=DELETE;')
|
||
cur.execute('PRAGMA busy_timeout=5000;')
|
||
cur.execute('PRAGMA cache_size=-65536;')
|
||
cur.execute('PRAGMA temp_store=MEMORY;')
|
||
|
||
connection_created.connect(_setup_sqlite_pragma)
|
||
|
||
from monitor_runtime.paths import DESKTOP
|
||
if DESKTOP:
|
||
return # Desktop bootstrap migrates before accessing business tables.
|
||
|
||
try:
|
||
from app.utils.schema_upgrade import ensure_biz_algorithm_line_count_columns
|
||
ensure_biz_algorithm_line_count_columns()
|
||
except Exception as e:
|
||
import logging
|
||
logging.getLogger("app.bootstrap").warning("schema upgrade: %s", e)
|
||
|
||
try:
|
||
from django.contrib.auth.models import Group
|
||
for role in ("system_admin", "algorithm_admin", "operator", "viewer"):
|
||
Group.objects.get_or_create(name=role)
|
||
from app.utils.Credentials import migrate_existing_credentials
|
||
changed = migrate_existing_credentials()
|
||
if changed:
|
||
import logging
|
||
logging.getLogger("app.bootstrap").info("encrypted credentials in %d database rows", changed)
|
||
except Exception as e:
|
||
import logging
|
||
logging.getLogger("app.bootstrap").warning("security data upgrade: %s", e)
|
||
|
||
mode = os.environ.get("MONITOR_SERVICE_MODE", "disabled").strip().lower()
|
||
# Backward-compatible opt-in, still protected by the cross-process lock.
|
||
if mode == "disabled" and os.environ.get("MONITOR_BOOTSTRAP_SERVICES", "").lower() in (
|
||
"1", "true", "yes", "on"
|
||
):
|
||
mode = "embedded"
|
||
if mode == "embedded":
|
||
from app.services.lifecycle import get_service_manager
|
||
get_service_manager().start()
|