53 lines
1.7 KiB
Python
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]
|