huibao/backend/app/routers/scheduler.py

53 lines
1.7 KiB
Python
Raw Permalink Normal View History

"""
定时任务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]