2727
2828logger = logging .getLogger (__name__ )
2929
30+ # in case you need to debug websockets, here's how to enable debug logs
31+ # logging.getLogger("websockets.client").setLevel(logging.DEBUG)
3032
3133DEFAULT_WS_URI = "wss://video.stream-io-api.com/api/v2/connect"
3234
@@ -136,8 +138,9 @@ async def _open_socket(self) -> dict:
136138 self ._websocket , auth_payload = await asyncio .gather (
137139 websockets .connect (
138140 self .uri ,
139- # ping_interval=None,
140- # ping_timeout=None,
141+ ping_interval = None ,
142+ ping_timeout = None ,
143+ close_timeout = 1.0 ,
141144 ),
142145 self ._build_auth_payload (),
143146 )
@@ -247,26 +250,26 @@ async def _reader_task_func(self) -> None:
247250 pass
248251
249252 self ._logger .error (
250- "WebSocket connection closed by server" ,
253+ f "WebSocket connection closed by server close_code: { close_code } close_reason: { close_reason } " ,
251254 extra = {
252255 "close_code" : close_code ,
253256 "close_reason" : close_reason ,
254257 },
255258 )
256259 if self ._connected and not self ._reconnect_in_progress :
257- await self ._trigger_reconnect ()
260+ await self ._trigger_reconnect ("ws connection closed by server" )
258261 break
259262 except websockets .exceptions .WebSocketException as e :
260263 self ._logger .error (
261264 "WebSocket protocol error in reader task" , exc_info = e
262265 )
263266 if self ._connected and not self ._reconnect_in_progress :
264- await self ._trigger_reconnect ()
267+ await self ._trigger_reconnect (f"ws exception { e } " )
265268 break
266269 except Exception as e :
267270 self ._logger .error ("Unexpected error in reader task" , exc_info = e )
268271 if self ._connected and not self ._reconnect_in_progress :
269- await self ._trigger_reconnect ()
272+ await self ._trigger_reconnect (f"ws read error { e } " )
270273 break
271274
272275 except asyncio .CancelledError :
@@ -301,7 +304,7 @@ async def _heartbeat_task_func(self) -> None:
301304 },
302305 )
303306 if not self ._reconnect_in_progress :
304- await self ._trigger_reconnect ()
307+ await self ._trigger_reconnect ("healthcheck timeout" )
305308 break
306309
307310 # Send heartbeat
@@ -331,22 +334,22 @@ async def _heartbeat_task_func(self) -> None:
331334 },
332335 )
333336 if not self ._reconnect_in_progress :
334- await self ._trigger_reconnect ()
337+ await self ._trigger_reconnect ("ws connection closed" )
335338 break
336339 except websockets .exceptions .WebSocketException as e :
337340 self ._logger .error (
338341 "WebSocket protocol error while sending heartbeat" ,
339342 exc_info = e ,
340343 )
341344 if not self ._reconnect_in_progress :
342- await self ._trigger_reconnect ()
345+ await self ._trigger_reconnect ("healthcheck write error" )
343346 break
344- except Exception as e :
345- self ._logger .error (
346- "Unexpected error while sending heartbeat" , exc_info = e
347+ except Exception :
348+ self ._logger .exception (
349+ "Unexpected error while sending heartbeat"
347350 )
348351 if not self ._reconnect_in_progress :
349- await self ._trigger_reconnect ()
352+ await self ._trigger_reconnect ("heartbeat unknown error" )
350353 break
351354
352355 except asyncio .CancelledError :
@@ -355,14 +358,14 @@ async def _heartbeat_task_func(self) -> None:
355358 finally :
356359 self ._logger .debug ("Heartbeat task ended" )
357360
358- async def _trigger_reconnect (self ) -> None :
361+ async def _trigger_reconnect (self , reason ) -> None :
359362 """
360363 Trigger reconnection process.
361364 """
362365 if self ._reconnect_in_progress :
363366 return
364367
365- self ._logger .warning ("Triggering reconnection" )
368+ self ._logger .warning (f "Triggering reconnection reason: ' { reason } ' " )
366369 self ._reconnect_in_progress = True
367370
368371 try :
0 commit comments