catch websocket disconenct errors (#674)

This commit is contained in:
callebtc
2024-11-24 16:48:39 +01:00
committed by GitHub
parent 0e2bdb0438
commit 0a230a1aa3
2 changed files with 12 additions and 3 deletions

View File

@@ -2,7 +2,7 @@ import asyncio
import json
from typing import List, Union
from fastapi import WebSocket
from fastapi import WebSocket, WebSocketDisconnect
from loguru import logger
from ...core.base import MeltQuote, MintQuote, ProofState
@@ -122,6 +122,9 @@ class LedgerEventClientManager:
resp = await self._handle_request(req)
# Send the response
await self._send_msg(resp)
except WebSocketDisconnect as e:
logger.debug(f"Websocket disconnected: {e}")
raise e
except Exception as e:
err = JSONRPCErrorResponse(
error=JSONRPCError(

View File

@@ -1,7 +1,7 @@
import asyncio
import time
from fastapi import APIRouter, Request, WebSocket
from fastapi import APIRouter, Request, WebSocket, WebSocketDisconnect
from loguru import logger
from ..core.errors import KeysetNotFoundError
@@ -204,6 +204,7 @@ async def get_mint_quote(request: Request, quote: str) -> PostMintQuoteResponse:
@router.websocket("/v1/ws", name="Websocket endpoint for subscriptions")
async def websocket_endpoint(websocket: WebSocket):
limit_websocket(websocket)
disconnected = False
try:
client = ledger.events.add_client(websocket, ledger.db, ledger.crud)
except Exception as e:
@@ -214,11 +215,16 @@ async def websocket_endpoint(websocket: WebSocket):
try:
# this will block until the session is closed
await client.start()
except WebSocketDisconnect as e:
logger.debug(f"Websocket disconnected: {e}")
disconnected = True
return
except Exception as e:
logger.debug(f"Exception: {e}")
ledger.events.remove_client(client)
finally:
await asyncio.wait_for(websocket.close(), timeout=1)
if not disconnected:
await asyncio.wait_for(websocket.close(), timeout=1)
@router.post(