mirror of
https://github.com/home-assistant/core.git
synced 2025-12-20 02:48:57 +00:00
56 lines
1.9 KiB
Python
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),
|
|
}
|