@@ -47,6 +47,7 @@ type Daemon struct {
4747 receiverCount int
4848 processorCount int
4949 receiveBufferSize int
50+ enableTelemetry bool
5051
5152 // Boolean channel, set to true if error is received reading from Socket.
5253 done chan bool
@@ -134,7 +135,12 @@ func initDaemon(config *cfg.Config, enableTelemetry bool) *Daemon {
134135 log .Infof ("Using region: %v" , aws .StringValue (awsConfig .Region ))
135136
136137 if enableTelemetry {
138+ // Telemetry can be quite verbose, for example 10+ PutTelemetryRecords requests for a single invocation
137139 telemetry .Init (awsConfig , session , config .ResourceARN , noMetadata )
140+ } else {
141+ // Telemetry cannot be nil because it is used internally in the X-Ray daemon, for example in batchprocessor.go
142+ // We assume that SegmentReceived is never invoked internally in X-Ray because it enables postTelemetry.
143+ telemetry .T = telemetry .GetTestTelemetry ()
138144 }
139145
140146 // If calculated number of buffer is lower than our default, use calculated one. Otherwise, use default value.
@@ -152,6 +158,7 @@ func initDaemon(config *cfg.Config, enableTelemetry bool) *Daemon {
152158 receiverCount : parameterConfig .ReceiverRoutines ,
153159 processorCount : processorCount ,
154160 receiveBufferSize : receiveBufferSize ,
161+ enableTelemetry : enableTelemetry ,
155162 done : make (chan bool ),
156163 std : std ,
157164 pool : bufferPool ,
@@ -180,12 +187,12 @@ func (d *Daemon) close() {
180187 // Signal routines to finish
181188 // This will push telemetry and customer segments in parallel
182189 d .std .Close ()
183- if telemetry . T != nil {
190+ if d . enableTelemetry {
184191 telemetry .T .Quit <- true
185192 }
186193
187194 <- d .processor .Done
188- if telemetry . T != nil {
195+ if d . enableTelemetry {
189196 <- telemetry .T .Done
190197 }
191198
@@ -231,7 +238,7 @@ func (d *Daemon) poll() {
231238 fallbackPointerUsed = true
232239 }
233240 rlen := d .read (bufPointer )
234- if rlen > 0 && telemetry . T != nil {
241+ if rlen > 0 && d . enableTelemetry {
235242 telemetry .T .SegmentReceived (1 )
236243 }
237244 if rlen == 0 {
@@ -242,7 +249,7 @@ func (d *Daemon) poll() {
242249 }
243250 if fallbackPointerUsed {
244251 log .Warn ("Segment dropped. Consider increasing memory limit" )
245- if telemetry . T != nil {
252+ if d . enableTelemetry {
246253 telemetry .T .SegmentSpillover (1 )
247254 }
248255 continue
@@ -257,7 +264,7 @@ func (d *Daemon) poll() {
257264 if len (slices [1 ]) == 0 {
258265 log .Warnf ("Missing header or segment: %s" , string (slices [0 ]))
259266 d .pool .Return (bufPointer )
260- if telemetry . T != nil {
267+ if d . enableTelemetry {
261268 telemetry .T .SegmentRejected (1 )
262269 }
263270 continue
@@ -273,7 +280,7 @@ func (d *Daemon) poll() {
273280 default :
274281 log .Warnf ("Invalid header: %s" , string (header ))
275282 d .pool .Return (bufPointer )
276- if telemetry . T != nil {
283+ if d . enableTelemetry {
277284 telemetry .T .SegmentRejected (1 )
278285 }
279286 continue
0 commit comments