1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 02:48:57 +00:00
Files
core/homeassistant/components/portainer/diagnostics.py
2025-11-02 21:37:04 -08:00

56 lines
1.9 KiB
Python

"""Diagnostics for the Portainer integration."""
from __future__ import annotations
from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_API_TOKEN
from homeassistant.core import HomeAssistant
from . import PortainerConfigEntry
from .coordinator import PortainerCoordinator
TO_REDACT = [CONF_API_TOKEN]
def _serialize_coordinator(coordinator: PortainerCoordinator) -> dict[str, Any]:
"""Serialize coordinator data into a JSON-safe structure."""
serialized_endpoints: list[dict[str, Any]] = []
for endpoint_id, endpoint_data in coordinator.data.items():
serialized_endpoints.append(
{
"id": endpoint_id,
"name": endpoint_data.name,
"endpoint": {
"status": endpoint_data.endpoint.status,
"url": endpoint_data.endpoint.url,
"public_url": endpoint_data.endpoint.public_url,
},
"containers": [
{
"id": container.container.id,
"names": list(container.container.names or []),
"image": container.container.image,
"state": container.container.state,
"status": container.container.status,
}
for container in endpoint_data.containers.values()
],
}
)
return {"endpoints": serialized_endpoints}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: PortainerConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a Portainer config entry."""
return {
"config_entry": async_redact_data(config_entry.as_dict(), TO_REDACT),
"coordinator": _serialize_coordinator(config_entry.runtime_data),
}