sdk_contrib/fastify/lib/hooks/on-request.hook.js (24 lines of code) (raw):
// @ts-check
const AWSXRay = require('aws-xray-sdk-core');
const { middleware: mwUtils } = AWSXRay;
/** @type {import('fastify').onRequestHookHandler} */
module.exports = function onRequestHook(request, reply, done) {
const req = request.raw;
const res = reply.raw;
const segment = mwUtils.traceRequestResponseCycle(req, res);
if (AWSXRay.isAutomaticMode()) {
const ns = AWSXRay.getNamespace();
ns.bindEmitter(req);
ns.bindEmitter(res);
ns.run(() => {
AWSXRay.setSegment(segment);
done();
});
} else {
request.log.info('Manual mode, skipping segment');
if (!request.segment) {
request.segment = segment;
} else {
request.log.warn('Request already has a segment, skipping');
}
done();
}
};