populateTraceData: function()

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;
    }