Skip to content

Commit

Permalink
Add setup time detail to diagnostics (#117766)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco committed May 20, 2024
1 parent 13ba8e6 commit 149120b
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 11 deletions.
21 changes: 10 additions & 11 deletions homeassistant/components/diagnostics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
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
Expand Down Expand Up @@ -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",
Expand All @@ -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)

Expand Down
8 changes: 8 additions & 0 deletions homeassistant/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, {})
2 changes: 2 additions & 0 deletions tests/components/diagnostics/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -256,6 +257,7 @@ async def test_download_diagnostics(
"requirements": [],
},
"data": {"device": "info"},
"setup_times": {},
}


Expand Down
5 changes: 5 additions & 0 deletions tests/test_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit 149120b

Please sign in to comment.