public void TransformSpans(LambdaRootSpan rootSpan) { lock (_spanReservoirLock) { // Record errors after root span has finished. By now, txn name has been set foreach (LambdaSpan lambdaSpan in _spanReservoir) { _errors.RecordErrors(lambdaSpan); } var arnTag = rootSpan.GetTag("aws.arn"); var arn = (arnTag as string) ?? ""; LinkedList <Event> spans; // Do not collect Spans if sampled=false, clear reservoir and set spans to empty list if (rootSpan.PrioritySamplingState.Sampled) { spans = _spanReservoir; } else { spans = new LinkedList <Event>(); } _spanReservoir = new LinkedList <Event>(); TransactionEvent txnEvent = new TransactionEvent(rootSpan); var errorEvents = _errors.GetAndClearEvents(); var errorTraces = _errors.GetAndClearTraces(); var(payload, data) = PreparePayload(arn, _executionEnv, spans.ToList(), txnEvent, errorEvents, errorTraces); // If named pipe exists we want to send the payload there instead of writing to standard out, overwriting any previous data. if (_fileSystemManager.Exists(_namedPipePath)) { _fileSystemManager.WriteAllText(_namedPipePath, payload); return; } WriteData(payload, data); } }