Spaces:
Running
Running
""" | |
定时任务控制路由模块 | |
""" | |
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"}, | |
) | |
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)}" | |
) | |
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)}" | |
) |