chore(bonfire): log errors from websocket stream

This commit is contained in:
Bob Bobs
2024-02-13 16:26:08 -07:00
committed by Paul Makles
parent 7b18e983c9
commit 8f9b18444a

View File

@@ -118,7 +118,7 @@ pub async fn client(db: &'static Database, stream: TcpStream, addr: SocketAddr)
// Create a PubSub connection to poll on. // Create a PubSub connection to poll on.
let listener = listener(db, &mut state, addr, &config, &write).fuse(); let listener = listener(db, &mut state, addr, &config, &write).fuse();
// Read from WebSocket stream. // Read from WebSocket stream.
let worker = worker(user_id.clone(), &config, read, &write).fuse(); let worker = worker(addr, user_id.clone(), &config, read, &write).fuse();
// Pin both tasks. // Pin both tasks.
pin_mut!(listener, worker); pin_mut!(listener, worker);
@@ -186,7 +186,7 @@ async fn listener(
// Handle incoming events. // Handle incoming events.
let Ok(message) = message_rx.recv().await.map_err(|e| { let Ok(message) = message_rx.recv().await.map_err(|e| {
info!("Error while consuming pub/sub messages: {e:?}"); warn!("Error while consuming pub/sub messages: {e:?}");
sentry::capture_error(&e); sentry::capture_error(&e);
}) else { }) else {
return; return;
@@ -210,27 +210,42 @@ async fn listener(
return; return;
}; };
let should_send = state.handle_incoming_event_v1(db, &mut event).await; let should_send = state.handle_incoming_event_v1(db, &mut event).await;
if !should_send {
continue;
}
if should_send let result = write.lock().await.send(config.encode(&event)).await;
&& write if let Err(e) = result {
.lock() use async_tungstenite::tungstenite::Error;
.await if !matches!(e, Error::AlreadyClosed | Error::ConnectionClosed) {
.send(config.encode(&event)) warn!("Error while sending an event to {addr:?}: {e:?}");
.await }
.is_err()
{
return; return;
} }
} }
} }
async fn worker( async fn worker(
addr: SocketAddr,
user_id: String, user_id: String,
config: &ProtocolConfiguration, config: &ProtocolConfiguration,
mut read: WsReader, mut read: WsReader,
write: &Mutex<WsWriter>, write: &Mutex<WsWriter>,
) { ) {
while let Ok(Some(msg)) = read.try_next().await { loop {
let result = read.try_next().await;
let msg = match result {
Ok(Some(msg)) => msg,
Ok(None) => return,
Err(e) => {
use async_tungstenite::tungstenite::Error;
if !matches!(e, Error::AlreadyClosed | Error::ConnectionClosed) {
warn!("Error while reading an event from {addr:?}: {e:?}");
}
return;
}
};
let Ok(payload) = config.decode(&msg) else { let Ok(payload) = config.decode(&msg) else {
continue; continue;
}; };