Current File : //lib/node_modules/pm2/node_modules/@pm2/io/build/main/src/metrics/transaction.js |
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const util = require("util");
const proxy_1 = require("../utils/proxy");
const httpWrapper_1 = require("../wrapper/httpWrapper");
const debug_1 = require("debug");
const debug = debug_1.default('axm:tracing');
const configuration_1 = require("../configuration");
const metricConfig_1 = require("../utils/metricConfig");
const serviceManager_1 = require("../serviceManager");
class Transaction {
constructor(metricFeature) {
this.defaultConf = {
http: true
};
this.metricFeature = metricFeature;
serviceManager_1.ServiceManager.set('wrapper', {});
}
init(config) {
config = metricConfig_1.default.getConfig(config, this.defaultConf);
if (config.http) {
const opts = typeof config.http === 'object' ? config.http : {};
this.http(opts);
}
if (config.tracing) {
const opts = typeof config.tracing === 'object' ? config.tracing : {};
this.tracing(opts);
}
}
destroy() {
debug('Transaction destroyed !');
}
tracing(opts) {
if (Array.isArray(opts.ignore_routes) && opts.ignore_routes.length > 0) {
opts.ignoreFilter = { url: opts.ignore_routes };
}
// we should never enable tracing agent two time
if (require('vxx').get().isActive())
return;
this.tracer = require('vxx').start(opts);
configuration_1.default.configureModule({
tracing_enabled: true
});
// broadcast to pm2 aggregator
this.tracer.getBus().on('transaction', (data) => {
serviceManager_1.ServiceManager.get('transport').send('axm:trace', data);
});
}
http(opts) {
const Module = require('module');
debug('Wrapping HTTP routes');
if (Array.isArray(opts)) {
const routes = JSON.parse(JSON.stringify(opts));
opts = {
http: true,
http_latency: 200,
http_code: 500,
ignore_routes: routes
};
}
opts = util['_extend']({
http: true,
http_latency: 200,
http_code: 500,
ignore_routes: []
}, opts);
const self = this;
proxy_1.default.wrap(Module, '_load', (load) => {
if (load.__axm_original) {
debug('HTTP routes have already been wrapped before');
configuration_1.default.configureModule({
latency: opts.http
});
if (opts.http === false) {
return function (file) {
return load.__axm_original.apply(this, arguments);
};
}
else {
return function (file) {
if (file === 'http' || file === 'https') {
// initialize transaction metrics only once
if (!serviceManager_1.ServiceManager.get('wrapper')[file]) {
opts.name = file;
serviceManager_1.ServiceManager.get('wrapper')[file] = new httpWrapper_1.default(self.metricFeature).init(opts, load.__axm_original.apply(this, arguments));
}
return serviceManager_1.ServiceManager.get('wrapper')[file];
}
else {
return load.__axm_original.apply(this, arguments);
}
};
}
}
return function (file) {
if (opts.http &&
(file === 'http' || file === 'https')) {
debug('http module being required');
configuration_1.default.configureModule({
latency: true
});
// initialize transaction metrics only once
if (!serviceManager_1.ServiceManager.get('wrapper')[file]) {
opts.name = file;
serviceManager_1.ServiceManager.get('wrapper')[file] = new httpWrapper_1.default(self.metricFeature).init(opts, load.apply(this, arguments));
}
return serviceManager_1.ServiceManager.get('wrapper')[file];
}
else {
return load.apply(this, arguments);
}
};
});
}
}
exports.default = Transaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbWV0cmljcy90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDZCQUE0QjtBQUM1QiwwQ0FBa0M7QUFDbEMsd0RBQW1EO0FBQ25ELGlDQUF5QjtBQUN6QixNQUFNLEtBQUssR0FBRyxlQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7QUFDbEMsb0RBQTRDO0FBRTVDLHdEQUFnRDtBQUNoRCxzREFBa0Q7QUFFbEQ7SUFTRSxZQUFhLGFBQTZCO1FBSmxDLGdCQUFXLEdBQUc7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFBO1FBR0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsK0JBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFRCxJQUFJLENBQUUsTUFBTztRQUNYLE1BQU0sR0FBRyxzQkFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXpELElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtZQUNmLE1BQU0sSUFBSSxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2hCO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ25CO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFFLElBQUk7UUFFWCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtTQUNoRDtRQUVELGdEQUFnRDtRQUNoRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFNO1FBRTNDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV4Qyx1QkFBYSxDQUFDLGVBQWUsQ0FBQztZQUM1QixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUE7UUFFRiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDOUMsK0JBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN6RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxJQUFJLENBQUUsSUFBSTtRQUNSLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUVoQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUU3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDL0MsSUFBSSxHQUFHO2dCQUNMLElBQUksRUFBRSxJQUFJO2dCQUNWLFlBQVksRUFBRSxHQUFHO2dCQUNqQixTQUFTLEVBQUUsR0FBRztnQkFDZCxhQUFhLEVBQUUsTUFBTTthQUN0QixDQUFBO1NBQ0Y7UUFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsWUFBWSxFQUFFLEdBQUc7WUFDakIsU0FBUyxFQUFFLEdBQUc7WUFDZCxhQUFhLEVBQUUsRUFBRTtTQUNsQixFQUFFLElBQUksQ0FBQyxDQUFBO1FBRVIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLGVBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUE7Z0JBRXJELHVCQUFhLENBQUMsZUFBZSxDQUFDO29CQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ25CLENBQUMsQ0FBQTtnQkFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO29CQUN2QixPQUFPLFVBQVUsSUFBSTt3QkFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7b0JBQ25ELENBQUMsQ0FBQTtpQkFDRjtxQkFBTTtvQkFDTCxPQUFPLFVBQVUsSUFBSTt3QkFDbkIsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7NEJBQ3ZDLDJDQUEyQzs0QkFDM0MsSUFBSSxDQUFDLCtCQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtnQ0FDaEIsK0JBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBOzZCQUNwSTs0QkFDRCxPQUFPLCtCQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO3lCQUMzQzs2QkFBTTs0QkFDTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTt5QkFDbEQ7b0JBQ0gsQ0FBQyxDQUFBO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLFVBQVUsSUFBSTtnQkFFbkIsSUFBSSxJQUFJLENBQUMsSUFBSTtvQkFDWCxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxFQUFFO29CQUN2QyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtvQkFDbkMsdUJBQWEsQ0FBQyxlQUFlLENBQUM7d0JBQzVCLE9BQU8sRUFBRSxJQUFJO3FCQUNkLENBQUMsQ0FBQTtvQkFFRiwyQ0FBMkM7b0JBQzNDLElBQUksQ0FBQywrQkFBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7d0JBQ2hCLCtCQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO3FCQUNySDtvQkFDRCxPQUFPLCtCQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUUzQztxQkFBTTtvQkFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO2lCQUNuQztZQUNILENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBOUhELDhCQThIQyJ9