1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
"""Models for host APIs."""
from dataclasses import dataclass
from datetime import datetime
from enum import StrEnum
from .base import Request, ResponseData
from .root import HostFeature
# --- ENUMS ----
class ServiceState(StrEnum):
"""ServiceState type.
The service state is determined by systemd, not supervisor. The list below
is pulled from `systemctl --state=help`. It may be incomplete and it may
change based on the host. Therefore within a list of services there may be
some with a state not in this list parsed as string. If you find this
please create an issue or pr to get the state added.
"""
ACTIVE = "active"
RELOADING = "reloading"
INACTIVE = "inactive"
FAILED = "failed"
ACTIVATING = "activating"
DEACTIVATING = "deactivating"
MAINTENANCE = "maintenance"
# --- OBJECTS ----
@dataclass(frozen=True, slots=True)
class HostInfo(ResponseData):
"""HostInfo model."""
agent_version: str | None
apparmor_version: str | None
chassis: str | None
virtualization: str | None
cpe: str | None
deployment: str | None
disk_free: float
disk_total: float
disk_used: float
disk_life_time: float | None
features: list[HostFeature]
hostname: str | None
llmnr_hostname: str | None
kernel: str | None
operating_system: str | None
timezone: str | None
dt_utc: datetime | None
dt_synchronized: bool | None
use_ntp: bool | None
startup_time: float | None
boot_timestamp: int | None
broadcast_llmnr: bool | None
broadcast_mdns: bool | None
@dataclass(frozen=True, slots=True)
class ShutdownOptions(Request):
"""ShutdownOptions model."""
force: bool
@dataclass(frozen=True, slots=True)
class RebootOptions(Request):
"""RebootOptions model."""
force: bool
@dataclass(frozen=True, slots=True)
class HostOptions(Request):
"""HostOptions model."""
hostname: str
@dataclass(frozen=True, slots=True)
class Service(ResponseData):
"""Service model."""
name: str
description: str
state: ServiceState | str
@dataclass(frozen=True, slots=True)
class ServiceList(ResponseData):
"""ServiceList model."""
services: list[Service]
@dataclass(frozen=True, slots=True)
class DiskUsage(ResponseData):
"""DiskUsage model."""
id: str
used_bytes: int
label: str | None = None
total_bytes: int | None = None
children: list["DiskUsage"] | None = None
|