Source code for pihole_lib.models.system

"""System resource models."""

from pydantic import Field

from pihole_lib.models.base import StrictModel


[docs] class MemoryStats(StrictModel): """Memory statistics (RAM or Swap).""" total: int = Field(..., description="Total memory in KB") free: int = Field(..., description="Free memory in KB") used: int = Field(..., description="Used memory in KB") percent_used: float = Field( ..., alias="%used", description="Percentage of memory used" )
[docs] class RAMStats(MemoryStats): """RAM statistics with available memory.""" available: int = Field(..., description="Available memory in KB")
[docs] class Memory(StrictModel): """Combined RAM and swap memory information.""" ram: RAMStats = Field(..., description="RAM information") swap: MemoryStats = Field(..., description="Swap information")
[docs] class CPULoad(StrictModel): """CPU load averages.""" raw: list[float] = Field(..., description="Raw load averages (1, 5, 15 minutes)") percent: list[float] = Field(..., description="Load averages as percentages")
[docs] class CPUStats(StrictModel): """CPU statistics.""" nprocs: int = Field(..., description="Number of CPU cores") percent_cpu: float = Field(..., alias="%cpu", description="CPU usage percentage") load: CPULoad = Field(..., description="Load average information")
[docs] class FTLResourceUsage(StrictModel): """FTL process resource usage.""" percent_mem: float = Field( ..., alias="%mem", description="FTL memory usage percentage" ) percent_cpu: float = Field( ..., alias="%cpu", description="FTL CPU usage percentage" )
[docs] class NetworkBytes(StrictModel): """Network byte count with unit.""" value: float = Field(..., description="Byte value") unit: str = Field(..., description="Unit (e.g., 'K', 'M', 'G')")
[docs] class SystemDetails(StrictModel): """System resource details.""" uptime: int = Field(..., description="System uptime in seconds") memory: Memory = Field(..., description="Memory information") procs: int = Field(..., description="Number of processes") cpu: CPUStats = Field(..., description="CPU information") ftl: FTLResourceUsage = Field(..., description="FTL resource usage")
[docs] class SystemInfo(StrictModel): """Pi-hole system information wrapper.""" system: SystemDetails = Field(..., description="System details")