@@ -53,8 +53,7 @@ var tracerInitialized = false
5353
5454// MakeListener initializes a new trace lambda Listener
5555func MakeListener (config Config , extensionManager * extension.ExtensionManager ) Listener {
56-
57- return Listener {
56+ l := Listener {
5857 ddTraceEnabled : config .DDTraceEnabled ,
5958 mergeXrayTraces : config .MergeXrayTraces ,
6059 universalInstrumentation : config .UniversalInstrumentation ,
@@ -63,9 +62,40 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L
6362 traceContextExtractor : config .TraceContextExtractor ,
6463 tracerOptions : config .TracerOptions ,
6564 }
65+
66+ if l .ddTraceEnabled && ! tracerInitialized {
67+ l .initTracer ()
68+ }
69+
70+ return l
71+ }
72+
73+ func (l * Listener ) initTracer () {
74+ serviceName := os .Getenv ("DD_SERVICE" )
75+ if serviceName == "" {
76+ serviceName = internal .Instr .ServiceName (instrumentation .ComponentDefault , instrumentation.OperationContext {})
77+ }
78+ extensionNotRunning := ! l .extensionManager .IsExtensionRunning ()
79+ opts := append ([]ddtracer.StartOption {
80+ ddtracer .WithService (serviceName ),
81+ ddtracer .WithLambdaMode (extensionNotRunning ),
82+ ddtracer .WithGlobalTag ("_dd.origin" , "lambda" ),
83+ ddtracer .WithSendRetries (2 ),
84+ }, l .tracerOptions ... )
85+ if l .otelTracerEnabled {
86+ provider := ddotel .NewTracerProvider (
87+ opts ... ,
88+ )
89+ otel .SetTracerProvider (provider )
90+ } else {
91+ ddtracer .Start (
92+ opts ... ,
93+ )
94+ }
95+ tracerInitialized = true
6696}
6797
68- // HandlerStarted sets up tracing and starts the function execution span if Datadog tracing is enabled
98+ // HandlerStarted starts the function execution span if Datadog tracing is enabled
6999func (l * Listener ) HandlerStarted (ctx context.Context , msg json.RawMessage ) context.Context {
70100 if ! l .ddTraceEnabled {
71101 return ctx
@@ -77,31 +107,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont
77107
78108 ctx , _ = contextWithRootTraceContext (ctx , msg , l .mergeXrayTraces , l .traceContextExtractor )
79109
80- if ! tracerInitialized {
81- serviceName := os .Getenv ("DD_SERVICE" )
82- if serviceName == "" {
83- serviceName = internal .Instr .ServiceName (instrumentation .ComponentDefault , instrumentation.OperationContext {})
84- }
85- extensionNotRunning := ! l .extensionManager .IsExtensionRunning ()
86- opts := append ([]ddtracer.StartOption {
87- ddtracer .WithService (serviceName ),
88- ddtracer .WithLambdaMode (extensionNotRunning ),
89- ddtracer .WithGlobalTag ("_dd.origin" , "lambda" ),
90- ddtracer .WithSendRetries (2 ),
91- }, l .tracerOptions ... )
92- if l .otelTracerEnabled {
93- provider := ddotel .NewTracerProvider (
94- opts ... ,
95- )
96- otel .SetTracerProvider (provider )
97- } else {
98- ddtracer .Start (
99- opts ... ,
100- )
101- }
102- tracerInitialized = true
103- }
104-
105110 isDdServerlessSpan := l .universalInstrumentation && l .extensionManager .IsExtensionRunning ()
106111 functionExecutionSpan , ctx = startFunctionExecutionSpan (ctx , l .mergeXrayTraces , isDdServerlessSpan )
107112
0 commit comments