in packages/core/lib/middleware/mw_utils.js [170:218]
traceRequestResponseCycle: function traceRequestResponseCycle(req, res) {
var amznTraceHeader = this.processHeaders(req);
var name = this.resolveName(req.headers.host);
var segment = new Segment(name, amznTraceHeader.root, amznTraceHeader.parent);
if (!res.req) {
res.req = req;
}
this.resolveSampling(amznTraceHeader, segment, res);
segment.addIncomingRequestData(new IncomingRequestData(req));
this.middlewareLog('Starting middleware segment', req.url, segment);
var middlewareLog = this.middlewareLog;
var didEnd = false;
var endSegment = function () {
// ensure `endSegment` is only called once
// in some versions of node.js 10.x and in all versions of node.js 11.x and higher,
// the 'finish' and 'close' event are BOTH triggered.
// Previously, only one or the other was triggered:
// https://github.com/nodejs/node/pull/20611
if (didEnd) {
return;
}
didEnd = true;
if (res.statusCode === 429) {
segment.addThrottleFlag();
}
const cause = coreUtils.getCauseTypeFromHttpStatus(
res.statusCode
);
if (cause) {
segment[cause] = true;
}
segment.http.close(res);
segment.close();
middlewareLog('Closed middleware segment successfully', req.url, segment);
};
res.on('finish', endSegment);
res.on('close', endSegment);
return segment;
}