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