From b6cbe9d64c01ff11feab8351fb801bc1aee48325 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Tue, 2 Apr 2024 19:10:51 +0700 Subject: [PATCH] fix(apis/websocket): improve logging and error handling --- apis/websocket/src/events/parseImage.ts | 35 +++++++++++------------ apis/websocket/src/events/parseText.ts | 24 +++++++--------- apis/websocket/src/events/trainMessage.ts | 28 +++++++++--------- 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/apis/websocket/src/events/parseImage.ts b/apis/websocket/src/events/parseImage.ts index a94f689..cc0bd2f 100755 --- a/apis/websocket/src/events/parseImage.ts +++ b/apis/websocket/src/events/parseImage.ts @@ -16,19 +16,18 @@ const parseImageEventHandler: EventHandler = async ( const nextSeq = client.currentSequence++ - logger.debug(`Client ${client.id} requested to parse image from URL:`, imageUrl) - logger.debug(`Queue currently has ${queue.remaining}/${config.ocrConcurrentQueues} items in it`) + logger.debug(`Client ${client.id} requested to parse image from URL (${nextSeq})`, imageUrl) if (queue.remaining < config.ocrConcurrentQueues) queue.shift() await queue.wait() - try { - logger.debug(`Recognizing image from URL for client ${client.id}`) + logger.debug(`Process queued (${nextSeq}), queue has ${queue.remaining} items`) + try { const { data, jobId } = await tesseract.recognize(imageUrl) - logger.debug(`Recognized image from URL for client ${client.id} (job ${jobId}):`, data.text) - await client.send( + logger.debug(`Image parsed (job ${jobId}) (${nextSeq}):`, data.text) + client.send( { op: ServerOperation.ParsedImage, d: { @@ -37,20 +36,20 @@ const parseImageEventHandler: EventHandler = async ( }, nextSeq, ) - } catch { - logger.error(`Failed to parse image from URL for client ${client.id}:`, imageUrl) - await client.send( - { - op: ServerOperation.ParseImageFailed, - d: null, - }, - nextSeq, - ) + } catch (e) { + if (!client.disconnected) + client.send( + { + op: ServerOperation.ParseImageFailed, + d: null, + }, + nextSeq, + ) + else logger.warn(`Client disconnected before the failed packet could be sent (${nextSeq})`) + logger.error(`Failed to parse image (${nextSeq}):`, e) } finally { queue.shift() - logger.debug( - `Finished processing image from URL for client ${client.id}, queue has ${queue.remaining}/${config.ocrConcurrentQueues} remaining items in it`, - ) + logger.debug(`Finished parsing image (${nextSeq}), queue has ${queue.remaining} items`) } } diff --git a/apis/websocket/src/events/parseText.ts b/apis/websocket/src/events/parseText.ts index 46ace12..fa3e645 100755 --- a/apis/websocket/src/events/parseText.ts +++ b/apis/websocket/src/events/parseText.ts @@ -1,7 +1,5 @@ import { type ClientOperation, ServerOperation } from '@revanced/bot-shared' -import { inspect as inspectObject } from 'util' - import type { EventHandler } from '.' const parseTextEventHandler: EventHandler = async (packet, { wit, logger }) => { @@ -19,7 +17,7 @@ const parseTextEventHandler: EventHandler = async (pa const { intents } = await wit.message(actualText) const intentsWithoutIds = intents.map(({ id, ...rest }) => rest) - await client.send( + client.send( { op: ServerOperation.ParsedText, d: { @@ -29,16 +27,16 @@ const parseTextEventHandler: EventHandler = async (pa nextSeq, ) } catch (e) { - await client.send( - { - op: ServerOperation.ParseTextFailed, - d: null, - }, - nextSeq, - ) - - if (e instanceof Error) logger.error(e.stack ?? e.message) - else logger.error(inspectObject(e)) + if (!client.disconnected) + client.send( + { + op: ServerOperation.ParseTextFailed, + d: null, + }, + nextSeq, + ) + else logger.warn(`Client disconnected before the failed packet could be sent (${nextSeq})`) + logger.error(`Failed to parse text (${nextSeq}):`, e) } } diff --git a/apis/websocket/src/events/trainMessage.ts b/apis/websocket/src/events/trainMessage.ts index b028660..66698ed 100644 --- a/apis/websocket/src/events/trainMessage.ts +++ b/apis/websocket/src/events/trainMessage.ts @@ -1,7 +1,5 @@ import { type ClientOperation, ServerOperation } from '@revanced/bot-shared' -import { inspect as inspectObject } from 'util' - import type { EventHandler } from '.' const trainMessageEventHandler: EventHandler = async (packet, { wit, logger }) => { @@ -13,11 +11,11 @@ const trainMessageEventHandler: EventHandler = asy const nextSeq = client.currentSequence++ const actualText = text.slice(0, 279) - logger.debug(`Client ${client.id} requested to train label ${label} with:`, actualText) + logger.debug(`${client.id} requested to train label ${label} (${nextSeq}) with:`, actualText) try { await wit.train(actualText, label) - await client.send( + client.send( { op: ServerOperation.TrainedMessage, d: null, @@ -25,18 +23,18 @@ const trainMessageEventHandler: EventHandler = asy nextSeq, ) - logger.debug(`Trained label ${label} with:`, actualText) + logger.debug(`Trained label (${nextSeq})`) } catch (e) { - await client.send( - { - op: ServerOperation.TrainMessageFailed, - d: null, - }, - nextSeq, - ) - - if (e instanceof Error) logger.error(e.stack ?? e.message) - else logger.error(inspectObject(e)) + if (!client.disconnected) + client.send( + { + op: ServerOperation.TrainMessageFailed, + d: null, + }, + nextSeq, + ) + else logger.warn(`Client ${client.id} disconnected before the failed packet could be sent`) + logger.error(`Failed to train (${nextSeq})`, e) } }