| 10 | |
| 11 | |
| 12 | async def websocket_log_endpoint( |
| 13 | websocket: WebSocket, |
| 14 | logger: logging.Logger = Depends(get_logger), |
| 15 | log_ws_manager: WebSocketConnectionManager = Depends(get_log_ws_manager), |
| 16 | ): |
| 17 | if not log_ws_manager: |
| 18 | await websocket.close(code=1011) |
| 19 | return |
| 20 | |
| 21 | client_id = str(uuid.uuid4()) |
| 22 | try: |
| 23 | await log_ws_manager.connect(client_id, websocket) |
| 24 | while True: |
| 25 | await websocket.receive_text() |
| 26 | except WebSocketDisconnect: |
| 27 | pass |
| 28 | except asyncio.CancelledError: |
| 29 | raise |
| 30 | except Exception as e: |
| 31 | logger.error( |
| 32 | f"Log WebSocket (client {client_id}) encountered an exception: {e}", |
| 33 | exc_info=True, |
| 34 | ) |
| 35 | finally: |
| 36 | log_ws_manager.disconnect(client_id) |