12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
import logging
15
- from typing import Sequence , Any , Mapping , Dict , Callable , List
16
15
16
+ from opentelemetry .exporter .otlp .proto .common import _encode_attributes
17
17
from opentelemetry .proto .collector .metrics .v1 .metrics_service_pb2 import (
18
18
ExportMetricsServiceRequest ,
19
19
)
20
- from opentelemetry .proto .common .v1 .common_pb2 import (
21
- KeyValue ,
22
- InstrumentationScope ,
23
- AnyValue ,
24
- ArrayValue ,
25
- KeyValueList ,
26
- )
20
+ from opentelemetry .proto .common .v1 .common_pb2 import InstrumentationScope
27
21
from opentelemetry .proto .metrics .v1 import metrics_pb2 as pb2
28
22
from opentelemetry .sdk .metrics .export import (
29
23
MetricsData ,
34
28
from opentelemetry .proto .resource .v1 .resource_pb2 import (
35
29
Resource as PB2Resource ,
36
30
)
37
- from opentelemetry .sdk .resources import Resource
38
31
39
32
_logger = logging .getLogger (__name__ )
40
33
41
34
42
- def _translate_attributes (attributes ) -> Sequence [KeyValue ]:
43
- output = []
44
- if attributes :
45
-
46
- for key , value in attributes .items ():
47
- try :
48
- output .append (_translate_key_values (key , value ))
49
- except Exception as error : # pylint: disable=broad-except
50
- _logger .exception (error )
51
- return output
52
-
53
-
54
35
def encode_metrics (data : MetricsData ) -> ExportMetricsServiceRequest :
55
36
resource_metrics_dict = {}
56
37
@@ -90,7 +71,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
90
71
if isinstance (metric .data , Gauge ):
91
72
for data_point in metric .data .data_points :
92
73
pt = pb2 .NumberDataPoint (
93
- attributes = _translate_attributes (
74
+ attributes = _encode_attributes (
94
75
data_point .attributes
95
76
),
96
77
time_unix_nano = data_point .time_unix_nano ,
@@ -104,7 +85,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
104
85
elif isinstance (metric .data , Histogram ):
105
86
for data_point in metric .data .data_points :
106
87
pt = pb2 .HistogramDataPoint (
107
- attributes = _translate_attributes (
88
+ attributes = _encode_attributes (
108
89
data_point .attributes
109
90
),
110
91
time_unix_nano = data_point .time_unix_nano ,
@@ -126,7 +107,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
126
107
elif isinstance (metric .data , Sum ):
127
108
for data_point in metric .data .data_points :
128
109
pt = pb2 .NumberDataPoint (
129
- attributes = _translate_attributes (
110
+ attributes = _encode_attributes (
130
111
data_point .attributes
131
112
),
132
113
start_time_unix_nano = (
@@ -163,75 +144,10 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
163
144
resource_data .append (
164
145
pb2 .ResourceMetrics (
165
146
resource = PB2Resource (
166
- attributes = _translate_attributes (sdk_resource .attributes )
147
+ attributes = _encode_attributes (sdk_resource .attributes )
167
148
),
168
149
scope_metrics = scope_data .values (),
169
150
)
170
151
)
171
152
resource_metrics = resource_data
172
153
return ExportMetricsServiceRequest (resource_metrics = resource_metrics )
173
-
174
-
175
- def _translate_value (value : Any ) -> KeyValue :
176
- if isinstance (value , bool ):
177
- return AnyValue (bool_value = value )
178
- elif isinstance (value , str ):
179
- return AnyValue (string_value = value )
180
- elif isinstance (value , int ):
181
- return AnyValue (int_value = value )
182
- elif isinstance (value , float ):
183
- return AnyValue (double_value = value )
184
- elif isinstance (value , Sequence ):
185
- return AnyValue (
186
- array_value = ArrayValue (values = [_translate_value (v ) for v in value ])
187
- )
188
- elif isinstance (value , Mapping ):
189
- return AnyValue (
190
- kvlist_value = KeyValueList (
191
- values = [
192
- _translate_key_values (str (k ), v ) for k , v in value .items ()
193
- ]
194
- )
195
- )
196
- raise Exception (f"Invalid type { type (value )} of value { value } " )
197
-
198
-
199
- def _translate_key_values (key : str , value : Any ) -> KeyValue :
200
- return KeyValue (key = key , value = _translate_value (value ))
201
-
202
-
203
- def _get_resource_data (
204
- sdk_resource_scope_data : Dict [Resource , Any ], # ResourceDataT?
205
- resource_class : Callable [..., PB2Resource ],
206
- name : str ,
207
- ) -> List [PB2Resource ]:
208
-
209
- resource_data = []
210
-
211
- for (
212
- sdk_resource ,
213
- scope_data ,
214
- ) in sdk_resource_scope_data .items ():
215
-
216
- collector_resource = PB2Resource ()
217
-
218
- for key , value in sdk_resource .attributes .items ():
219
-
220
- try :
221
- # pylint: disable=no-member
222
- collector_resource .attributes .append (
223
- _translate_key_values (key , value )
224
- )
225
- except Exception as error : # pylint: disable=broad-except
226
- _logger .exception (error )
227
-
228
- resource_data .append (
229
- resource_class (
230
- ** {
231
- "resource" : collector_resource ,
232
- "scope_{}" .format (name ): scope_data .values (),
233
- }
234
- )
235
- )
236
-
237
- return resource_data
0 commit comments