@@ -55,8 +55,7 @@ var tracerInitialized = false
5555
5656// MakeListener initializes a new trace lambda Listener
5757func MakeListener (config Config , extensionManager * extension.ExtensionManager ) Listener {
58-
59- return Listener {
58+ l := Listener {
6059 ddTraceEnabled : config .DDTraceEnabled ,
6160 mergeXrayTraces : config .MergeXrayTraces ,
6261 universalInstrumentation : config .UniversalInstrumentation ,
@@ -65,9 +64,40 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L
6564 traceContextExtractor : config .TraceContextExtractor ,
6665 tracerOptions : config .TracerOptions ,
6766 }
67+
68+ if l .ddTraceEnabled && ! tracerInitialized {
69+ l .initTracer ()
70+ }
71+
72+ return l
73+ }
74+
75+ func (l * Listener ) initTracer () {
76+ serviceName := os .Getenv ("DD_SERVICE" )
77+ if serviceName == "" {
78+ serviceName = "aws.lambda"
79+ }
80+ extensionNotRunning := ! l .extensionManager .IsExtensionRunning ()
81+ opts := append ([]tracer.StartOption {
82+ tracer .WithService (serviceName ),
83+ tracer .WithLambdaMode (extensionNotRunning ),
84+ tracer .WithGlobalTag ("_dd.origin" , "lambda" ),
85+ tracer .WithSendRetries (2 ),
86+ }, l .tracerOptions ... )
87+ if l .otelTracerEnabled {
88+ provider := ddotel .NewTracerProvider (
89+ opts ... ,
90+ )
91+ otel .SetTracerProvider (provider )
92+ } else {
93+ tracer .Start (
94+ opts ... ,
95+ )
96+ }
97+ tracerInitialized = true
6898}
6999
70- // HandlerStarted sets up tracing and starts the function execution span if Datadog tracing is enabled
100+ // HandlerStarted starts the function execution span if Datadog tracing is enabled
71101func (l * Listener ) HandlerStarted (ctx context.Context , msg json.RawMessage ) context.Context {
72102 if ! l .ddTraceEnabled {
73103 return ctx
@@ -79,31 +109,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont
79109
80110 ctx , _ = contextWithRootTraceContext (ctx , msg , l .mergeXrayTraces , l .traceContextExtractor )
81111
82- if ! tracerInitialized {
83- serviceName := os .Getenv ("DD_SERVICE" )
84- if serviceName == "" {
85- serviceName = "aws.lambda"
86- }
87- extensionNotRunning := ! l .extensionManager .IsExtensionRunning ()
88- opts := append ([]tracer.StartOption {
89- tracer .WithService (serviceName ),
90- tracer .WithLambdaMode (extensionNotRunning ),
91- tracer .WithGlobalTag ("_dd.origin" , "lambda" ),
92- tracer .WithSendRetries (2 ),
93- }, l .tracerOptions ... )
94- if l .otelTracerEnabled {
95- provider := ddotel .NewTracerProvider (
96- opts ... ,
97- )
98- otel .SetTracerProvider (provider )
99- } else {
100- tracer .Start (
101- opts ... ,
102- )
103- }
104- tracerInitialized = true
105- }
106-
107112 isDdServerlessSpan := l .universalInstrumentation && l .extensionManager .IsExtensionRunning ()
108113 functionExecutionSpan , ctx = startFunctionExecutionSpan (ctx , l .mergeXrayTraces , isDdServerlessSpan )
109114
0 commit comments