Source code for unifi_controller_api.models.health

"""
Models for UniFi health data and related objects.
"""

from dataclasses import dataclass, field
from typing import Any, Dict, Optional


[docs] @dataclass class UnifiSubsystemHealth: """ Represents health data for a specific UniFi subsystem. Subsystems can include: wlan, lan, vpn, www, wan, etc. Each subsystem can have different metrics, but they all share a common "status" indicator. """ subsystem: str status: Optional[str] = None num_user: Optional[int] = None num_guest: Optional[int] = None num_iot: Optional[int] = None tx_bytes_r: Optional[int] = field( default=None, metadata={"unifi_api_field": "tx_bytes-r"}) rx_bytes_r: Optional[int] = field( default=None, metadata={"unifi_api_field": "rx_bytes-r"}) num_ap: Optional[int] = None num_sw: Optional[int] = None num_gw: Optional[int] = None num_adopted: Optional[int] = None num_disabled: Optional[int] = None num_disconnected: Optional[int] = None num_pending: Optional[int] = None _extra_fields: Dict[str, Any] = field(default_factory=dict, repr=False)
[docs] def to_dict(self) -> Dict[str, Any]: """Convert to dictionary, excluding None values and internal fields.""" result = {} for key, value in self.__dict__.items(): if not key.startswith('_') and value is not None: result[key] = value return result
[docs] @dataclass class UnifiHealth: """ Represents comprehensive health data for a UniFi site. This acts as a container for all subsystem health data associated with a specific site. """ site_name: str subsystems: Dict[str, UnifiSubsystemHealth] = field(default_factory=dict)
[docs] def to_dict(self) -> Dict[str, Any]: """Convert to dictionary with subsystems expanded to dictionaries.""" result = { "site_name": self.site_name } for name, subsystem in self.subsystems.items(): result[name] = subsystem.to_dict() return result
[docs] def add_subsystem(self, subsystem: UnifiSubsystemHealth) -> None: """Add a subsystem to this health object.""" if subsystem.subsystem: self.subsystems[subsystem.subsystem] = subsystem