pmx
Version:
PM2/Keymetrics advanced API
98 lines (81 loc) • 2.69 kB
JavaScript
var util = require('util');
var Proxy = require('./utils/proxy.js');
var SimpleHttpWrap = require('./wrapper/simple_http.js');
var Options = require('./configuration.js');
var debug = require('debug')('axm:tracing');
var Transport = require('./utils/transport.js');
var Transaction = module.exports = {};
Transaction.tracing = function (pmx, 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;
// Transaction.tracer = require('vxx').start(opts);
// Options.configureModule({
// tracing_enabled : true
// });
// broadcast to pm2 aggregator
// Transaction.tracer.getBus().on('transaction', function(data) {
// Transport.send({
// type: 'axm:trace',
// data: data
// })
// })
// Transaction.tracer.getBus().on('transaction', function (data) {
// if (!opts.custom_probes) return;
// // TODO: mine tracing data and require custom probes
// /*try {
// var custom_probe = require('./probes/' + modul)(pmx, Transaction.tracer)
// } catch (err) { }*/
// })
};
Transaction.http = function(opts) {
var Module = require('module');
debug('Wrapping HTTP routes');
if (Array.isArray(opts)) {
var routes = JSON.parse(JSON.stringify(opts));
opts = {
http : true,
http_latency : 200,
http_code : 500,
ignore_routes : routes
};
}
opts = Object.assign({
http : true,
http_latency : 200,
http_code : 500,
ignore_routes : []
}, opts);
Proxy.wrap(Module, '_load', function(load) {
if (load.__axm_original) {
debug('HTTP routes have already been wrapped before');
Options.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')
return SimpleHttpWrap(opts, load.__axm_original.apply(this, arguments));
else
return load.__axm_original.apply(this, arguments);
};
}
}
return function(file) {
if (opts.http &&
(file === 'http' || file === 'https')) {
debug('http module being required');
Options.configureModule({
latency : true
});
return SimpleHttpWrap(opts, load.apply(this, arguments));
}
else
return load.apply(this, arguments);
};
});
};