packages/restify/lib/restify_mw.js (49 lines of code) (raw):
/**
* Enable X-Ray for Restify module.
*
* Exposes the 'enable' function to enable automated data capturing for a Restify web service. To enable on a Restify server,
* use 'AWSXRayRestify.enable(<server>, <default segment name>)' before defining your routes.
* Use AWSXRay.getSegment() to access the current sub/segment.
* If in manual mode, this appends the Segment object to the request object as req.segment, or in the case of using
* the Restify context plugin, it will be set as 'XRaySegment'.
* @module restify_mw
*/
var AWSXRay = require('aws-xray-sdk-core');
var mwUtils = AWSXRay.middleware;
var restifyMW = {
/**
* Use 'AWSXRayRestify.enable(server, 'defaultName'))' before defining your routes.
* Use AWSXRay.getSegment() to access the current sub/segment.
* If in manual mode, this appends the Segment object to the request object as req.segment, or in the case of using
* the Restify context plugin, it will be set as 'XRaySegment'.
* @param {Server} server - The Restify server instance.
* @param {string} defaultName - The default name for the segment.
* @alias module:restify_mw.enable
*/
enable: function enable(server, defaultName) {
if (!server) {
throw new Error('Restify server instance to enable was not supplied. Please provide a server.');
}
if (!defaultName || typeof defaultName !== 'string') {
throw new Error('Default segment name was not supplied. Please provide a string.');
}
mwUtils.setDefaultName(defaultName);
AWSXRay.getLogger().debug('Enabling AWS X-Ray for Restify.');
var segment;
server.use(function open(req, res, next) {
segment = mwUtils.traceRequestResponseCycle(req, res);
if (AWSXRay.isAutomaticMode()) {
var ns = AWSXRay.getNamespace();
ns.bindEmitter(req);
ns.bindEmitter(res);
ns.run(function() {
AWSXRay.setSegment(segment);
if (next) {
next();
}
});
} else {
if (req.set) {
req.set('XRaySegment', segment);
} else {
req.segment = segment;
}
if (next) {
next();
}
}
});
server.on('uncaughtException', function uncaughtError(req, res, route, err) {
if (segment && err) {
segment.close(err);
}
});
server.on('after', function handledError(req, res, route, err) {
if (segment && err) {
segment.addError(err);
}
});
}
};
module.exports = restifyMW;