Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 33 additions & 28 deletions contrib/aws/datadog-lambda-go/internal/trace/listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ var tracerInitialized = false

// MakeListener initializes a new trace lambda Listener
func MakeListener(config Config, extensionManager *extension.ExtensionManager) Listener {

return Listener{
l := Listener{
ddTraceEnabled: config.DDTraceEnabled,
mergeXrayTraces: config.MergeXrayTraces,
universalInstrumentation: config.UniversalInstrumentation,
Expand All @@ -63,9 +62,40 @@ func MakeListener(config Config, extensionManager *extension.ExtensionManager) L
traceContextExtractor: config.TraceContextExtractor,
tracerOptions: config.TracerOptions,
}

if l.ddTraceEnabled && !tracerInitialized {
l.initTracer()
}

return l
}

func (l *Listener) initTracer() {
serviceName := os.Getenv("DD_SERVICE")
if serviceName == "" {
serviceName = internal.Instr.ServiceName(instrumentation.ComponentDefault, instrumentation.OperationContext{})
}
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
opts := append([]ddtracer.StartOption{
ddtracer.WithService(serviceName),
ddtracer.WithLambdaMode(extensionNotRunning),
ddtracer.WithGlobalTag("_dd.origin", "lambda"),
ddtracer.WithSendRetries(2),
}, l.tracerOptions...)
if l.otelTracerEnabled {
provider := ddotel.NewTracerProvider(
opts...,
)
otel.SetTracerProvider(provider)
} else {
ddtracer.Start(
opts...,
)
}
tracerInitialized = true
}

// HandlerStarted sets up tracing and starts the function execution span if Datadog tracing is enabled
// HandlerStarted starts the function execution span if Datadog tracing is enabled
func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) context.Context {
if !l.ddTraceEnabled {
return ctx
Expand All @@ -77,31 +107,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont

ctx, _ = contextWithRootTraceContext(ctx, msg, l.mergeXrayTraces, l.traceContextExtractor)

if !tracerInitialized {
serviceName := os.Getenv("DD_SERVICE")
if serviceName == "" {
serviceName = internal.Instr.ServiceName(instrumentation.ComponentDefault, instrumentation.OperationContext{})
}
extensionNotRunning := !l.extensionManager.IsExtensionRunning()
opts := append([]ddtracer.StartOption{
ddtracer.WithService(serviceName),
ddtracer.WithLambdaMode(extensionNotRunning),
ddtracer.WithGlobalTag("_dd.origin", "lambda"),
ddtracer.WithSendRetries(2),
}, l.tracerOptions...)
if l.otelTracerEnabled {
provider := ddotel.NewTracerProvider(
opts...,
)
otel.SetTracerProvider(provider)
} else {
ddtracer.Start(
opts...,
)
}
tracerInitialized = true
}

isDdServerlessSpan := l.universalInstrumentation && l.extensionManager.IsExtensionRunning()
functionExecutionSpan, ctx = startFunctionExecutionSpan(ctx, l.mergeXrayTraces, isDdServerlessSpan)

Expand Down
Loading