From 9d8bb98e68c4b3a563b0613557662ebee063ccb1 Mon Sep 17 00:00:00 2001 From: Tarik Gul <47201679+TarikGul@users.noreply.github.com> Date: Wed, 28 Jul 2021 14:04:11 -0400 Subject: [PATCH] fix: add --version flag (#620) --- README.md | 2 ++ src/logging/Log.ts | 12 ++++++---- src/logging/transports/consoleTransport.ts | 7 +++--- src/main.ts | 28 +++++++++++++++------- src/parseArgs.ts | 9 +++++++ 5 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 src/parseArgs.ts diff --git a/README.md b/README.md index 1ed93083f..52d7580e6 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ Run the service from any directory on your machine: substrate-api-sidecar ``` +To check your version you may append the `--version` flag to `substrate-api-sidecar`. + ### Local installation Install the service locally: diff --git a/src/logging/Log.ts b/src/logging/Log.ts index 91099b27f..9d3f9fc6f 100644 --- a/src/logging/Log.ts +++ b/src/logging/Log.ts @@ -1,24 +1,26 @@ import { createLogger, Logger } from 'winston'; +import { ConsoleTransportInstance } from 'winston/lib/winston/transports'; import { consoleTransport } from './transports'; -// Note: there is a `fileTransport` that gets added in main. -const transports = [consoleTransport()]; - /** * Access a singleton winston.Logger that will be intialized on first use. */ export class Log { + private static _transports: ConsoleTransportInstance[] | undefined; private static _logger: Logger | undefined; private static create(): Logger { if (this._logger) { return this._logger; } + // Note: there is a `fileTransport` that gets added in main. + this._transports = [consoleTransport()]; + this._logger = createLogger({ - transports, + transports: this._transports, exitOnError: false, - exceptionHandlers: transports, + exceptionHandlers: this._transports, }); return this._logger; diff --git a/src/logging/transports/consoleTransport.ts b/src/logging/transports/consoleTransport.ts index 48142795c..2a4c7aadd 100644 --- a/src/logging/transports/consoleTransport.ts +++ b/src/logging/transports/consoleTransport.ts @@ -10,14 +10,13 @@ import { timeStamp, } from '../transformers'; -const { - config: { LOG }, -} = SidecarConfig; - /** * Console transport for winston logger. */ export function consoleTransport(): transports.ConsoleTransportInstance { + const { + config: { LOG }, + } = SidecarConfig; /** * A simple printing format for how `TransformableInfo` shows up. */ diff --git a/src/main.ts b/src/main.ts index 7eb89516c..dfe961a80 100644 --- a/src/main.ts +++ b/src/main.ts @@ -28,12 +28,12 @@ import { getControllersForSpec } from './chains-config'; import { consoleOverride } from './logging/consoleOverride'; import { Log } from './logging/Log'; import * as middleware from './middleware'; +import { parseArgs } from './parseArgs'; import { SidecarConfig } from './SidecarConfig'; -const { logger } = Log; -const { config } = SidecarConfig; - async function main() { + const { config } = SidecarConfig; + const { logger } = Log; // Overide console.{log, error, warn, etc} consoleOverride(logger); @@ -88,12 +88,6 @@ async function main() { app.listen(); } -process.on('SIGINT', function () { - console.log('Caught interrupt signal, exiting...'); - process.exit(0); -}); -main().catch(console.log); - /** * Prompt the user with some basic info about the node and the network they have * connected Sidecar to. @@ -103,6 +97,8 @@ main().catch(console.log); * @param implName implementation name of the node Sidecar is connected to */ function startUpPrompt(wsUrl: string, chainName: string, implName: string) { + const { logger } = Log; + const { config } = SidecarConfig; /** * Best effort list of known public nodes that do not encourage high traffic * sidecar installations connecting to them for non - testing / development purposes. @@ -150,3 +146,17 @@ function startUpPrompt(wsUrl: string, chainName: string, implName: string) { ); } } + +process.on('SIGINT', function () { + console.log('Caught interrupt signal, exiting...'); + process.exit(0); +}); + +const args = parseArgs(); + +if (args.version) { + console.log(`@substrate/api-sidecar v${packageJSON.version}`); + process.exit(0); +} else { + main().catch(console.log); +} diff --git a/src/parseArgs.ts b/src/parseArgs.ts new file mode 100644 index 000000000..2b5b191ae --- /dev/null +++ b/src/parseArgs.ts @@ -0,0 +1,9 @@ +import { ArgumentParser, Namespace } from 'argparse'; + +export const parseArgs = (): Namespace => { + const parser = new ArgumentParser(); + + parser.add_argument('-v', '--version', { action: 'store_true' }); + + return parser.parse_args() as Namespace; +};