"""Diagnostics support for Reticulum.""" from __future__ import annotations from typing import Any from homeassistant.components.diagnostics import async_redact_data from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from .const import CONF_ALLOWED_IDENTITIES, CONF_DEFAULT_RECIPIENT, DOMAIN TO_REDACT = {CONF_DEFAULT_RECIPIENT, CONF_ALLOWED_IDENTITIES} async def async_get_config_entry_diagnostics( hass: HomeAssistant, entry: ConfigEntry ) -> dict[str, Any]: """Return diagnostics for the hub entry and its identities.""" runtime = hass.data[DOMAIN][entry.entry_id] stack = runtime.stack.state identities = [] for subentry_id, manager in runtime.identities.items(): s = manager.state subentry = entry.subentries.get(subentry_id) identities.append( { "title": subentry.title if subentry else None, "options": async_redact_data( dict(subentry.data) if subentry else {}, TO_REDACT ), "lxmf_address": s.lxmf_address, "display_name": s.display_name, "messages_received": s.messages_received, "messages_sent": s.messages_sent, "messages_failed": s.messages_failed, } ) return { "entry": {"data": dict(entry.data), "options": dict(entry.options)}, "stack": { "started": stack.started, "interface_online": stack.interface_online, "rxb": stack.tel_rxb, "txb": stack.tel_txb, "bitrate": stack.tel_bitrate, "peer_count": len(stack.peers), "peers": [ {"name": p.display_name, "hops": p.hops, "stamp_cost": p.stamp_cost} for p in stack.peers.values() ], }, "identities": identities, }