""" 定时任务控制路由模块 """ from fastapi import APIRouter, Request, HTTPException, status from fastapi.responses import JSONResponse from app.core.security import verify_auth_token from app.scheduler.scheduled_tasks import start_scheduler, stop_scheduler from app.log.logger import get_scheduler_routes logger = get_scheduler_routes() router = APIRouter( prefix="/api/scheduler", tags=["Scheduler"] ) async def verify_token(request: Request): auth_token = request.cookies.get("auth_token") if not auth_token or not verify_auth_token(auth_token): logger.warning("Unauthorized access attempt to scheduler API") raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated", headers={"WWW-Authenticate": "Bearer"}, ) @router.post("/start", summary="启动定时任务") async def start_scheduler_endpoint(request: Request): """Start the background scheduler task""" await verify_token(request) try: logger.info("Received request to start scheduler.") start_scheduler() return JSONResponse(content={"message": "Scheduler started successfully."}, status_code=status.HTTP_200_OK) except Exception as e: logger.error(f"Error starting scheduler: {str(e)}", exc_info=True) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to start scheduler: {str(e)}" ) @router.post("/stop", summary="停止定时任务") async def stop_scheduler_endpoint(request: Request): """Stop the background scheduler task""" await verify_token(request) try: logger.info("Received request to stop scheduler.") stop_scheduler() return JSONResponse(content={"message": "Scheduler stopped successfully."}, status_code=status.HTTP_200_OK) except Exception as e: logger.error(f"Error stopping scheduler: {str(e)}", exc_info=True) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to stop scheduler: {str(e)}" )