Skip to content

Commit 3b3c7b5

Browse files
Start tracer while initializing trace lambda listener (#222)
* move tracer initialization to lambda init * fix comments
1 parent 1e85313 commit 3b3c7b5

1 file changed

Lines changed: 33 additions & 28 deletions

File tree

internal/trace/listener.go

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ var tracerInitialized = false
5555

5656
// MakeListener initializes a new trace lambda Listener
5757
func 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
71101
func (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

Comments
 (0)