in sdk_contrib/koa/lib/koa_mw.js [27:81]
openSegment: function openSegment(defaultName) {
if (!defaultName || typeof defaultName !== 'string') {
throw new Error(
'Default segment name was not supplied. Please provide a string.'
);
}
mwUtils.setDefaultName(defaultName);
return async (ctx, next) => {
const amznTraceHeader = mwUtils.processHeaders(ctx);
const name = mwUtils.resolveName(ctx.host);
const segment = new Segment(
name,
amznTraceHeader.Root || amznTraceHeader.root,
amznTraceHeader.Parent || amznTraceHeader.parent
);
mwUtils.resolveSampling(amznTraceHeader, segment, ctx);
segment.addIncomingRequestData(new IncomingRequestData(ctx.req));
mwUtils.middlewareLog('Starting koa segment', ctx.url, segment);
if (AWSXRay.isAutomaticMode()) {
const ns = AWSXRay.getNamespace();
ns.bindEmitter(ctx.req);
ns.bindEmitter(ctx.res);
return ns.runAndReturn(async function () {
let error;
AWSXRay.setSegment(segment);
ctx.segment = segment;
try {
if (next) {
await next();
}
} catch (err) {
error = err;
}
exports._processResponse(ctx, segment, error);
});
} else {
let error;
ctx.segment = segment;
try {
if (next) {
await next();
}
} catch (err) {
error = err;
}
exports._processResponse(ctx, segment, error);
}
};
},