38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""Scheduler API 路由。"""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from ..database import get_db
|
|
from ..dependencies import require_manager_user
|
|
from ..models import User
|
|
from ..services import workload_service
|
|
|
|
router = APIRouter(prefix="/scheduler", tags=["scheduler"])
|
|
|
|
|
|
@router.get("/health")
|
|
async def scheduler_health() -> dict:
|
|
"""调度模块健康检查。"""
|
|
return {"code": 0, "message": "success", "data": {"status": "ok"}}
|
|
|
|
|
|
@router.post("/workloads/recalc")
|
|
async def trigger_workload_recalc(
|
|
current_user: User = Depends(require_manager_user),
|
|
db: AsyncSession = Depends(get_db),
|
|
) -> dict:
|
|
"""手动触发一次负载重算。"""
|
|
_ = current_user
|
|
tenant_ids = await workload_service.list_tenant_ids(db)
|
|
if not tenant_ids:
|
|
tenant_ids = [1]
|
|
total = 0
|
|
for tenant_id in tenant_ids:
|
|
total += await workload_service.recalculate_all_users_workload_ratio(db, tenant_id=tenant_id)
|
|
return {
|
|
"code": 0,
|
|
"message": "success",
|
|
"data": {"tenant_count": len(tenant_ids), "user_count": total},
|
|
}
|