from datetime import datetime from pydantic import BaseModel, Field class HostSummary(BaseModel): id: int hostname: str display_name: str | None os_family: str os_version: str | None = None product: str product_version: str | None ipv4: str | None last_seen_at: datetime event_count: int | None = None last_heartbeat_at: datetime | None = None last_daily_report_at: datetime | None = None last_inventory_at: datetime | None = None agent_status: str = "unknown" model_config = {"from_attributes": True} class HostDetail(HostSummary): agent_instance_id: str | None = None ipv6: str | None = None tags: list | None = None use_sac_mode: str | None = None inventory: dict | None = None inventory_updated_at: datetime | None = None created_at: datetime | None = None class HostListResponse(BaseModel): items: list[HostSummary] total: int page: int page_size: int latest_agent_versions: dict[str, str] = Field(default_factory=dict) class EventSummary(BaseModel): id: int event_id: str host_id: int hostname: str display_name: str | None = None product_version: str | None = None occurred_at: datetime received_at: datetime category: str type: str severity: str title: str summary: str actor_user: str | None = None model_config = {"from_attributes": True} class EventDetail(EventSummary): details: dict | None = None raw: dict | None = None dedup_key: str | None = None correlation_id: str | None = None payload: dict class EventListResponse(BaseModel): items: list[EventSummary] total: int page: int page_size: int