in packages/core/lib/utils.js [163:201]
populateTraceData: function(segment, xAmznTraceId) {
logger.getLogger().debug('Lambda trace data found: ' + xAmznTraceId);
let traceData = utils.processTraceData(xAmznTraceId);
var valid = false;
if (!traceData) {
traceData = {};
logger.getLogger().error('_X_AMZN_TRACE_ID is empty or has an invalid format');
} else if (traceData.root && !traceData.parent && !traceData.sampled) {
// Lambda PassThrough only has root, treat as valid in this case and mark the segment
segment.noOp = true;
valid = true;
} else if (!traceData.root || !traceData.parent || !traceData.sampled) {
logger.getLogger().error('_X_AMZN_TRACE_ID is missing required information');
} else {
valid = true;
}
segment.trace_id = TraceID.FromString(traceData.root).toString(); // Will always assign valid trace_id
segment.id = traceData.parent || crypto.randomBytes(8).toString('hex');
if (traceData.root && segment.trace_id !== traceData.root) {
logger.getLogger().error('_X_AMZN_TRACE_ID contains invalid trace ID');
valid = false;
}
if (!parseInt(traceData.sampled)) {
segment.notTraced = true;
} else {
delete segment.notTraced;
}
if (traceData.data) {
segment.additionalTraceData = traceData.data;
}
logger.getLogger().debug('Segment started: ' + JSON.stringify(traceData));
return valid;
}