From 0ac6eb51fc46d15bca35387606d852e08705196f Mon Sep 17 00:00:00 2001 From: Alexander Date: Thu, 26 Oct 2023 13:43:11 +0400 Subject: [PATCH] refactor: capture only specific errors (#487) relates-to: #458 --- src/Commands/RunRepeater.ts | 10 ++++++++-- src/Repeater/DefaultRepeaterLauncher.ts | 4 +++- src/Repeater/DefaultRepeaterServer.ts | 10 +++++++--- src/Repeater/ServerRepeaterLauncher.ts | 4 +++- src/Utils/Logger.ts | 13 ------------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/Commands/RunRepeater.ts b/src/Commands/RunRepeater.ts index d8701852..38f71cdc 100644 --- a/src/Commands/RunRepeater.ts +++ b/src/Commands/RunRepeater.ts @@ -10,6 +10,7 @@ import { } from '../Repeater'; import { Arguments, Argv, CommandModule } from 'yargs'; import { Lifecycle } from 'tsyringe'; +import { captureException } from '@sentry/node'; import { normalize } from 'path'; export class RunRepeater implements CommandModule { @@ -244,12 +245,16 @@ export class RunRepeater implements CommandModule { if (args.remove) { await repeaterLauncher.uninstall(); - process.exit(0); + process.exitCode = 0; + + return; } if (args.daemon) { await repeaterLauncher.install(); - process.exit(0); + process.exitCode = 0; + + return; } try { @@ -262,6 +267,7 @@ export class RunRepeater implements CommandModule { await repeaterLauncher.run(args.id as string, args.run as boolean); } catch (e) { + captureException(e); logger.error(e); await repeaterLauncher.close(); process.exitCode = 1; diff --git a/src/Repeater/DefaultRepeaterLauncher.ts b/src/Repeater/DefaultRepeaterLauncher.ts index 50072876..5dfc27ba 100644 --- a/src/Repeater/DefaultRepeaterLauncher.ts +++ b/src/Repeater/DefaultRepeaterLauncher.ts @@ -18,6 +18,7 @@ import { RepeaterCommandHub } from './RepeaterCommandHub'; import { RuntimeDetector } from './RuntimeDetector'; import { gt } from 'semver'; import chalk from 'chalk'; +import { captureException } from '@sentry/node'; import { delay, inject, injectable } from 'tsyringe'; import Timer = NodeJS.Timer; @@ -40,9 +41,10 @@ export class DefaultRepeaterLauncher implements RepeaterLauncher { @inject(delay(() => CliInfo)) private readonly info: CliInfo ) { this.bus.onReconnectionFailure(async (e: Error) => { + captureException(e); logger.error(e); await this.close(); - process.exit(1); + process.exitCode = 1; }); } diff --git a/src/Repeater/DefaultRepeaterServer.ts b/src/Repeater/DefaultRepeaterServer.ts index f53af347..c869b76f 100644 --- a/src/Repeater/DefaultRepeaterServer.ts +++ b/src/Repeater/DefaultRepeaterServer.ts @@ -18,6 +18,7 @@ import { inject, injectable } from 'tsyringe'; import io, { Socket } from 'socket.io-client'; import parser from 'socket.io-msgpack-parser'; import { SocksProxyAgent } from 'socks-proxy-agent'; +import { captureException, captureMessage } from '@sentry/node'; import { once } from 'events'; import { parse } from 'url'; import Timer = NodeJS.Timer; @@ -170,9 +171,11 @@ export class DefaultRepeaterServer implements RepeaterServer { public errorOccurred( handler: (event: RepeaterServerErrorEvent) => void | Promise ): void { - this.socket.on('error', (payload, callback) => - this.processEventHandler('error', payload, handler, callback) - ); + this.socket.on('error', (payload, callback) => { + captureMessage(payload.message); + + return this.processEventHandler('error', payload, handler, callback); + }); } public reconnectionAttempted( @@ -220,6 +223,7 @@ export class DefaultRepeaterServer implements RepeaterServer { callback(response); } catch (error) { + captureException(error); logger.debug( 'Error processing event "%s" with the following payload: %s. Details: %s', event, diff --git a/src/Repeater/ServerRepeaterLauncher.ts b/src/Repeater/ServerRepeaterLauncher.ts index 90d5d789..cda795ac 100644 --- a/src/Repeater/ServerRepeaterLauncher.ts +++ b/src/Repeater/ServerRepeaterLauncher.ts @@ -15,6 +15,7 @@ import { CliInfo } from '../Config'; import { RepeaterCommandHub } from './RepeaterCommandHub'; import { delay, inject, injectable } from 'tsyringe'; import chalk from 'chalk'; +import { captureException } from '@sentry/node'; @injectable() export class ServerRepeaterLauncher implements RepeaterLauncher { @@ -161,9 +162,10 @@ export class ServerRepeaterLauncher implements RepeaterLauncher { } private reconnectionFailed({ error }: RepeaterServerReconnectionFailedEvent) { + captureException(error); logger.error(error); this.close().catch(logger.error); - process.exit(1); + process.exitCode = 1; } private async testingNetwork(event: RepeaterServerNetworkTestEvent) { diff --git a/src/Utils/Logger.ts b/src/Utils/Logger.ts index d087d73d..8dd8e1ce 100644 --- a/src/Utils/Logger.ts +++ b/src/Utils/Logger.ts @@ -41,11 +41,6 @@ export class Logger { return; } - const captureContext = { - contexts: { - errorArgs: Object.fromEntries([messageOrArg, ...args].entries()) - } - }; let message: string; if (typeof errorOrMessage === 'string') { @@ -54,15 +49,7 @@ export class Logger { } message = errorOrMessage; - const formattedMessage = format(message, ...args); - - captureMessage(formattedMessage, { - ...captureContext, - level: 'error' - }); } else { - captureException(errorOrMessage, captureContext); - message = messageOrArg ?? errorOrMessage.message; }