Add setup time detail to diagnostics (#117766)

This commit is contained in:
J. Nick Koston 2024-05-19 21:52:28 -10:00 committed by GitHub
parent 13ba8e62a9
commit 149120b749
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 11 deletions

View file

@ -24,6 +24,7 @@ from homeassistant.helpers.json import (
from homeassistant.helpers.system_info import async_get_system_info
from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import async_get_custom_components, async_get_integration
from homeassistant.setup import async_get_domain_setup_times
from homeassistant.util.json import format_unserializable_data
from .const import DOMAIN, REDACTED, DiagnosticsSubType, DiagnosticsType
@ -178,17 +179,15 @@ async def _async_get_json_file_response(
"version": cc_obj.version,
"requirements": cc_obj.requirements,
}
payload = {
"home_assistant": hass_sys_info,
"custom_components": custom_components,
"integration_manifest": integration.manifest,
"setup_times": async_get_domain_setup_times(hass, domain),
"data": data,
}
try:
json_data = json.dumps(
{
"home_assistant": hass_sys_info,
"custom_components": custom_components,
"integration_manifest": integration.manifest,
"data": data,
},
indent=2,
cls=ExtendedJSONEncoder,
)
json_data = json.dumps(payload, indent=2, cls=ExtendedJSONEncoder)
except TypeError:
_LOGGER.error(
"Failed to serialize to JSON: %s/%s%s. Bad data at %s",
@ -197,7 +196,7 @@ async def _async_get_json_file_response(
f"/{DiagnosticsSubType.DEVICE.value}/{sub_id}"
if sub_id is not None
else "",
format_unserializable_data(find_paths_unserializable_data(data)),
format_unserializable_data(find_paths_unserializable_data(payload)),
)
return web.Response(status=HTTPStatus.INTERNAL_SERVER_ERROR)

View file

@ -811,3 +811,11 @@ def async_get_setup_timings(hass: core.HomeAssistant) -> dict[str, float]:
domain_timings[domain] = total_top_level + group_max
return domain_timings
@callback
def async_get_domain_setup_times(
hass: core.HomeAssistant, domain: str
) -> Mapping[str | None, dict[SetupPhases, float]]:
"""Return timing data for each integration."""
return _setup_times(hass).get(domain, {})

View file

@ -93,6 +93,7 @@ async def test_download_diagnostics(
assert await _get_diagnostics_for_config_entry(hass, hass_client, config_entry) == {
"home_assistant": hass_sys_info,
"setup_times": {},
"custom_components": {
"test": {
"documentation": "http://example.com",
@ -256,6 +257,7 @@ async def test_download_diagnostics(
"requirements": [],
},
"data": {"device": "info"},
"setup_times": {},
}

View file

@ -1102,6 +1102,11 @@ async def test_async_get_setup_timings(hass) -> None:
"sensor": 1,
"filter": 2,
}
assert setup.async_get_domain_setup_times(hass, "filter") == {
"123456": {
setup.SetupPhases.PLATFORM_SETUP: 2,
},
}
async def test_setup_config_entry_from_yaml(