"""调度器相关路由""" from fastapi import APIRouter, Depends from services.scheduler_service import SchedulerService from repositories.settings_repo import SettingsRepository from core.db import get_db from api.deps import get_scheduler_service from core.log import logger router = APIRouter(prefix="/api/scheduler", tags=["scheduler"]) settings_repo = SettingsRepository() def success_response(message: str, data=None): return {"code": 200, "message": message, "data": data} def error_response(message: str, code: int = 500): return {"code": code, "message": message, "data": None} @router.post("/start") async def start_scheduler( scheduler: SchedulerService = Depends(get_scheduler_service), ): try: if scheduler.running: return success_response("验证调度器已在运行", {"running": True}) await scheduler.start() # 持久化设置 async with get_db() as db: settings = await settings_repo.get_all(db) settings["auto_validate"] = True from models.schemas import SettingsSchema await settings_repo.save(db, SettingsSchema(**settings).model_dump()) return success_response("验证调度器已启动", {"running": True}) except Exception as e: logger.error(f"Start scheduler failed: {e}") return error_response(f"启动调度器失败: {str(e)}") @router.post("/stop") async def stop_scheduler( scheduler: SchedulerService = Depends(get_scheduler_service), ): try: if not scheduler.running: return success_response("验证调度器未运行", {"running": False}) await scheduler.stop() # 持久化设置 async with get_db() as db: settings = await settings_repo.get_all(db) settings["auto_validate"] = False from models.schemas import SettingsSchema await settings_repo.save(db, SettingsSchema(**settings).model_dump()) return success_response("验证调度器已停止", {"running": False}) except Exception as e: logger.error(f"Stop scheduler failed: {e}") return error_response(f"停止调度器失败: {str(e)}") @router.post("/validate-now") async def validate_now( scheduler: SchedulerService = Depends(get_scheduler_service), ): try: scheduler.validate_all_now() return success_response("已开始全量验证", {"started": True}) except Exception as e: logger.error(f"Validate now failed: {e}") return error_response(f"启动验证失败: {str(e)}") @router.get("/status") async def scheduler_status( scheduler: SchedulerService = Depends(get_scheduler_service), ): return success_response( "获取状态成功", {"running": scheduler.running, "interval_minutes": scheduler.interval_minutes}, )