Skip to content

Commit 0afdb34

Browse files
authored
Merge pull request #2465 from ekutner/request_context_logging
Add request context logging for failed HASS API calls
2 parents 7c5a137 + cff5b6b commit 0afdb34

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

appdaemon/plugins/hass/hassplugin.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class HassPlugin(PluginBase):
8080

8181
_result_futures: dict[int, asyncio.Future]
8282
_silent_results: dict[int, bool]
83+
_request_context: dict[int, dict[str, Any]]
8384
startup_conditions: list[StartupWaitCondition]
8485
maintenance_tasks: list[asyncio.Task]
8586
"""List of tasks that run in the background as part of the plugin operation. These are tracked because they might
@@ -98,6 +99,7 @@ def __init__(self, ad: "AppDaemon", name: str, config: HASSConfig):
9899
self.services = {}
99100
self._result_futures = {}
100101
self._silent_results = {}
102+
self._request_context = {}
101103
self.startup_conditions = []
102104
self.maintenance_tasks = []
103105

@@ -270,6 +272,7 @@ async def ping(self, timeout: float = 1.0) -> dict[str, Any] | None:
270272
@utils.warning_decorator(error_text="Unexpected error during receive_result")
271273
async def receive_result(self, resp: dict):
272274
silent = self._silent_results.pop(resp["id"], False) or self.AD.config.suppress_log_messages
275+
request_context = self._request_context.pop(resp["id"], {})
273276

274277
if (future := self._result_futures.pop(resp["id"], None)) is not None:
275278
if not future.done():
@@ -286,9 +289,9 @@ async def receive_result(self, resp: dict):
286289
case True:
287290
self.logger.debug(f"Received successful result from ID {resp['id']}")
288291
case False:
289-
self.logger.warning("Error with websocket result: %s: %s", resp["error"]["code"], resp["error"]["message"])
292+
self.logger.warning("Error with websocket result: %s: %s: request=%s", resp["error"]["code"], resp["error"]["message"], str(request_context))
290293
case None:
291-
self.logger.error(f"Invalid response success value: {resp['success']}")
294+
self.logger.error(f"Invalid response success value: {resp['success']} for request: {str(request_context)}")
292295

293296
@utils.warning_decorator(error_text="Unexpected error during receive_event")
294297
async def receive_event(self, event: dict[str, Any]) -> None:
@@ -416,6 +419,7 @@ async def websocket_send_json(
416419
future = self.AD.loop.create_future()
417420
self._result_futures[self.id] = future
418421
self._silent_results[self.id] = silent
422+
self._request_context[self.id] = request
419423

420424
try:
421425
timeout = utils.parse_timedelta(self.config.ws_timeout if timeout is None else timeout)
@@ -596,6 +600,7 @@ async def get_updates(self):
596600
fut.cancel()
597601
self._result_futures.clear()
598602
self._silent_results.clear()
603+
self._request_context.clear()
599604

600605
# remove callback from getting local events
601606
await self.AD.callbacks.clear_callbacks(self.name)

0 commit comments

Comments
 (0)