UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

225 lines (191 loc) 11.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.incrementTransactionCount = incrementTransactionCount; exports.measureTransactionDuration = measureTransactionDuration; exports.nonPrimaryRouteRequestCount = nonPrimaryRouteRequestCount; exports.nonPrimaryRouteDurations = nonPrimaryRouteDurations; var _statsdClient = require('statsd-client'); var _statsdClient2 = _interopRequireDefault(_statsdClient); var _winston = require('winston'); var _winston2 = _interopRequireDefault(_winston); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _config = require('./config'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const statsdServer = _config.config.get('statsd'); const application = _config.config.get('application'); const domain = `${_os2.default.hostname()}.${application.name}`; const sdc = new _statsdClient2.default(statsdServer); function incrementTransactionCount(ctx, done) { _winston2.default.info(`sending counts to statsd for ${domain}.${ctx.authorisedChannel._id}`); const { transactionStatus } = ctx; try { sdc.increment(`${domain}.channels`); // Overall Counter sdc.increment(`${domain}.channels.${transactionStatus}`); // Overall Transaction Status sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}`); // Per channel sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.statuses.${transactionStatus}`); // Per Channel Status if (ctx.mediatorResponse != null) { // Check for custom mediator metrics let metric; if (ctx.mediatorResponse.metrics != null) { for (metric of Array.from(ctx.mediatorResponse.metrics)) { if (metric.type === 'counter') { _winston2.default.info(`incrementing mediator counter ${metric.name}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.mediator_metrics.${metric.name}`); } if (metric.type === 'timer') { _winston2.default.info(`incrementing mediator timer ${metric.name}`); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.mediator_metrics.${metric.name}`, metric.value); } if (metric.type === 'gauge') { _winston2.default.info(`incrementing mediator gauge ${metric.name}`); sdc.gauge(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.mediator_metrics.${metric.name}`, metric.value); } } } if (ctx.mediatorResponse.orchestrations != null) { for (const orchestration of Array.from(ctx.mediatorResponse.orchestrations)) { const orchestrationStatus = orchestration.response.status; let orchestrationName = orchestration.name; if (orchestration.group) { orchestrationName = `${orchestration.group}.${orchestration.name}`; // Namespace it by group } sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.orchestrations.${orchestrationName}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.statuses.${transactionStatus}.orchestrations.${orchestrationName}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.statuses.${transactionStatus}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`); if (orchestration.metrics != null) { for (metric of Array.from(orchestration.metrics)) { if (metric.type === 'counter') { _winston2.default.info(`incrementing orchestration counter ${metric.name}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } if (metric.type === 'timer') { _winston2.default.info(`incrementing orchestration timer ${metric.name}`); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } if (metric.type === 'gauge') { _winston2.default.info(`incrementing orchestration gauge ${metric.name}`); sdc.gauge(`${domain}.channels.${ctx.authorisedChannel._id}.${ctx.mediatorResponse.properties.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } } } } } } return done(); } catch (error) { _winston2.default.error(error, done); } } function measureTransactionDuration(ctx, done) { _winston2.default.info(`sending durations to statsd for ${domain}.${ctx.authorisedChannel._id}`); const { transactionStatus } = ctx; try { sdc.timing(`${domain}.channels`, ctx.timer); // Overall Timer sdc.timing(`${domain}.channels.${transactionStatus}`, ctx.timer); // Overall Transaction Status sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}`, ctx.timer); // Per Channel sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.statuses.${transactionStatus}`, ctx.timer); // Per Channel Status if (ctx.mediatorResponse != null) { if (ctx.mediatorResponse.orchestrations != null) { for (const orchestration of Array.from(ctx.mediatorResponse.orchestrations)) { (function (orchestration) { const orchestratrionDuration = orchestration.response.timestamp - orchestration.request.timestamp; const orchestrationStatus = orchestration.response.status; let orchestrationName = orchestration.name; if (orchestration.group) { orchestrationName = `${orchestration.group}.${orchestration.name}`; // Namespace it by group } sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.orchestrations.${orchestrationName}`, orchestratrionDuration); return sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`, orchestratrionDuration); })(orchestration); } } } } catch (error) { _winston2.default.error(error, done); } return done(); } function nonPrimaryRouteRequestCount(ctx, route, done) { let metric; sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}`); // Per non-primary route sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}`); // Per route response status if (route.metrics != null) { for (metric of Array.from(route.metrics)) { if (metric.type === 'counter') { _winston2.default.info(`incrementing mediator counter ${metric.name}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.mediator_metrics.${metric.name}`); } if (metric.type === 'timer') { _winston2.default.info(`incrementing mediator timer ${metric.name}`); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.mediator_metrics.${metric.name}`, metric.value); } if (metric.type === 'gauge') { _winston2.default.info(`incrementing mediator gauge ${metric.name}`); sdc.gauge(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.mediator_metrics.${metric.name}`, metric.value); } } } if (route.orchestrations != null) { for (const orchestration of Array.from(route.orchestrations)) { const orchestrationStatus = orchestration.response.status; let orchestrationName = orchestration.name; if (orchestration.group) { orchestrationName = `${orchestration.group}.${orchestration.name}`; // Namespace it by group } sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}.orchestrations.${orchestrationName}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`); // Log custom orchestration metrics if (orchestration.metrics != null) { return (() => { const result = []; for (metric of Array.from(orchestration.metrics)) { let item; if (metric.type === 'counter') { _winston2.default.info(`incrementing ${route.name} orchestration counter ${metric.name}`); sdc.increment(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } if (metric.type === 'timer') { _winston2.default.info(`incrementing ${route.name}orchestration timer ${metric.name}`); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } if (metric.type === 'gauge') { _winston2.default.info(`incrementing ${route.name}orchestration gauge ${metric.name}`); item = sdc.gauge(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}.${metric.name}`, metric.value); } result.push(item); } return result; })(); } } } return done(); } function nonPrimaryRouteDurations(ctx, route, done) { sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}`, ctx.timer); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}`, ctx.timer); if (route.orchestrations != null) { for (const orchestration of Array.from(route.orchestrations)) { (function (orchestration) { const orchestratrionDuration = orchestration.response.timestamp - orchestration.request.timestamp; const orchestrationStatus = orchestration.response.status; let orchestrationName = orchestration.name; if (orchestration.group) { orchestrationName = `${orchestration.group}.${orchestration.name}`; // Namespace it by group } sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}`, orchestratrionDuration); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`, orchestratrionDuration); sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}.orchestrations.${orchestrationName}`, orchestratrionDuration); return sdc.timing(`${domain}.channels.${ctx.authorisedChannel._id}.nonPrimaryRoutes.${route.name}.statusCodes.${route.response.status}.orchestrations.${orchestrationName}.statusCodes.${orchestrationStatus}`, orchestratrionDuration); })(orchestration); } } return done(); } //# sourceMappingURL=stats.js.map