huibao/backend/app/routers/scheduler.py

53 lines
1.7 KiB
Python

"""
定时任务API
"""
from fastapi import APIRouter, Depends
from typing import List
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select, desc
from app.database import get_db
from app.models import TaskLog
from app.schemas import SchedulerStatus, SchedulerConfig, MessageResponse, TaskLogResponse
from app.services.scheduler_service import scheduler_service
from app.config import settings
router = APIRouter(prefix="/api/scheduler", tags=["定时任务"])
@router.get("/status", response_model=SchedulerStatus)
async def get_status():
"""获取调度器状态"""
return scheduler_service.get_status()
@router.post("/start", response_model=MessageResponse)
async def start_scheduler():
"""启动调度器"""
scheduler_service.start()
return MessageResponse(success=True, message="调度器已启动")
@router.post("/stop", response_model=MessageResponse)
async def stop_scheduler():
"""停止调度器"""
scheduler_service.stop()
return MessageResponse(success=True, message="调度器已停止")
@router.post("/run-now", response_model=MessageResponse)
async def run_now():
"""立即执行同步任务"""
import asyncio
asyncio.create_task(scheduler_service.run_once())
return MessageResponse(success=True, message="已触发同步任务")
@router.get("/logs", response_model=List[TaskLogResponse])
async def get_logs(limit: int = 20, db: AsyncSession = Depends(get_db)):
"""获取任务日志"""
stmt = select(TaskLog).order_by(desc(TaskLog.started_at)).limit(limit)
result = await db.execute(stmt)
logs = result.scalars().all()
return [TaskLogResponse.model_validate(log) for log in logs]