15
15
"""OTLP Span Exporter"""
16
16
17
17
import logging
18
+ from collections .abc import Mapping , Sequence
18
19
from time import sleep
19
- from typing import Sequence
20
+ from typing import Sequence as TypingSequence
20
21
21
22
from backoff import expo
22
23
from google .rpc .error_details_pb2 import RetryInfo
34
35
from opentelemetry .proto .collector .trace .v1 .trace_service_pb2_grpc import (
35
36
TraceServiceStub ,
36
37
)
37
- from opentelemetry .proto .common .v1 .common_pb2 import AttributeKeyValue
38
+ from opentelemetry .proto .common .v1 .common_pb2 import AnyValue , KeyValue
38
39
from opentelemetry .proto .resource .v1 .resource_pb2 import Resource
39
40
from opentelemetry .proto .trace .v1 .trace_pb2 import (
40
41
InstrumentationLibrarySpans ,
49
50
50
51
51
52
def _translate_key_values (key , value ):
52
- key_value = {"key" : key }
53
53
54
54
if isinstance (value , bool ):
55
- key_value [ "bool_value" ] = value
55
+ any_value = AnyValue ( bool_value = value )
56
56
57
57
elif isinstance (value , str ):
58
- key_value [ "string_value" ] = value
58
+ any_value = AnyValue ( string_value = value )
59
59
60
60
elif isinstance (value , int ):
61
- key_value [ "int_value" ] = value
61
+ any_value = AnyValue ( int_value = value )
62
62
63
63
elif isinstance (value , float ):
64
- key_value ["double_value" ] = value
64
+ any_value = AnyValue (double_value = value )
65
+
66
+ elif isinstance (value , Sequence ):
67
+ any_value = AnyValue (array_value = value )
68
+
69
+ elif isinstance (value , Mapping ):
70
+ any_value = AnyValue (kvlist_value = value )
65
71
66
72
else :
67
73
raise Exception (
68
74
"Invalid type {} of value {}" .format (type (value ), value )
69
75
)
70
76
71
- return key_value
77
+ return KeyValue ( key = key , value = any_value )
72
78
73
79
74
80
# pylint: disable=no-member
@@ -144,7 +150,7 @@ def _translate_attributes(self, sdk_span):
144
150
145
151
try :
146
152
self ._collector_span_kwargs ["attributes" ].append (
147
- AttributeKeyValue ( ** _translate_key_values (key , value ) )
153
+ _translate_key_values (key , value )
148
154
)
149
155
except Exception as error : # pylint: disable=broad-except
150
156
logger .exception (error )
@@ -163,9 +169,7 @@ def _translate_events(self, sdk_span):
163
169
for key , value in sdk_span_event .attributes .items ():
164
170
try :
165
171
collector_span_event .attributes .append (
166
- AttributeKeyValue (
167
- ** _translate_key_values (key , value )
168
- )
172
+ _translate_key_values (key , value )
169
173
)
170
174
# pylint: disable=broad-except
171
175
except Exception as error :
@@ -191,9 +195,7 @@ def _translate_links(self, sdk_span):
191
195
for key , value in sdk_span_link .attributes .items ():
192
196
try :
193
197
collector_span_link .attributes .append (
194
- AttributeKeyValue (
195
- ** _translate_key_values (key , value )
196
- )
198
+ _translate_key_values (key , value )
197
199
)
198
200
# pylint: disable=broad-except
199
201
except Exception as error :
@@ -211,7 +213,7 @@ def _translate_status(self, sdk_span):
211
213
)
212
214
213
215
def _translate_spans (
214
- self , sdk_spans : Sequence [SDKSpan ],
216
+ self , sdk_spans : TypingSequence [SDKSpan ],
215
217
) -> ExportTraceServiceRequest :
216
218
217
219
sdk_resource_instrumentation_library_spans = {}
@@ -260,7 +262,7 @@ def _translate_spans(
260
262
261
263
try :
262
264
collector_resource .attributes .append (
263
- AttributeKeyValue ( ** _translate_key_values (key , value ) )
265
+ _translate_key_values (key , value )
264
266
)
265
267
except Exception as error : # pylint: disable=broad-except
266
268
logger .exception (error )
@@ -276,7 +278,7 @@ def _translate_spans(
276
278
277
279
return ExportTraceServiceRequest (resource_spans = resource_spans )
278
280
279
- def export (self , spans : Sequence [SDKSpan ]) -> SpanExportResult :
281
+ def export (self , spans : TypingSequence [SDKSpan ]) -> SpanExportResult :
280
282
# expo returns a generator that yields delay values which grow
281
283
# exponentially. Once delay is greater than max_value, the yielded
282
284
# value will remain constant.
0 commit comments