Merge pull request #25 from drift-labs/luke/ws-improvements

ws: Better error handling
This commit is contained in:
Luke
2023-11-22 23:55:45 +01:00
committed by GitHub

View File

@@ -28,8 +28,15 @@ const wss = new WebSocketServer({ server, path: '/ws' });
const REDIS_HOST = process.env.REDIS_HOST || 'localhost'; const REDIS_HOST = process.env.REDIS_HOST || 'localhost';
const REDIS_PORT = process.env.REDIS_PORT || '6379'; const REDIS_PORT = process.env.REDIS_PORT || '6379';
const WS_PORT = process.env.WS_PORT || '3000'; const WS_PORT = process.env.WS_PORT || '3000';
console.log(`WS LISTENER PORT : ${WS_PORT}`);
const REDIS_PASSWORD = process.env.REDIS_PASSWORD; const REDIS_PASSWORD = process.env.REDIS_PASSWORD;
const safeGetRawChannelFromMessage = (message: any): string => {
return message?.channel;
};
const getRedisChannelFromMessage = (message: any): string => { const getRedisChannelFromMessage = (message: any): string => {
const channel = message.channel; const channel = message.channel;
const marketName = message.market?.toUpperCase(); const marketName = message.market?.toUpperCase();
@@ -119,7 +126,17 @@ async function main() {
try { try {
redisChannel = getRedisChannelFromMessage(parsedMessage); redisChannel = getRedisChannelFromMessage(parsedMessage);
} catch (error) { } catch (error) {
ws.send(JSON.stringify({ error: error.message })); const requestChannel = safeGetRawChannelFromMessage(parsedMessage);
if (requestChannel) {
ws.send(
JSON.stringify({
channel: requestChannel,
error: error.message,
})
);
} else {
ws.close(1003, JSON.stringify({ error: error.message }));
}
return; return;
} }
@@ -149,12 +166,17 @@ async function main() {
// Fetch and send last message // Fetch and send last message
if (redisChannel.includes('orderbook')) { if (redisChannel.includes('orderbook')) {
const lastUpdateChannel = `last_update_${redisChannel}`;
const lastMessage = await lastMessageRetriever.client.get( const lastMessage = await lastMessageRetriever.client.get(
`last_update_${redisChannel}` lastUpdateChannel
); );
if (lastMessage !== null) { if (lastMessage !== null) {
ws.send( ws.send(
JSON.stringify({ channel: redisChannel, data: lastMessage }) JSON.stringify({
channel: lastUpdateChannel,
data: lastMessage,
})
); );
} }
} }
@@ -165,7 +187,17 @@ async function main() {
try { try {
redisChannel = getRedisChannelFromMessage(parsedMessage); redisChannel = getRedisChannelFromMessage(parsedMessage);
} catch (error) { } catch (error) {
ws.send(JSON.stringify({ error: error.message })); const requestChannel = safeGetRawChannelFromMessage(parsedMessage);
if (requestChannel) {
ws.send(
JSON.stringify({
channel: requestChannel,
error: error.message,
})
);
} else {
ws.close(1003, JSON.stringify({ error: error.message }));
}
return; return;
} }
const subscribers = channelSubscribers.get(redisChannel); const subscribers = channelSubscribers.get(redisChannel);