Skip to content

Commit 0122a5e

Browse files
jbeckerwsioroulet
authored andcommitted
improve ha client keepalive error handling
1 parent f1f961f commit 0122a5e

1 file changed

Lines changed: 29 additions & 22 deletions

File tree

asyncua/client/ha/ha_client.py

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -450,29 +450,36 @@ async def run(self) -> None:
450450
f"Starting keepalive loop for {server_info.url}, checking every {self.timer}sec"
451451
)
452452
while self.is_running:
453-
try:
454-
status, slevel = await client.read_values([status_node, slevel_node])
455-
if status != ua.ServerState.Running:
456-
_logger.info("ServerState is not running")
457-
server_info.status = ConnectionStates.NO_DATA
458-
else:
459-
server_info.status = slevel
460-
except BadSessionNotActivated:
461-
_logger.warning("Session is not yet activated.")
462-
server_info.status = ConnectionStates.NO_DATA
463-
except BadSessionClosed:
464-
_logger.warning("Session is closed.")
465-
server_info.status = ConnectionStates.NO_DATA
466-
except asyncio.TimeoutError:
467-
_logger.warning("Timeout when fetching state")
468-
server_info.status = ConnectionStates.NO_DATA
469-
except asyncio.CancelledError:
470-
_logger.warning("CancelledError, this means we should shutdown")
471-
server_info.status = ConnectionStates.NO_DATA
472-
# FIXME: It cannot be correct to catch CancelledError here, we should re-raise
473-
except Exception:
474-
_logger.exception("Unknown exception during keepalive liveness check")
453+
if client.uaclient.protocol is None:
475454
server_info.status = ConnectionStates.NO_DATA
455+
_logger.info("No active client")
456+
else:
457+
try:
458+
status, slevel = await client.read_values([status_node, slevel_node])
459+
if status != ua.ServerState.Running:
460+
_logger.info("ServerState is not running")
461+
server_info.status = ConnectionStates.NO_DATA
462+
else:
463+
server_info.status = slevel
464+
except BadSessionNotActivated:
465+
_logger.warning("Session is not yet activated.")
466+
server_info.status = ConnectionStates.NO_DATA
467+
except BadSessionClosed :
468+
_logger.warning("Session is closed.")
469+
server_info.status = ConnectionStates.NO_DATA
470+
except ConnectionError :
471+
_logger.warning("No connection.")
472+
server_info.status = ConnectionStates.NO_DATA
473+
except asyncio.TimeoutError:
474+
_logger.warning("Timeout when fetching state")
475+
server_info.status = ConnectionStates.NO_DATA
476+
except asyncio.CancelledError:
477+
_logger.warning("CancelledError, this means we should shutdown")
478+
server_info.status = ConnectionStates.NO_DATA
479+
# FIXME: It cannot be correct to catch CancelledError here, we should re-raise
480+
except Exception:
481+
_logger.exception("Unknown exception during keepalive liveness check")
482+
server_info.status = ConnectionStates.NO_DATA
476483

477484
_logger.info(f"ServiceLevel for {server_info.url}: {server_info.status}")
478485
if await event_wait(self.stop_event, self.timer):

0 commit comments

Comments
 (0)