utp_service/backend/app/schemas/dashboard.py
2026-05-05 11:39:02 +03:00

141 lines
3.5 KiB
Python

from datetime import datetime
from typing import Any, Literal, Optional
from pydantic import BaseModel, Field
MonitorPolicyMode = Literal["inherit", "include", "exclude"]
class DashboardScope(BaseModel):
city: Optional[str] = None
client: Optional[str] = None
object_ids: list[int] = Field(default_factory=list)
tag_ids: list[int] = Field(default_factory=list)
class DashboardCheckDefinitionRead(BaseModel):
check_key: str
enabled: bool
interval_sec_default: int
plugin_action: str
categories: list[str]
timeout_sec: int
concurrency: int
updated_at: datetime
model_config = {"from_attributes": True}
class DashboardCheckDefinitionPatchItem(BaseModel):
check_key: str
enabled: Optional[bool] = None
interval_sec_default: Optional[int] = None
categories: Optional[list[str]] = None
timeout_sec: Optional[int] = None
concurrency: Optional[int] = None
class DashboardObjectOverrideRead(BaseModel):
object_id: int
check_key: str
enabled_override: Optional[bool] = None
interval_sec_override: Optional[int] = None
categories_override: Optional[list[str]] = None
updated_at: datetime
model_config = {"from_attributes": True}
class DashboardObjectOverridePatchItem(BaseModel):
object_id: int
check_key: str
enabled_override: Optional[bool] = None
interval_sec_override: Optional[int] = None
categories_override: Optional[list[str]] = None
class DashboardObjectPolicyRead(BaseModel):
object_id: int
mode: MonitorPolicyMode
updated_at: datetime
model_config = {"from_attributes": True}
class DashboardObjectPolicyPatchItem(BaseModel):
object_id: int
mode: MonitorPolicyMode
class DashboardTagPolicyRead(BaseModel):
tag_id: int
enabled: bool
updated_at: datetime
model_config = {"from_attributes": True}
class DashboardTagPolicyPatchItem(BaseModel):
tag_id: int
enabled: bool
class DashboardPolicyResponse(BaseModel):
object_policies: list[DashboardObjectPolicyRead]
tag_policies: list[DashboardTagPolicyRead]
class DashboardChecksResponse(BaseModel):
checks: list[DashboardCheckDefinitionRead]
object_overrides: list[DashboardObjectOverrideRead]
class DashboardRunRequest(DashboardScope):
force: bool = True
class DashboardRunResponse(BaseModel):
accepted: bool
running: bool
detail: str
class DashboardMonitorStatus(BaseModel):
status: str
run_type: Optional[str] = None
scope: Optional[dict[str, Any]] = None
started_at: Optional[datetime] = None
finished_at: Optional[datetime] = None
last_success_at: Optional[datetime] = None
last_error: Optional[str] = None
last_counts: Optional[dict[str, Any]] = None
model_config = {"from_attributes": True}
class DashboardObjectCheckSummary(BaseModel):
status_counts: dict[str, int]
last_checked_at: Optional[datetime] = None
max_age_sec: Optional[int] = None
class DashboardObjectSummary(BaseModel):
object_id: int
object_name: str
city: Optional[str] = None
client: Optional[str] = None
allowed: bool
monitor_mode: MonitorPolicyMode
device_count: int
checks: dict[str, DashboardObjectCheckSummary]
health_score: Optional[float] = None
class DashboardHomeSummaryResponse(BaseModel):
generated_at: datetime
scope: DashboardScope
totals: dict[str, int]
checks_meta: list[DashboardCheckDefinitionRead]
objects: list[DashboardObjectSummary]
problem_objects: list[DashboardObjectSummary]