Source code for pihole_lib.models.padd

"""PADD (Pi-hole API Dashboard Data) models."""

from pydantic import Field

from pihole_lib.models.base import StrictModel
from pihole_lib.models.system import CPUStats, FTLResourceUsage, MemoryStats, RAMStats


[docs] class PADDQueries(StrictModel): """PADD queries information.""" total: int = Field(..., description="Total number of queries") blocked: int = Field(..., description="Number of blocked queries") percent_blocked: float = Field(..., description="Percentage of queries blocked")
[docs] class PADDCache(StrictModel): """PADD cache information.""" size: int = Field(..., description="Cache size limit") inserted: int = Field(..., description="Number of entries inserted") evicted: int = Field(..., description="Number of entries evicted")
[docs] class PADDMemory(StrictModel): """PADD memory information.""" ram: RAMStats = Field(..., description="RAM information") swap: MemoryStats = Field(..., description="Swap information")
[docs] class PADDSystem(StrictModel): """PADD system information.""" uptime: int = Field(..., description="System uptime in seconds") memory: PADDMemory = 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 PADDNetworkBytes(StrictModel): """PADD network bytes information.""" value: float = Field(..., description="Byte value") unit: str = Field(..., description="Unit")
[docs] class PADDNetworkInterface(StrictModel): """PADD network interface information.""" addr: str | None = Field(None, description="IP address") rx_bytes: PADDNetworkBytes | None = Field(None, description="Received bytes") tx_bytes: PADDNetworkBytes | None = Field(None, description="Transmitted bytes") num_addrs: int = Field(..., description="Number of addresses") name: str = Field(..., description="Interface name") gw_addr: str | None = Field(None, description="Gateway address")
[docs] class PADDInterface(StrictModel): """PADD interface information.""" v4: PADDNetworkInterface = Field(..., description="IPv4 interface") v6: PADDNetworkInterface = Field(..., description="IPv6 interface")
[docs] class PADDVersionComponent(StrictModel): """PADD version component information.""" version: str = Field(..., description="Version string") branch: str | None = Field(None, description="Git branch") hash: str = Field(..., description="Git commit hash") date: str | None = Field(None, description="Build date")
[docs] class PADDVersionRemote(StrictModel): """PADD remote version information.""" version: str | None = Field(None, description="Version string") hash: str | None = Field(None, description="Git commit hash")
[docs] class PADDVersionInfo(StrictModel): """PADD version component info.""" local: PADDVersionComponent = Field(..., description="Local version") remote: PADDVersionRemote = Field(..., description="Remote version")
[docs] class PADDVersionDocker(StrictModel): """PADD Docker version information.""" local: str = Field(..., description="Local Docker version") remote: str = Field(..., description="Remote Docker version")
[docs] class PADDVersion(StrictModel): """PADD version information.""" core: PADDVersionInfo = Field(..., description="Pi-hole core version") web: PADDVersionInfo = Field(..., description="Pi-hole web version") ftl: PADDVersionInfo = Field(..., description="FTL version") docker: PADDVersionDocker = Field(..., description="Docker version")
[docs] class PADDConfig(StrictModel): """PADD configuration information.""" dhcp_active: bool = Field(..., description="Whether DHCP is active") dhcp_start: str = Field(..., description="DHCP start address") dhcp_end: str = Field(..., description="DHCP end address") dhcp_ipv6: bool = Field(..., description="Whether DHCP IPv6 is enabled") dns_domain: str = Field(..., description="DNS domain") dns_port: int = Field(..., description="DNS port") dns_num_upstreams: int = Field(..., description="Number of upstream DNS servers") dns_dnssec: bool = Field(..., description="Whether DNSSEC is enabled") dns_revServer_active: bool = Field( ..., description="Whether reverse DNS server is active" ) privacy_level: int = Field(..., description="Privacy level setting")
[docs] class PADDSensors(StrictModel): """PADD sensors information.""" cpu_temp: float | None = Field(None, description="CPU temperature") hot_limit: int = Field(..., description="Hot temperature limit") unit: str = Field(..., description="Temperature unit")
[docs] class PADDInfo(StrictModel): """Pi-hole PADD (Pi-hole API Dashboard Data) information.""" active_clients: int = Field(..., description="Number of active clients") gravity_size: int = Field(..., description="Size of gravity database") top_domain: str | None = Field(None, description="Top queried domain") top_blocked: str | None = Field(None, description="Top blocked domain") top_client: str | None = Field(None, description="Top client") recent_blocked: str | None = Field(None, description="Recently blocked domain") blocking: str = Field(..., description="Blocking status") queries: PADDQueries = Field(..., description="Query statistics") cache: PADDCache = Field(..., description="Cache information") system: PADDSystem = Field(..., description="System information") node_name: str = Field(..., description="Node/hostname") host_model: str | None = Field(None, description="Host model") iface: PADDInterface = Field(..., description="Network interface information") version: PADDVersion = Field(..., description="Version information") config: PADDConfig = Field(..., description="Configuration summary") percent_mem: float = Field(..., alias="%mem", description="Memory usage percentage") percent_cpu: float = Field(..., alias="%cpu", description="CPU usage percentage") pid: int = Field(..., description="Process ID") sensors: PADDSensors = Field(..., description="Temperature sensor information")