Skip to content

Commit fcfbd68

Browse files
Add Mapping to _encode_value, remove translations from common metrics encoder.
1 parent 549b2c0 commit fcfbd68

File tree

4 files changed

+20
-97
lines changed
  • exporter
    • opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common
    • opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc
    • opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter

4 files changed

+20
-97
lines changed

exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/__init__.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
import logging
1717
from collections.abc import Sequence
18-
from typing import Any, Optional, List, Callable, TypeVar, Dict
18+
from typing import Any, Mapping, Optional, List, Callable, TypeVar, Dict
1919

2020
from .version import __version__
2121
from opentelemetry.sdk.util.instrumentation import InstrumentationScope
@@ -27,6 +27,9 @@
2727
)
2828
from opentelemetry.proto.common.v1.common_pb2 import AnyValue as PB2AnyValue
2929
from opentelemetry.proto.common.v1.common_pb2 import KeyValue as PB2KeyValue
30+
from opentelemetry.proto.common.v1.common_pb2 import (
31+
KeyValueList as PB2KeyValueList,
32+
)
3033
from opentelemetry.proto.common.v1.common_pb2 import (
3134
ArrayValue as PB2ArrayValue,
3235
)
@@ -68,9 +71,12 @@ def _encode_value(value: Any) -> PB2AnyValue:
6871
return PB2AnyValue(
6972
array_value=PB2ArrayValue(values=[_encode_value(v) for v in value])
7073
)
71-
# tracing specs currently does not support Mapping type attributes.
72-
# elif isinstance(value, abc.Mapping):
73-
# pass
74+
elif isinstance(value, Mapping):
75+
return PB2AnyValue(
76+
kvlist_value=PB2KeyValueList(
77+
values=[_encode_key_value(str(k), v) for k, v in value.items()]
78+
)
79+
)
7480
raise Exception(f"Invalid type {type(value)} of value {value}")
7581

7682

exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/metrics_encoder/__init__.py

+6-90
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,12 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
import logging
15-
from typing import Sequence, Any, Mapping, Dict, Callable, List
1615

16+
from opentelemetry.exporter.otlp.proto.common import _encode_attributes
1717
from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import (
1818
ExportMetricsServiceRequest,
1919
)
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
2721
from opentelemetry.proto.metrics.v1 import metrics_pb2 as pb2
2822
from opentelemetry.sdk.metrics.export import (
2923
MetricsData,
@@ -34,23 +28,10 @@
3428
from opentelemetry.proto.resource.v1.resource_pb2 import (
3529
Resource as PB2Resource,
3630
)
37-
from opentelemetry.sdk.resources import Resource
3831

3932
_logger = logging.getLogger(__name__)
4033

4134

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-
5435
def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
5536
resource_metrics_dict = {}
5637

@@ -90,7 +71,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
9071
if isinstance(metric.data, Gauge):
9172
for data_point in metric.data.data_points:
9273
pt = pb2.NumberDataPoint(
93-
attributes=_translate_attributes(
74+
attributes=_encode_attributes(
9475
data_point.attributes
9576
),
9677
time_unix_nano=data_point.time_unix_nano,
@@ -104,7 +85,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
10485
elif isinstance(metric.data, Histogram):
10586
for data_point in metric.data.data_points:
10687
pt = pb2.HistogramDataPoint(
107-
attributes=_translate_attributes(
88+
attributes=_encode_attributes(
10889
data_point.attributes
10990
),
11091
time_unix_nano=data_point.time_unix_nano,
@@ -126,7 +107,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
126107
elif isinstance(metric.data, Sum):
127108
for data_point in metric.data.data_points:
128109
pt = pb2.NumberDataPoint(
129-
attributes=_translate_attributes(
110+
attributes=_encode_attributes(
130111
data_point.attributes
131112
),
132113
start_time_unix_nano=(
@@ -163,75 +144,10 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
163144
resource_data.append(
164145
pb2.ResourceMetrics(
165146
resource=PB2Resource(
166-
attributes=_translate_attributes(sdk_resource.attributes)
147+
attributes=_encode_attributes(sdk_resource.attributes)
167148
),
168149
scope_metrics=scope_data.values(),
169150
)
170151
)
171152
resource_metrics = resource_data
172153
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

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def _translate_key_values(key: str, value: Any) -> KeyValue:
134134

135135

136136
@deprecated(
137-
version="1.16.0",
137+
version="1.17.0",
138138
reason="Use one of the encoders from opentelemetry-exporter-otlp-proto-common instead",
139139
)
140140
def get_resource_data(

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
from io import BytesIO
2222
from time import sleep
2323
from deprecated import deprecated
24+
25+
from opentelemetry.exporter.otlp.proto.common import _get_resource_data
2426
from opentelemetry.exporter.otlp.proto.common.metrics_encoder import (
2527
encode_metrics,
26-
_get_resource_data,
2728
)
2829
from opentelemetry.exporter.otlp.proto.http import Compression
2930
from opentelemetry.sdk.metrics._internal.aggregation import Aggregation
@@ -254,7 +255,7 @@ def force_flush(self, timeout_millis: float = 10_000) -> bool:
254255

255256

256257
@deprecated(
257-
version="1.16.0",
258+
version="1.17.0",
258259
reason="Use one of the encoders from opentelemetry-exporter-otlp-proto-common instead",
259260
)
260261
def get_resource_data(

0 commit comments

Comments
 (0)