@@ -8,9 +8,12 @@ const TraceState = require('./tracestate')
8
8
const tags = require ( '../../../../../ext/tags' )
9
9
const { channel } = require ( 'dc-polyfill' )
10
10
const { setBaggageItem, getAllBaggageItems, removeAllBaggageItems } = require ( '../../baggage' )
11
+ const telemetryMetrics = require ( '../../telemetry/metrics' )
11
12
12
13
const { AUTO_KEEP , AUTO_REJECT , USER_KEEP } = require ( '../../../../../ext/priority' )
13
14
15
+ const tracerMetrics = telemetryMetrics . manager . namespace ( 'tracers' )
16
+
14
17
const injectCh = channel ( 'dd-trace:span:inject' )
15
18
const extractCh = channel ( 'dd-trace:span:extract' )
16
19
@@ -142,12 +145,27 @@ class TextMapPropagator {
142
145
const item = `${ this . _encodeOtelBaggageKey ( String ( key ) . trim ( ) ) } =${ encodeURIComponent ( String ( value ) . trim ( ) ) } ,`
143
146
itemCounter += 1
144
147
byteCounter += Buffer . byteLength ( item )
145
- if ( itemCounter > this . _config . baggageMaxItems || byteCounter > this . _config . baggageMaxBytes ) break
148
+
149
+ // Check for item count limit exceeded
150
+ if ( itemCounter > this . _config . baggageMaxItems ) {
151
+ tracerMetrics . count ( 'context_header_style.truncated' , [ 'truncation_reason:baggage_item_count_exceeded' ] ) . inc ( )
152
+ break
153
+ }
154
+
155
+ // Check for byte count limit exceeded
156
+ if ( byteCounter > this . _config . baggageMaxBytes ) {
157
+ tracerMetrics . count ( 'context_header_style.truncated' , [ 'truncation_reason:baggage_byte_count_exceeded' ] ) . inc ( )
158
+ break
159
+ }
160
+
146
161
baggage += item
147
162
}
148
163
149
164
baggage = baggage . slice ( 0 , - 1 )
150
- if ( baggage ) carrier . baggage = baggage
165
+ if ( baggage ) {
166
+ carrier . baggage = baggage
167
+ tracerMetrics . count ( 'context_header_style.injected' , [ 'header_style:baggage' ] ) . inc ( )
168
+ }
151
169
}
152
170
}
153
171
@@ -635,13 +653,15 @@ class TextMapPropagator {
635
653
: new Set ( this . _config . baggageTagKeys . split ( ',' ) )
636
654
for ( const keyValue of baggages ) {
637
655
if ( ! keyValue . includes ( '=' ) ) {
656
+ tracerMetrics . count ( 'context_header_style.malformed' , [ 'header_style:baggage' ] ) . inc ( )
638
657
removeAllBaggageItems ( )
639
658
return
640
659
}
641
660
let [ key , value ] = keyValue . split ( '=' )
642
661
key = this . _decodeOtelBaggageKey ( key . trim ( ) )
643
662
value = decodeURIComponent ( value . trim ( ) )
644
663
if ( ! key || ! value ) {
664
+ tracerMetrics . count ( 'context_header_style.malformed' , [ 'header_style:baggage' ] ) . inc ( )
645
665
removeAllBaggageItems ( )
646
666
return
647
667
}
@@ -650,6 +670,9 @@ class TextMapPropagator {
650
670
}
651
671
setBaggageItem ( key , value )
652
672
}
673
+
674
+ // Successfully extracted baggage
675
+ tracerMetrics . count ( 'context_header_style.extracted' , [ 'header_style:baggage' ] ) . inc ( )
653
676
}
654
677
655
678
_extractSamplingPriority ( carrier , spanContext ) {
0 commit comments