From d3a36441365074604d733ae6222684e822eb22c0 Mon Sep 17 00:00:00 2001 From: Liliana Kastilio Date: Mon, 24 Jun 2019 20:17:19 +0100 Subject: [PATCH] feat: add monitor errors --- src/cli/commands/monitor.ts | 3 ++- src/lib/errors/connection-timeout-error.ts | 12 ++++++++++++ src/lib/errors/index.ts | 2 ++ src/lib/errors/monitor-error.ts | 13 +++++++++++++ src/lib/monitor.ts | 17 +++++++++-------- src/lib/types.ts | 5 ----- 6 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 src/lib/errors/connection-timeout-error.ts create mode 100644 src/lib/errors/monitor-error.ts diff --git a/src/cli/commands/monitor.ts b/src/cli/commands/monitor.ts index b7d019374f..30074cca41 100644 --- a/src/cli/commands/monitor.ts +++ b/src/cli/commands/monitor.ts @@ -14,10 +14,11 @@ import * as spinner from '../../lib/spinner'; import * as detect from '../../lib/detect'; import * as plugins from '../../lib/plugins'; import {ModuleInfo} from '../../lib/module-info'; // TODO(kyegupov): fix import -import { SingleDepRootResult, MultiDepRootsResult, isMultiResult, MonitorError, MonitorOptions } from '../../lib/types'; +import { SingleDepRootResult, MultiDepRootsResult, isMultiResult, MonitorOptions } from '../../lib/types'; import { MethodArgs, ArgsOptions } from '../args'; import { maybePrintDeps } from '../../lib/print-deps'; import * as analytics from '../../lib/analytics'; +import {MonitorError} from '../../lib/errors'; const SEPARATOR = '\n-------------------------------------------------------\n'; diff --git a/src/lib/errors/connection-timeout-error.ts b/src/lib/errors/connection-timeout-error.ts new file mode 100644 index 0000000000..810f78e7da --- /dev/null +++ b/src/lib/errors/connection-timeout-error.ts @@ -0,0 +1,12 @@ +import {CustomError} from './custom-error'; + +export class ConnectionTimeoutError extends CustomError { + private static ERROR_MESSAGE: string = + 'Connection timeout.'; + + constructor() { + super(ConnectionTimeoutError.ERROR_MESSAGE); + this.code = 504; + this.userMessage = ConnectionTimeoutError.ERROR_MESSAGE; + } +} diff --git a/src/lib/errors/index.ts b/src/lib/errors/index.ts index 27acd60259..1ed8095739 100644 --- a/src/lib/errors/index.ts +++ b/src/lib/errors/index.ts @@ -3,3 +3,5 @@ export {FileFlagBadInputError} from './file-flag-bad-input'; export {MissingTargetFileError} from './missing-targetfile-error'; export {NoSupportedManifestsFoundError} from './no-supported-manifests-found'; export {CustomError} from './custom-error'; +export {MonitorError} from './monitor-error'; +export {ConnectionTimeoutError} from './connection-timeout-error'; diff --git a/src/lib/errors/monitor-error.ts b/src/lib/errors/monitor-error.ts new file mode 100644 index 0000000000..c0a04af7fc --- /dev/null +++ b/src/lib/errors/monitor-error.ts @@ -0,0 +1,13 @@ +import {CustomError} from './custom-error'; + +export class MonitorError extends CustomError { + private static ERROR_MESSAGE: string = + 'Server returned unexpected error for the monitor request. '; + + constructor(errorCode, message) { + super(MonitorError.ERROR_MESSAGE + + `Status code: ${errorCode}, response: ${message}`); + this.code = errorCode; + this.userMessage = message; + } +} diff --git a/src/lib/monitor.ts b/src/lib/monitor.ts index 82f3a9e329..bb4a6a78dd 100644 --- a/src/lib/monitor.ts +++ b/src/lib/monitor.ts @@ -6,9 +6,10 @@ import * as os from 'os'; import * as _ from 'lodash'; import {isCI} from './is-ci'; import * as analytics from './analytics'; -import { SingleDepRootResult, MonitorError, DepTree } from './types'; +import { SingleDepRootResult, DepTree } from './types'; import * as projectMetadata from './project-metadata'; import * as path from 'path'; +import {MonitorError, ConnectionTimeoutError} from './errors'; // TODO(kyegupov): clean up the type, move to snyk-cli-interface repository @@ -125,14 +126,14 @@ export async function monitor(root, meta, info: SingleDepRootResult, targetFile) if (res.statusCode === 200 || res.statusCode === 201) { resolve(body); } else { - const e = new MonitorError('Server returned unexpected error for the monitor request. ' + - `Status code: ${res.statusCode}, response: ${res.body.userMessage || res.body.message}`); - e.code = res.statusCode; - e.userMessage = body && body.userMessage; - if (!e.userMessage && res.statusCode === 504) { - e.userMessage = 'Connection Timeout'; + let err; + const userMessage = body && body.userMessage; + if (!userMessage && res.statusCode === 504) { + err = new ConnectionTimeoutError(); + } else { + err = new MonitorError(res.statusCode, userMessage); } - reject(e); + reject(err); } }); }); diff --git a/src/lib/types.ts b/src/lib/types.ts index 567c372ca8..725daa6fd0 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -50,11 +50,6 @@ export function isMultiResult(pet: SingleDepRootResult | MultiDepRootsResult): p return !!(pet as MultiDepRootsResult).depRoots; } -export class MonitorError extends Error { - public code?: number; - public userMessage?: string; -} - export interface TestOptions { traverseNodeModules: boolean; interactive: boolean;