atatus-nodejs
Version:
Atatus APM agent for Node.js
58 lines (47 loc) • 1.58 kB
JavaScript
;
const semver = require('semver');
const constants = require('../../../constants');
const shimmer = require('../../shimmer');
const NAME = 'RabbitMQ';
const TYPE = 'connection';
const SUBTYPE = 'rabbitmq';
module.exports = function instrumentAMQP(mod, agent, { version, enabled }) {
if (!enabled || !semver.satisfies(version, '>=0.5 <=0.11')) {
return mod;
}
const config = agent._conf;
const ins = agent._instrumentation;
agent.logger.debug('shimming AMQP.prototype.connect');
shimmer.wrap(mod, 'connect', wrapperConnect);
return mod;
function wrapperConnect(orgsConnect) {
return async function wrappedConnect() {
const args = arguments
const span = ins.createSpan(
`${NAME} Connect`,
TYPE,
SUBTYPE,
'connect',
{ exitSpan: true },
);
agent.logger.debug('AMQP connect called with args:', args);
if (!span) {
return orgsConnect.apply(this, args)
}
let result, err;
try {
result = orgsConnect.apply(this, args)
} catch (e) {
err = e
agent.logger.error(`Error in connection of rabbitmq:`, err);
throw e
} finally {
span.setOutcome(
err ? constants.OUTCOME_FAILURE : constants.OUTCOME_SUCCESS,
);
span.end();
}
return result;
}
}
}