From 3cb22b38f9bb017eaecd0838b976b73b5873c248 Mon Sep 17 00:00:00 2001 From: Yevhen Kyriukha Date: Mon, 4 Jul 2022 15:14:49 +0300 Subject: [PATCH] Suppress health check logs. --- src/InboundServer/index.js | 6 ++++-- src/InboundServer/middlewares.js | 16 ++++++++++++---- src/OutboundServer/index.js | 5 +++-- src/OutboundServer/middlewares.js | 8 ++++++-- src/TestServer/index.js | 6 ++++-- src/lib/metrics.js | 2 -- src/lib/router.js | 4 +++- src/lib/validate.js | 11 ++++++++++- 8 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/InboundServer/index.js b/src/InboundServer/index.js index fe50e0825..98e83b1f1 100644 --- a/src/InboundServer/index.js +++ b/src/InboundServer/index.js @@ -23,6 +23,8 @@ const router = require('../lib/router'); const handlers = require('./handlers'); const middlewares = require('./middlewares'); +const logExcludePaths = ['/']; + class InboundApi extends EventEmitter { constructor(conf, logger, cache, validator, wso2) { super({ captureExceptions: true }); @@ -99,7 +101,7 @@ class InboundApi extends EventEmitter { api.use(middlewares.createJwsValidator(logger, jwsVerificationKeys, jwsExclusions)); } - api.use(middlewares.applyState({ cache, wso2, conf })); + api.use(middlewares.applyState({ cache, wso2, conf, logExcludePaths })); api.use(middlewares.createLogger(logger)); api.use(middlewares.createRequestValidator(validator)); api.use(middlewares.assignFspiopIdentifier()); @@ -133,7 +135,7 @@ class InboundServer extends EventEmitter { constructor(conf, logger, cache, wso2) { super({ captureExceptions: true }); this._conf = conf; - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._logger = logger; this._api = new InboundApi( conf, diff --git a/src/InboundServer/middlewares.js b/src/InboundServer/middlewares.js index ec6883865..1ea19c9c2 100644 --- a/src/InboundServer/middlewares.js +++ b/src/InboundServer/middlewares.js @@ -353,13 +353,17 @@ const createLogger = (logger) => async (ctx, next) => { path: ctx.path, method: ctx.method }}); - ctx.state.logger.push({ body: ctx.request.body }).log('Request received'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.push({body: ctx.request.body}).log('Request received'); + } try { await next(); } catch (err) { ctx.state.logger.push(err).log('Error'); } - await ctx.state.logger.log('Request processed'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + await ctx.state.logger.log('Request processed'); + } }; @@ -369,10 +373,14 @@ const createLogger = (logger) => async (ctx, next) => { * @return {Function} */ const createRequestValidator = (validator) => async (ctx, next) => { - ctx.state.logger.log('Validating request'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Validating request'); + } try { ctx.state.path = validator.validateRequest(ctx, ctx.state.logger); - ctx.state.logger.log('Request passed validation'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Request passed validation'); + } await next(); } catch (err) { ctx.state.logger.push({ err }).log('Request failed validation.'); diff --git a/src/OutboundServer/index.js b/src/OutboundServer/index.js index 23571fa98..6b804b596 100644 --- a/src/OutboundServer/index.js +++ b/src/OutboundServer/index.js @@ -23,6 +23,7 @@ const handlers = require('./handlers'); const middlewares = require('./middlewares'); const endpointRegex = /\/.*/g; +const logExcludePaths = ['/']; class OutboundApi extends EventEmitter { constructor(conf, logger, cache, validator, metricsClient, wso2) { @@ -36,7 +37,7 @@ class OutboundApi extends EventEmitter { this._api.use(middlewares.createErrorHandler(this._logger)); this._api.use(middlewares.createRequestIdGenerator()); this._api.use(koaBody()); // outbound always expects application/json - this._api.use(middlewares.applyState({ cache, wso2, conf, metricsClient })); + this._api.use(middlewares.applyState({ cache, wso2, conf, metricsClient, logExcludePaths })); this._api.use(middlewares.createLogger(this._logger)); //Note that we strip off any path on peerEndpoint config after the origin. @@ -69,7 +70,7 @@ class OutboundApi extends EventEmitter { class OutboundServer extends EventEmitter { constructor(conf, logger, cache, metricsClient, wso2) { super({ captureExceptions: true }); - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._conf = conf; this._logger = logger; this._server = null; diff --git a/src/OutboundServer/middlewares.js b/src/OutboundServer/middlewares.js index 06a82a80b..0c167ceee 100644 --- a/src/OutboundServer/middlewares.js +++ b/src/OutboundServer/middlewares.js @@ -20,10 +20,14 @@ const { applyState, createErrorHandler, createLogger, createRequestIdGenerator } * @return {Function} */ const createRequestValidator = (validator) => async (ctx, next) => { - ctx.state.logger.log('Validating request'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Validating request'); + } try { ctx.state.path = validator.validateRequest(ctx, ctx.state.logger); - ctx.state.logger.log('Request passed validation'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Request passed validation'); + } await next(); } catch (err) { ctx.state.logger.push({ err }).log('Request failed validation.'); diff --git a/src/TestServer/index.js b/src/TestServer/index.js index d39c62d00..119937bf1 100644 --- a/src/TestServer/index.js +++ b/src/TestServer/index.js @@ -21,6 +21,8 @@ const router = require('../lib/router'); const handlers = require('./handlers'); const middlewares = require('../InboundServer/middlewares'); +const logExcludePaths = ['/']; + const getWsIp = (req) => [ req.socket.remoteAddress, ...( @@ -36,7 +38,7 @@ class TestApi { this._api.use(middlewares.createErrorHandler(logger)); this._api.use(middlewares.createRequestIdGenerator()); - this._api.use(middlewares.applyState({ cache })); + this._api.use(middlewares.applyState({ cache, logExcludePaths })); this._api.use(middlewares.createLogger(logger)); this._api.use(middlewares.createRequestValidator(validator)); @@ -174,7 +176,7 @@ class TestServer { constructor({ port, logger, cache }) { this._port = port; this._logger = logger; - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._api = new TestApi(this._logger.push({ component: 'api' }), this._validator, cache); this._server = http.createServer(this._api.callback()); // TODO: why does this appear to need to be called after creating this._server (try reorder diff --git a/src/lib/metrics.js b/src/lib/metrics.js index 425b99e6c..3b8743c58 100644 --- a/src/lib/metrics.js +++ b/src/lib/metrics.js @@ -131,8 +131,6 @@ class MetricsServer { result.use(koaBody()); result.use(async ctx => { - this._logger.log('Metrics request received'); - ctx.response.set('Content-Type', this._prometheusRegister.contentType); ctx.response.body = await this._prometheusRegister.metrics(); }); diff --git a/src/lib/router.js b/src/lib/router.js index 79521f4f9..ecfbfdf99 100644 --- a/src/lib/router.js +++ b/src/lib/router.js @@ -21,7 +21,9 @@ module.exports = (handlerMap) => async (ctx, next) => { ctx.response.body = { statusCode: 404, message: 'Not found' }; } else { - ctx.state.logger.push({ handler }).log('Found handler'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.push({handler}).log('Found handler'); + } await handler(ctx); } await next(); diff --git a/src/lib/validate.js b/src/lib/validate.js index d0a1e5ec6..025492b4d 100644 --- a/src/lib/validate.js +++ b/src/lib/validate.js @@ -125,6 +125,13 @@ const transformApiDoc = apiDoc => ({ }); class Validator { + /** + * @param {{logExcludePaths: string[]}} [opts] + */ + + constructor(opts) { + this.logExcludePaths = opts?.logExcludePaths || []; + } // apiDoc // POJO representing apiDoc API spec. Example: // const v = new Validator(require('./apiDoc.json')); @@ -163,7 +170,9 @@ class Validator { } result.params = Object.assign({}, ...path.match(result.matcher.regex).slice(1).map((m, i) => ({ [result.matcher.params[i]]: m}))); - logger.push({ path, result }).log('Matched path'); + if (!this.logExcludePaths.includes(path)) { + logger.push({path, result}).log('Matched path'); + } return result; }