54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Provide info to system health."""
|
|
|
|
from typing import Any
|
|
|
|
from homeassistant.components import system_health
|
|
from homeassistant.core import HomeAssistant, callback
|
|
|
|
from . import Adapter, async_get_adapters, async_get_announce_addresses
|
|
from .models import IPv4ConfiguredAddress, IPv6ConfiguredAddress
|
|
|
|
|
|
@callback
|
|
def async_register(
|
|
hass: HomeAssistant, register: system_health.SystemHealthRegistration
|
|
) -> None:
|
|
"""Register system health callbacks."""
|
|
register.async_register_info(system_health_info, "/config/network")
|
|
|
|
|
|
def _format_ips(ips: list[IPv4ConfiguredAddress] | list[IPv6ConfiguredAddress]) -> str:
|
|
return ", ".join([f"{ip['address']}/{ip['network_prefix']!s}" for ip in ips])
|
|
|
|
|
|
def _get_adapter_info(adapter: Adapter) -> str:
|
|
state = "enabled" if adapter["enabled"] else "disabled"
|
|
default = ", default" if adapter["default"] else ""
|
|
auto = ", auto" if adapter["auto"] else ""
|
|
return f"{adapter['name']} ({state}{default}{auto})"
|
|
|
|
|
|
async def system_health_info(hass: HomeAssistant) -> dict[str, Any]:
|
|
"""Get info for the info page."""
|
|
|
|
adapters = await async_get_adapters(hass)
|
|
data: dict[str, Any] = {
|
|
# k: v for adapter in adapters for k, v in _get_adapter_info(adapter).items()
|
|
"adapters": ", ".join([_get_adapter_info(adapter) for adapter in adapters]),
|
|
"ipv4_addresses": ", ".join(
|
|
[
|
|
f"{adapter['name']} ({_format_ips(adapter['ipv4'])})"
|
|
for adapter in adapters
|
|
]
|
|
),
|
|
"ipv6_addresses": ", ".join(
|
|
[
|
|
f"{adapter['name']} ({_format_ips(adapter['ipv6'])})"
|
|
for adapter in adapters
|
|
]
|
|
),
|
|
"announce_addresses": ", ".join(await async_get_announce_addresses(hass)),
|
|
}
|
|
|
|
return data
|