utp_service/backend/app/routers/dashboard.py
2026-05-05 11:32:25 +03:00

92 lines
4 KiB
Python

from fastapi import APIRouter, Depends
from app.dependencies import get_current_user
from app.models.user import User
from app.schemas.dashboard import (
DashboardCheckDefinitionPatchItem,
DashboardChecksResponse,
DashboardHomeSummaryResponse,
DashboardMonitorStatus,
DashboardObjectOverridePatchItem,
DashboardObjectPolicyPatchItem,
DashboardPolicyResponse,
DashboardRunRequest,
DashboardRunResponse,
DashboardTagPolicyPatchItem,
)
from app.services import dashboard_monitor as dashboard_service
router = APIRouter(prefix="/api/v1/dashboard", tags=["dashboard"])
@router.get("/home-summary", response_model=DashboardHomeSummaryResponse)
async def home_summary(
city: str | None = None,
client: str | None = None,
object_ids: list[int] | None = None,
tag_ids: list[int] | None = None,
_: User = Depends(get_current_user),
):
scope = {
"city": city,
"client": client,
"object_ids": object_ids or [],
"tag_ids": tag_ids or [],
}
data = await dashboard_service.get_home_summary(scope)
return DashboardHomeSummaryResponse.model_validate(data)
@router.get("/monitor/status", response_model=DashboardMonitorStatus)
async def monitor_status(_: User = Depends(get_current_user)):
row = await dashboard_service.get_monitor_status()
return DashboardMonitorStatus.model_validate(row)
@router.post("/monitor/run", response_model=DashboardRunResponse)
async def monitor_run(body: DashboardRunRequest, _: User = Depends(get_current_user)):
accepted, running, detail = await dashboard_service.request_manual_run(
scope=body.model_dump(exclude={"force"}),
force=body.force,
)
return DashboardRunResponse(accepted=accepted, running=running, detail=detail)
@router.get("/monitor/policy", response_model=DashboardPolicyResponse)
async def monitor_policy(_: User = Depends(get_current_user)):
object_policies, tag_policies = await dashboard_service.get_policy()
return DashboardPolicyResponse(object_policies=object_policies, tag_policies=tag_policies)
@router.patch("/monitor/policy/objects", response_model=DashboardPolicyResponse)
async def patch_object_policy(body: list[DashboardObjectPolicyPatchItem], _: User = Depends(get_current_user)):
await dashboard_service.patch_object_policy([i.model_dump() for i in body])
object_policies, tag_policies = await dashboard_service.get_policy()
return DashboardPolicyResponse(object_policies=object_policies, tag_policies=tag_policies)
@router.patch("/monitor/policy/tags", response_model=DashboardPolicyResponse)
async def patch_tag_policy(body: list[DashboardTagPolicyPatchItem], _: User = Depends(get_current_user)):
await dashboard_service.patch_tag_policy([i.model_dump() for i in body])
object_policies, tag_policies = await dashboard_service.get_policy()
return DashboardPolicyResponse(object_policies=object_policies, tag_policies=tag_policies)
@router.get("/checks", response_model=DashboardChecksResponse)
async def dashboard_checks(_: User = Depends(get_current_user)):
checks, overrides = await dashboard_service.list_checks_with_overrides()
return DashboardChecksResponse(checks=checks, object_overrides=overrides)
@router.patch("/checks", response_model=DashboardChecksResponse)
async def patch_checks(body: list[DashboardCheckDefinitionPatchItem], _: User = Depends(get_current_user)):
await dashboard_service.patch_checks([item.model_dump(exclude_none=True) for item in body])
checks, overrides = await dashboard_service.list_checks_with_overrides()
return DashboardChecksResponse(checks=checks, object_overrides=overrides)
@router.patch("/checks/object-overrides", response_model=DashboardChecksResponse)
async def patch_object_overrides(body: list[DashboardObjectOverridePatchItem], _: User = Depends(get_current_user)):
await dashboard_service.patch_object_overrides([item.model_dump(exclude_none=False) for item in body])
checks, overrides = await dashboard_service.list_checks_with_overrides()
return DashboardChecksResponse(checks=checks, object_overrides=overrides)