Skip to content

Commit

Permalink
improve ha client keepalive error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
jbeckerwsi authored and oroulet committed Feb 21, 2024
1 parent f1f961f commit 0122a5e
Showing 1 changed file with 29 additions and 22 deletions.
51 changes: 29 additions & 22 deletions asyncua/client/ha/ha_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,29 +450,36 @@ async def run(self) -> None:
f"Starting keepalive loop for {server_info.url}, checking every {self.timer}sec"
)
while self.is_running:
try:
status, slevel = await client.read_values([status_node, slevel_node])
if status != ua.ServerState.Running:
_logger.info("ServerState is not running")
server_info.status = ConnectionStates.NO_DATA
else:
server_info.status = slevel
except BadSessionNotActivated:
_logger.warning("Session is not yet activated.")
server_info.status = ConnectionStates.NO_DATA
except BadSessionClosed:
_logger.warning("Session is closed.")
server_info.status = ConnectionStates.NO_DATA
except asyncio.TimeoutError:
_logger.warning("Timeout when fetching state")
server_info.status = ConnectionStates.NO_DATA
except asyncio.CancelledError:
_logger.warning("CancelledError, this means we should shutdown")
server_info.status = ConnectionStates.NO_DATA
# FIXME: It cannot be correct to catch CancelledError here, we should re-raise
except Exception:
_logger.exception("Unknown exception during keepalive liveness check")
if client.uaclient.protocol is None:
server_info.status = ConnectionStates.NO_DATA
_logger.info("No active client")
else:
try:
status, slevel = await client.read_values([status_node, slevel_node])
if status != ua.ServerState.Running:
_logger.info("ServerState is not running")
server_info.status = ConnectionStates.NO_DATA
else:
server_info.status = slevel
except BadSessionNotActivated:
_logger.warning("Session is not yet activated.")
server_info.status = ConnectionStates.NO_DATA
except BadSessionClosed :
_logger.warning("Session is closed.")
server_info.status = ConnectionStates.NO_DATA
except ConnectionError :
_logger.warning("No connection.")
server_info.status = ConnectionStates.NO_DATA
except asyncio.TimeoutError:
_logger.warning("Timeout when fetching state")
server_info.status = ConnectionStates.NO_DATA
except asyncio.CancelledError:
_logger.warning("CancelledError, this means we should shutdown")
server_info.status = ConnectionStates.NO_DATA
# FIXME: It cannot be correct to catch CancelledError here, we should re-raise
except Exception:
_logger.exception("Unknown exception during keepalive liveness check")
server_info.status = ConnectionStates.NO_DATA

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

0 comments on commit 0122a5e

Please sign in to comment.