74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
|
|
"""Response schemas for gateway operational visibility endpoints.
|
||
|
|
|
||
|
|
Covers: cron job status, system health snapshots, and health history.
|
||
|
|
All fields are optional — partial data is expected when the gateway
|
||
|
|
returns unexpected formats or a field is simply absent.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from datetime import datetime
|
||
|
|
from uuid import UUID
|
||
|
|
|
||
|
|
from sqlmodel import SQLModel
|
||
|
|
|
||
|
|
RUNTIME_ANNOTATION_TYPES = (datetime, UUID)
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Cron
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
class CronJobRead(SQLModel):
|
||
|
|
"""One cron job entry returned by GET /gateways/{id}/cron."""
|
||
|
|
|
||
|
|
name: str
|
||
|
|
schedule: str = ""
|
||
|
|
enabled: bool = True
|
||
|
|
status: str # "ok" | "error" | "running" | "pending" | "disabled" | "unknown"
|
||
|
|
last_run: str | None = None
|
||
|
|
next_run: str | None = None
|
||
|
|
last_duration_ms: int | None = None
|
||
|
|
last_error: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class CronStatusResponse(SQLModel):
|
||
|
|
"""Response for GET /gateways/{id}/cron."""
|
||
|
|
|
||
|
|
gateway_id: UUID
|
||
|
|
generated_at: datetime
|
||
|
|
jobs: list[CronJobRead]
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Health
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
class HealthSnapshotRead(SQLModel):
|
||
|
|
"""One system health reading."""
|
||
|
|
|
||
|
|
recorded_at: datetime
|
||
|
|
cpu_pct: float | None = None
|
||
|
|
memory_pct: float | None = None
|
||
|
|
memory_used_bytes: int | None = None
|
||
|
|
memory_total_bytes: int | None = None
|
||
|
|
disk_pct: float | None = None
|
||
|
|
disk_used_bytes: int | None = None
|
||
|
|
disk_total_bytes: int | None = None
|
||
|
|
uptime_seconds: int | None = None
|
||
|
|
load_avg_1m: float | None = None
|
||
|
|
load_avg_5m: float | None = None
|
||
|
|
load_avg_15m: float | None = None
|
||
|
|
hostname: str | None = None
|
||
|
|
platform: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class SystemHealthResponse(SQLModel):
|
||
|
|
"""Response for GET /gateways/{id}/health."""
|
||
|
|
|
||
|
|
gateway_id: UUID
|
||
|
|
generated_at: datetime
|
||
|
|
current: HealthSnapshotRead
|
||
|
|
history: list[HealthSnapshotRead] # oldest-first, last 24 hours
|
||
|
|
history_window_hours: int = 24
|