@@ -76,24 +76,31 @@ def _get_binary_key_value(key: str, value: bytes) -> model_pb2.KeyValue:
76
76
77
77
78
78
def _translate_attribute (
79
- key : str , value : types .AttributeValue
79
+ key : str , value : types .AttributeValue , max_length : Optional [ int ]
80
80
) -> Optional [model_pb2 .KeyValue ]:
81
81
"""Convert the attributes to jaeger keyvalues."""
82
82
translated = None
83
83
if isinstance (value , bool ):
84
84
translated = _get_bool_key_value (key , value )
85
85
elif isinstance (value , str ):
86
+ if max_length is not None :
87
+ value = value [:max_length ]
86
88
translated = _get_string_key_value (key , value )
87
89
elif isinstance (value , int ):
88
90
translated = _get_long_key_value (key , value )
89
91
elif isinstance (value , float ):
90
92
translated = _get_double_key_value (key , value )
91
93
elif isinstance (value , tuple ):
92
- translated = _get_string_key_value (key , str (value ))
94
+ value = str (value )
95
+ if max_length is not None :
96
+ value = value [:max_length ]
97
+ translated = _get_string_key_value (key , value )
93
98
return translated
94
99
95
100
96
- def _extract_resource_tags (span : ReadableSpan ) -> Sequence [model_pb2 .KeyValue ]:
101
+ def _extract_resource_tags (
102
+ span : ReadableSpan , max_attr_value_length : Optional [int ]
103
+ ) -> Sequence [model_pb2 .KeyValue ]:
97
104
"""Extracts resource attributes from span and returns
98
105
list of jaeger keyvalues.
99
106
@@ -102,7 +109,7 @@ def _extract_resource_tags(span: ReadableSpan) -> Sequence[model_pb2.KeyValue]:
102
109
"""
103
110
tags = []
104
111
for key , value in span .resource .attributes .items ():
105
- tag = _translate_attribute (key , value )
112
+ tag = _translate_attribute (key , value , max_attr_value_length )
106
113
if tag :
107
114
tags .append (tag )
108
115
return tags
@@ -140,7 +147,10 @@ def _proto_timestamp_from_epoch_nanos(nsec: int) -> Timestamp:
140
147
141
148
142
149
class ProtobufTranslator (Translator ):
143
- def __init__ (self , svc_name ):
150
+ def __init__ (
151
+ self , svc_name : str , max_attr_value_length : Optional [int ] = None
152
+ ):
153
+ super ().__init__ (max_attr_value_length )
144
154
self .svc_name = svc_name
145
155
146
156
def _translate_span (self , span : ReadableSpan ) -> model_pb2 .Span :
@@ -161,7 +171,8 @@ def _translate_span(self, span: ReadableSpan) -> model_pb2.Span:
161
171
flags = int (ctx .trace_flags )
162
172
163
173
process = model_pb2 .Process (
164
- service_name = self .svc_name , tags = _extract_resource_tags (span )
174
+ service_name = self .svc_name ,
175
+ tags = _extract_resource_tags (span , self .max_attr_value_length ),
165
176
)
166
177
jaeger_span = model_pb2 .Span (
167
178
trace_id = trace_id ,
@@ -183,12 +194,16 @@ def _extract_tags(
183
194
translated = []
184
195
if span .attributes :
185
196
for key , value in span .attributes .items ():
186
- key_value = _translate_attribute (key , value )
197
+ key_value = _translate_attribute (
198
+ key , value , self ._max_attr_value_length
199
+ )
187
200
if key_value is not None :
188
201
translated .append (key_value )
189
202
if span .resource .attributes :
190
203
for key , value in span .resource .attributes .items ():
191
- key_value = _translate_attribute (key , value )
204
+ key_value = _translate_attribute (
205
+ key , value , self ._max_attr_value_length
206
+ )
192
207
if key_value :
193
208
translated .append (key_value )
194
209
@@ -256,7 +271,9 @@ def _extract_logs(
256
271
for event in span .events :
257
272
fields = []
258
273
for key , value in event .attributes .items ():
259
- tag = _translate_attribute (key , value )
274
+ tag = _translate_attribute (
275
+ key , value , self ._max_attr_value_length
276
+ )
260
277
if tag :
261
278
fields .append (tag )
262
279
0 commit comments