core/homeassistant/components/lovelace/system_health.py

52 lines
1.6 KiB
Python

"""Provide info to system health."""
import asyncio
from homeassistant.components import system_health
from homeassistant.const import CONF_MODE
from homeassistant.core import HomeAssistant, callback
from .const import DOMAIN, MODE_AUTO, MODE_STORAGE, MODE_YAML
@callback
def async_register(
hass: HomeAssistant, register: system_health.SystemHealthRegistration
) -> None:
"""Register system health callbacks."""
register.async_register_info(system_health_info, "/config/lovelace")
async def system_health_info(hass):
"""Get info for the info page."""
health_info = {"dashboards": len(hass.data[DOMAIN]["dashboards"])}
health_info.update(await hass.data[DOMAIN]["resources"].async_get_info())
dashboards_info = await asyncio.gather(
*(
hass.data[DOMAIN]["dashboards"][dashboard].async_get_info()
for dashboard in hass.data[DOMAIN]["dashboards"]
)
)
modes = set()
for dashboard in dashboards_info:
for key in dashboard:
if isinstance(dashboard[key], int):
health_info[key] = health_info.get(key, 0) + dashboard[key]
elif key == CONF_MODE:
modes.add(dashboard[key])
else:
health_info[key] = dashboard[key]
if hass.data[DOMAIN][CONF_MODE] == MODE_YAML:
health_info[CONF_MODE] = MODE_YAML
elif MODE_STORAGE in modes:
health_info[CONF_MODE] = MODE_STORAGE
elif MODE_YAML in modes:
health_info[CONF_MODE] = MODE_YAML
else:
health_info[CONF_MODE] = MODE_AUTO
return health_info