Current File : //lib/node_modules/pm2/node_modules/@pm2/io/build/main/src/wrapper/httpWrapper.js |
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const proxy_1 = require("../utils/proxy");
class HttpWrapper {
constructor(metricFeature) {
this.metricFeature = metricFeature;
}
init(opts, http) {
let glMeter;
let glLatency;
if (!opts.name)
opts.name = 'http';
glMeter = this.metricFeature.meter({
name: opts.name.toUpperCase(),
samples: 60,
type: 'internal/http/builtin/reqs',
unit: 'req/min'
});
glLatency = this.metricFeature.histogram({
measurement: 'mean',
name: `pmx:${opts.name}:latency`,
type: 'internal/http/builtin/latency',
unit: 'ms'
});
const ignoreRoutes = function (url) {
for (let i = 0; i < opts.ignore_routes.length; ++i) {
if (url.match(opts.ignore_routes[i]) !== null) {
return true;
}
}
return false;
};
proxy_1.default.wrap(http.Server.prototype, ['on', 'addListener'], function (addListener) {
return function (event, listener) {
const self = this;
const overloadedFunction = function (request, response) {
glMeter.mark();
let httpStart = {
url: request.url,
start: Date.now()
};
response.once('finish', function () {
if (!ignoreRoutes(httpStart.url)) {
glLatency.update(Date.now() - httpStart.start);
}
});
};
if (!(event === 'request' && typeof listener === 'function')) {
return addListener.apply(self, arguments);
}
if (self.__overloaded !== true) {
self.on('removeListener', function onRemoveListener() {
setTimeout(function () {
if (self.listeners('request').length === 1) {
self.removeListener('request', overloadedFunction);
self.removeListener('removeListener', onRemoveListener);
self.__overloaded = false;
}
}, 200);
});
addListener.call(self, event, overloadedFunction);
self.__overloaded = true;
}
return addListener.apply(self, arguments);
};
});
return http;
}
}
exports.default = HttpWrapper;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cFdyYXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd3JhcHBlci9odHRwV3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBDQUFrQztBQUdsQztJQUlFLFlBQWEsYUFBNkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksQ0FBRSxJQUFJLEVBQUUsSUFBSTtRQUVkLElBQUksT0FBTyxDQUFBO1FBQ1gsSUFBSSxTQUFTLENBQUE7UUFFYixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtRQUVsQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLDRCQUE0QjtZQUNsQyxJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDLENBQUE7UUFFRixTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDdkMsV0FBVyxFQUFFLE1BQU07WUFDbkIsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksVUFBVTtZQUNoQyxJQUFJLEVBQUUsK0JBQStCO1lBQ3JDLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFBO1FBRUYsTUFBTSxZQUFZLEdBQUcsVUFBVSxHQUFHO1lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQzdDLE9BQU8sSUFBSSxDQUFBO2lCQUNaO2FBQ0Y7WUFDRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUMsQ0FBQTtRQUVELGVBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsVUFBVSxXQUFXO1lBQzVFLE9BQU8sVUFBVSxLQUFLLEVBQUUsUUFBUTtnQkFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFBO2dCQUVqQixNQUFNLGtCQUFrQixHQUFHLFVBQVUsT0FBTyxFQUFFLFFBQVE7b0JBQ3BELE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFFZCxJQUFJLFNBQVMsR0FBRzt3QkFDZCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7d0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO3FCQUNsQixDQUFBO29CQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDaEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFBO3lCQUMvQztvQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDLENBQUE7Z0JBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsRUFBRTtvQkFDNUQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtpQkFDMUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtvQkFFOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDeEIsVUFBVSxDQUFDOzRCQUNULElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dDQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO2dDQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUE7Z0NBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBOzZCQUMxQjt3QkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7b0JBQ1QsQ0FBQyxDQUFDLENBQUE7b0JBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUE7b0JBRWpELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO2lCQUN6QjtnQkFFRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQzNDLENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0Y7QUFyRkQsOEJBcUZDIn0=