@webex/webex-core
Version:
Plugin handling for Cisco Webex
99 lines (83 loc) • 2.81 kB
JavaScript
/*!
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
*/
import util from 'util';
import {get, omit} from 'lodash';
import {Interceptor} from '@webex/http-core';
import {isBuffer} from '@webex/common';
/**
* @class
*/
export default class ResponseLoggerInterceptor extends Interceptor {
/**
* @returns {ResponseLoggerInterceptor}
*/
static create() {
return new ResponseLoggerInterceptor({webex: this});
}
/**
* @see Interceptor#onRequest
* @param {Object} options
* @param {HttpResponse} response
* @returns {Object}
*/
onResponse(options, response) {
const now = new Date();
this.printResponseHeader(options, response);
const logger = get(this, 'webex.logger', console);
if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
logger.info('timestamp (end): ', now.getTime(), now.toISOString());
if (typeof response.body === 'string' || isBuffer(response.body)) {
logger.info('Response: ', 'Not printed, it`s probably a file');
} else if (typeof response.body === 'object') {
try {
logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));
} catch (err) {
logger.info('Response: ', '[Not Serializable]', err);
}
}
}
logger.info('\\**********************************************************************/');
return response;
}
/**
* @see Interceptor#onRequest
* @param {Object} options
* @param {Object} reason
* @returns {Object}
*/
onResponseError(options, reason) {
const now = new Date();
this.printResponseHeader(options, reason);
const logger = get(this, 'webex.logger', console);
if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
logger.info('timestamp (end): ', now.getTime(), now.toISOString());
try {
logger.error('Response: ', util.inspect(reason.body, {depth: null}));
} catch (err) {
logger.error('Response: ', reason.body);
}
}
logger.info('\\**********************************************************************/');
return Promise.reject(reason);
}
/**
* Prints the basic header
* @param {Object} options
* @param {HttpResponse|WebexHttpError} response
* @returns {undefined}
*/
printResponseHeader(options, response) {
const logger = get(this, 'webex.logger', console);
logger.info('Status Code:', response.statusCode);
logger.info(
'WEBEX_TRACKINGID:',
get(options, 'headers.trackingid') || get(response, 'headers.trackingid')
);
logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);
logger.info(
'Processing duration:',
options.$timings.requestEnd - options.$timings.requestStart
);
}
}