63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
|
|
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
|