Files
crucible-agent-build-fastap…/app/models.py

57 lines
1.1 KiB
Python

from datetime import datetime, timezone
from enum import StrEnum
from uuid import UUID
from pydantic import AnyHttpUrl, BaseModel, ConfigDict, Field
def utc_now() -> datetime:
return datetime.now(timezone.utc)
class HealthState(StrEnum):
unknown = "unknown"
up = "up"
down = "down"
class MonitorCreate(BaseModel):
name: str = Field(min_length=1, max_length=120)
url: AnyHttpUrl
class MonitorUpdate(MonitorCreate):
pass
class CurrentStatus(BaseModel):
state: HealthState
checked_at: datetime
latency_ms: float = Field(ge=0)
http_status: int | None = None
error_code: str | None = None
error_message: str | None = None
class Monitor(BaseModel):
model_config = ConfigDict(frozen=True)
id: UUID
name: str
url: AnyHttpUrl
created_at: datetime
updated_at: datetime
revision: int
current_status: CurrentStatus | None = None
class CheckResponse(BaseModel):
monitor_id: UUID
status: CurrentStatus
applied: bool
class ErrorDetail(BaseModel):
code: str
message: str