@@ -55,6 +55,24 @@ var tracerInitialized = false
55
55
56
56
// MakeListener initializes a new trace lambda Listener
57
57
func MakeListener (config Config , extensionManager * extension.ExtensionManager ) Listener {
58
+ if config .TracerOptions == nil {
59
+ config .TracerOptions = []tracer.StartOption {}
60
+ }
61
+
62
+ // Read DD_TRACE_SAMPLING_RULES before initializing tracer
63
+ if ruleStr := os .Getenv ("DD_TRACE_SAMPLING_RULES" ); ruleStr != "" {
64
+ var rules []map [string ]interface {}
65
+ if err := json .Unmarshal ([]byte (ruleStr ), & rules ); err == nil {
66
+ // Convert environment rules to tracer.SamplingRule
67
+ for _ , rule := range rules {
68
+ if rate , ok := rule ["sample_rate" ].(float64 ); ok {
69
+ samplingRule := tracer .RateRule (rate )
70
+ config .TracerOptions = append (config .TracerOptions ,
71
+ tracer .WithSamplingRules ([]tracer.SamplingRule {samplingRule }))
72
+ }
73
+ }
74
+ }
75
+ }
58
76
59
77
return Listener {
60
78
ddTraceEnabled : config .DDTraceEnabled ,
@@ -113,8 +131,6 @@ func (l *Listener) HandlerStarted(ctx context.Context, msg json.RawMessage) cont
113
131
return ctx
114
132
}
115
133
116
- //
117
-
118
134
// HandlerFinished ends the function execution span and stops the tracer
119
135
func (l * Listener ) HandlerFinished (ctx context.Context , err error ) {
120
136
if functionExecutionSpan != nil {
0 commit comments