dashboard-nanobot/backend/bootstrap/app_runtime.py

40 lines
1.5 KiB
Python

import asyncio
from fastapi import FastAPI
from sqlmodel import Session, select
from core.cache import cache
from core.database import engine, init_database
from core.docker_instance import docker_manager
from core.settings import DATABASE_URL_DISPLAY, REDIS_ENABLED
from models.bot import BotInstance
from services.bot_storage_service import _migrate_bot_resources_store
from services.platform_service import prune_expired_activity_events
from services.runtime_service import docker_callback, set_main_loop
def reload_platform_runtime(app: FastAPI) -> None:
cache.delete_prefix("")
speech_service = getattr(app.state, "speech_service", None)
if speech_service is not None and hasattr(speech_service, "reset_runtime"):
speech_service.reset_runtime()
def register_app_runtime(app: FastAPI) -> None:
@app.on_event("startup")
async def _on_startup() -> None:
print(
f"🚀 Dashboard Backend 启动中... (DB: {DATABASE_URL_DISPLAY}, REDIS: {'Enabled' if REDIS_ENABLED else 'Disabled'})"
)
current_loop = asyncio.get_running_loop()
app.state.main_loop = current_loop
set_main_loop(current_loop)
init_database()
with Session(engine) as session:
prune_expired_activity_events(session, force=True)
bots = session.exec(select(BotInstance)).all()
for bot in bots:
_migrate_bot_resources_store(bot.id)
docker_manager.ensure_monitor(bot.id, docker_callback)
print("✅ 启动自检完成")