Improve enphase_envoy diagnostics error handling to retain collected data (#142255)

Improve enphase_envoy Diagnostics error handling to retain collected data
This commit is contained in:
Arie Catsman 2025-04-05 22:51:22 +02:00 committed by GitHub
parent ae0f27c42f
commit 6da37691ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 74 additions and 15 deletions

View File

@ -66,16 +66,19 @@ async def _get_fixture_collection(envoy: Envoy, serial: str) -> dict[str, Any]:
]
for end_point in end_points:
response = await envoy.request(end_point)
fixture_data[end_point] = response.text.replace("\n", "").replace(
serial, CLEAN_TEXT
)
fixture_data[f"{end_point}_log"] = json_dumps(
{
"headers": dict(response.headers.items()),
"code": response.status_code,
}
)
try:
response = await envoy.request(end_point)
fixture_data[end_point] = response.text.replace("\n", "").replace(
serial, CLEAN_TEXT
)
fixture_data[f"{end_point}_log"] = json_dumps(
{
"headers": dict(response.headers.items()),
"code": response.status_code,
}
)
except EnvoyError as err:
fixture_data[f"{end_point}_log"] = {"Error": repr(err)}
return fixture_data
@ -160,10 +163,7 @@ async def async_get_config_entry_diagnostics(
fixture_data: dict[str, Any] = {}
if entry.options.get(OPTION_DIAGNOSTICS_INCLUDE_FIXTURES, False):
try:
fixture_data = await _get_fixture_collection(envoy=envoy, serial=old_serial)
except EnvoyError as err:
fixture_data["Error"] = repr(err)
fixture_data = await _get_fixture_collection(envoy=envoy, serial=old_serial)
diagnostic_data: dict[str, Any] = {
"config_entry": async_redact_data(entry.as_dict(), TO_REDACT),

View File

@ -1373,7 +1373,66 @@
]),
}),
'fixtures': dict({
'Error': "EnvoyError('Test')",
'/admin/lib/tariff_log': dict({
'Error': "EnvoyError('Test')",
}),
'/api/v1/production/inverters_log': dict({
'Error': "EnvoyError('Test')",
}),
'/api/v1/production_log': dict({
'Error': "EnvoyError('Test')",
}),
'/info_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/dry_contacts_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/generator_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/inventory_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/power_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/secctrl_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ensemble/status_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/meters/readings_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/meters_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/sc/pvlimit_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ss/dry_contact_settings_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ss/gen_config_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ss/gen_schedule_log': dict({
'Error': "EnvoyError('Test')",
}),
'/ivp/ss/pel_settings_log': dict({
'Error': "EnvoyError('Test')",
}),
'/production.json?details=1_log': dict({
'Error': "EnvoyError('Test')",
}),
'/production.json_log': dict({
'Error': "EnvoyError('Test')",
}),
'/production_log': dict({
'Error': "EnvoyError('Test')",
}),
}),
'raw_data': dict({
'varies_by': 'firmware_version',