@@ -13,6 +13,7 @@ import (
13
13
"encoding/json"
14
14
"fmt"
15
15
"os"
16
+ "strconv"
16
17
"strings"
17
18
18
19
"github.com/DataDog/datadog-lambda-go/internal/extension"
@@ -55,36 +56,61 @@ var tracerInitialized = false
55
56
56
57
// MakeListener initializes a new trace lambda Listener
57
58
func MakeListener (config Config , extensionManager * extension.ExtensionManager ) Listener {
58
- fmt .Printf ("MakeListener()" )
59
+ fmt .Printf ("MakeListener()\n " )
59
60
if config .TracerOptions == nil {
60
61
config .TracerOptions = []tracer.StartOption {}
61
62
}
62
63
63
64
// Read DD_TRACE_SAMPLING_RULES first
64
- fmt .Printf ("Trying to get sampling rules env var" )
65
+ fmt .Printf ("Trying to get sampling rules env var\n " )
65
66
var samplingRules []tracer.SamplingRule
66
67
if ruleStr := os .Getenv ("DD_TRACE_SAMPLING_RULES" ); ruleStr != "" {
67
- fmt .Printf ("Env: %s" , ruleStr )
68
+ fmt .Printf ("Env: %s\n " , ruleStr )
68
69
var rules []map [string ]interface {}
69
70
if err := json .Unmarshal ([]byte (ruleStr ), & rules ); err == nil {
71
+ fmt .Printf ("Successfully unmarshaled rules: %+v\n " , rules )
70
72
for _ , rule := range rules {
71
- fmt .Printf ("Rule: %s" , rule )
72
- if rate , ok := rule ["sample_rate" ].(float64 ); ok {
73
- fmt .Printf ("Appending sampling rule" )
73
+ fmt .Printf ("Processing rule: %+v\n " , rule )
74
+ if rateVal , ok := rule ["sample_rate" ]; ok {
75
+ fmt .Printf ("Found sample_rate of type %T with value %v\n " , rateVal , rateVal )
76
+
77
+ // Try different type conversions
78
+ rate , ok := rateVal .(float64 )
79
+ if ! ok {
80
+ // Try converting from json.Number
81
+ if numStr , ok := rateVal .(json.Number ); ok {
82
+ rate , _ = numStr .Float64 ()
83
+ fmt .Printf ("Converted json.Number to float64: %v\n " , rate )
84
+ } else if str , ok := rateVal .(string ); ok {
85
+ rate , _ = strconv .ParseFloat (str , 64 )
86
+ fmt .Printf ("Converted string to float64: %v\n " , rate )
87
+ }
88
+ }
89
+ fmt .Printf ("Final rate value: %v\n " , rate )
74
90
samplingRules = append (samplingRules , tracer .RateRule (rate ))
75
91
}
76
92
}
93
+ } else {
94
+ fmt .Printf ("Error unmarshaling rules: %v\n " , err )
77
95
}
96
+ } else {
97
+ fmt .Printf ("No DD_TRACE_SAMPLING_RULES env var found\n " )
78
98
}
79
99
80
100
// If we have sampling rules from environment, add them first
81
101
if len (samplingRules ) > 0 {
82
- fmt .Printf ("Sample rule found, adding." )
102
+ fmt .Printf ("Adding %d sampling rules to config\n " , len (samplingRules ))
103
+ for i , rule := range samplingRules {
104
+ fmt .Printf ("Rule %d: %+v\n " , i , rule )
105
+ }
83
106
config .TracerOptions = append ([]tracer.StartOption {
84
107
tracer .WithSamplingRules (samplingRules ),
85
108
}, config .TracerOptions ... )
86
109
}
87
110
111
+ // Print final config
112
+ fmt .Printf ("Final config has %d tracer options\n " , len (config .TracerOptions ))
113
+
88
114
return Listener {
89
115
ddTraceEnabled : config .DDTraceEnabled ,
90
116
mergeXrayTraces : config .MergeXrayTraces ,
0 commit comments