New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@mojaloop/central-services-metrics

Package Overview
Dependencies
Maintainers
0
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mojaloop/central-services-metrics - npm Package Compare versions

Comparing version 12.1.0 to 12.2.0

100

dist/metrics.js

@@ -75,3 +75,3 @@ /*****

/** The options passed to the setup */
this._options = { prefix: '', timeout: 0 };
this._options = { prefix: '', timeout: 0, maxConnections: 0, maxRequestsPending: 0 };
/** Object containing the default registry */

@@ -188,2 +188,100 @@ this._register = client.register;

};
this.plugin = {
name: 'http server metrics',
register: function (server) {
var requestCounter = new client.Counter({
registers: [_this.getDefaultRegister()],
name: 'http_requests_total',
help: 'Total number of http requests',
labelNames: ['method', 'status_code', 'path']
});
var requestDuration = new client.Summary({
registers: [_this.getDefaultRegister()],
name: 'http_request_duration_seconds',
help: 'Duration of http requests',
labelNames: ['method', 'status_code', 'path'],
aggregator: 'average'
});
var requestDurationHistogram = new client.Histogram({
registers: [_this.getDefaultRegister()],
name: 'http_request_duration_histogram_seconds',
help: 'Duration of http requests',
labelNames: ['method', 'status_code', 'path'],
aggregator: 'average'
});
var requests = 0;
var requestsGauge = new client.Gauge({
registers: [_this.getDefaultRegister()],
name: 'http_requests_current',
help: 'Number of requests currently running',
labelNames: ['method']
});
server.ext('onRequest', function (request, h) {
var _a = _this.getOptions(), _b = _a.maxConnections, maxConnections = _b === void 0 ? 0 : _b, _c = _a.maxRequestsPending, maxRequestsPending = _c === void 0 ? 0 : _c;
if ((maxConnections > 0 || maxRequestsPending > 0) && request.path === '/ready') {
if (maxConnections > 0 && connections >= maxConnections) {
return h.response('Max connections reached').code(503).takeover();
}
if (maxRequestsPending > 0 && requests >= maxRequestsPending) {
return h.response('Max requests pending reached').code(503).takeover();
}
}
if (['/metrics', '/health', '/ready'].includes(request.path))
return h.continue;
requests++;
requestsGauge.inc({ method: request.method });
return h.continue;
});
server.events.on('response', function (request) {
if (['/metrics', '/health', '/ready'].includes(request.path))
return;
requests--;
requestsGauge.dec({ method: request.method });
var path = request.route.path === '/{p*}' ? request.path : request.route.path;
var statusCode = String('isBoom' in request.response
? request.response.output.statusCode
: request.response.statusCode);
var duration = Math.max(Math.max(request.info.completed, request.info.responded) - request.info.received, 0);
requestCounter.labels(request.method, statusCode, path).inc();
requestDuration.labels(request.method, statusCode, path).observe(duration);
requestDurationHistogram.labels(request.method, statusCode, path).observe(duration / 1000);
});
var connections = 0;
var connectionsGauge = new client.Gauge({
registers: [_this.getDefaultRegister()],
name: 'http_connections_current',
help: 'Number of connections currently established',
labelNames: ['remote_address']
});
server.listener.on('connection', function (socket) {
var labels = { remote_address: socket.remoteAddress };
connections++;
connectionsGauge.inc(labels);
socket.on('close', function () {
connections--;
connectionsGauge.dec(labels);
});
});
server.route({
method: 'GET',
path: '/metrics',
handler: function (request, h) { return __awaiter(_this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_b = (_a = h).response;
return [4 /*yield*/, this.getMetricsForPrometheus()];
case 1: return [2 /*return*/, _b.apply(_a, [_c.sent()]).code(200).type('text/plain; version=0.0.4')];
}
});
}); },
options: {
tags: ['api', 'metrics'],
description: 'Prometheus metrics endpoint',
id: 'metrics'
}
});
}
};
}

@@ -190,0 +288,0 @@ return Metrics;

6

package.json
{
"name": "@mojaloop/central-services-metrics",
"version": "12.1.0",
"version": "12.2.0",
"description": "Shared code for metrics generation",

@@ -64,6 +64,8 @@ "main": "./dist/index.js",

"devDependencies": {
"@types/node": "^22.9.0",
"@hapi/hapi": "^21.3.12",
"@types/node": "^22.9.1",
"@types/tape": "^5.6.4",
"audit-ci": "^7.1.0",
"debug": "4.3.7",
"joi": "^17.13.3",
"npm-check-updates": "17.1.11",

@@ -70,0 +72,0 @@ "nyc": "17.1.0",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc