from datetime import datetime from typing import Dict, List, Literal, Optional from pydantic import BaseModel, Field HealthStatus = Literal['pass', 'warn', 'fail'] ActionStatus = Literal['accepted', 'completed', 'failed'] ServiceActiveState = Literal['active', 'reloading', 'inactive', 'failed', 'activating', 'deactivating'] class CheckResult(BaseModel): status: HealthStatus latency_ms: Optional[float] = None detail: Optional[str] = None class HealthResponse(BaseModel): status: HealthStatus service: str version: Optional[str] = None time: datetime uptime_s: Optional[float] = None checks: Dict[str, CheckResult] = Field(default_factory=dict) class ServiceState(BaseModel): name: str description: Optional[str] = None active_state: ServiceActiveState sub_state: str loaded: str status: HealthStatus pid: Optional[int] = None since: Optional[datetime] = None health_url: Optional[str] = None reachable: Optional[bool] = None notes: Optional[str] = None class ServiceListResponse(BaseModel): count: int time: datetime items: List[ServiceState] class RuntimeResponse(BaseModel): status: HealthStatus service: str version: Optional[str] = None time: datetime hostname: str uptime_s: Optional[float] = None services: List[ServiceState] checks: Dict[str, CheckResult] = Field(default_factory=dict) class ServiceActionResponse(BaseModel): status: ActionStatus action: Literal['start', 'stop', 'restart'] service: str job_id: Optional[str] = None message: Optional[str] = None time: datetime