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=