86 lines
2.1 KiB
Python
86 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import Field
|
|
|
|
from app.models.common import APIModel, DockerContainerState, OverallStatus, SourceStatus
|
|
|
|
|
|
class BeszelDiskMetric(APIModel):
|
|
name: str
|
|
mount: str
|
|
used_gb: float
|
|
total_gb: float
|
|
free_gb: float
|
|
usage_percent: float
|
|
|
|
|
|
class BeszelSystemSnapshot(APIModel):
|
|
source_name: str = "beszel"
|
|
source_status: SourceStatus = "offline"
|
|
host_name: str = "unknown"
|
|
agent_name: str = "beszel-agent"
|
|
cpu_usage_percent: float = 0.0
|
|
cpu_cores: int = 0
|
|
load_1: float = 0.0
|
|
load_5: float = 0.0
|
|
load_15: float = 0.0
|
|
memory_used_gb: float = 0.0
|
|
memory_total_gb: float = 0.0
|
|
memory_available_gb: float = 0.0
|
|
memory_usage_percent: float = 0.0
|
|
primary_interface: str = "unknown"
|
|
network_rx_mbps: float = 0.0
|
|
network_tx_mbps: float = 0.0
|
|
uptime_seconds: int = 0
|
|
platform: str = "unknown"
|
|
kernel: str = "unknown"
|
|
disks: list[BeszelDiskMetric] = Field(default_factory=list)
|
|
|
|
|
|
class DockerContainerSummary(APIModel):
|
|
id: str
|
|
name: str
|
|
state: DockerContainerState
|
|
status_text: str
|
|
image: str
|
|
health: str | None = None
|
|
|
|
|
|
class DockerSnapshot(APIModel):
|
|
source_name: str = "docker"
|
|
source_status: SourceStatus = "offline"
|
|
running: int = 0
|
|
stopped: int = 0
|
|
unhealthy: int = 0
|
|
total: int = 0
|
|
containers: list[DockerContainerSummary] = Field(default_factory=list)
|
|
|
|
|
|
class UptimeKumaMonitor(APIModel):
|
|
id: str
|
|
name: str
|
|
status: OverallStatus
|
|
latency_ms: int | None = None
|
|
monitor_type: str | None = None
|
|
|
|
|
|
class UptimeKumaSnapshot(APIModel):
|
|
source_name: str = "uptime_kuma"
|
|
source_status: SourceStatus = "offline"
|
|
monitors_up: int = 0
|
|
monitors_down: int = 0
|
|
monitors_paused: int = 0
|
|
total: int = 0
|
|
monitors: list[UptimeKumaMonitor] = Field(default_factory=list)
|
|
|
|
|
|
class HomeAssistantSnapshot(APIModel):
|
|
source_name: str = "home_assistant"
|
|
status: SourceStatus = "offline"
|
|
label: str = "Home Assistant"
|
|
version: str | None = None
|
|
response_time_ms: int | None = None
|
|
last_checked: datetime | None = None
|