Skip to content

Commit 3c1b6e7

Browse files
committed
Consolidate exportresult
1 parent 352d807 commit 3c1b6e7

11 files changed

Lines changed: 47 additions & 62 deletions

File tree

ext/opentelemetry-ext-azure-monitor/examples/metrics.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414

1515
from opentelemetry import metrics
1616
from opentelemetry.ext.azure_monitor import AzureMonitorMetricsExporter
17-
from opentelemetry.sdk.metrics import Counter, Gauge, Meter
18-
from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
17+
from opentelemetry.sdk.metrics import Counter, Meter
1918

2019
metrics.set_preferred_meter_implementation(lambda T: Meter())
2120
meter = metrics.meter()
2221
exporter = AzureMonitorMetricsExporter()
23-
console_exporter = ConsoleMetricsExporter()
2422

2523
counter = meter.create_metric(
2624
"available memory",
@@ -30,23 +28,10 @@
3028
Counter,
3129
("environment",),
3230
)
33-
gauge = meter.create_metric(
34-
"process cpu usage",
35-
"process cpu usage",
36-
"percentage",
37-
float,
38-
Gauge,
39-
("environment",),
40-
)
31+
4132
label_values = ("staging",)
42-
label_values2 = ("testing",)
4333
counter_handle = counter.get_handle(label_values)
4434
counter_handle.add(100)
45-
gauge_handle = gauge.get_handle(label_values2)
46-
gauge_handle.set(20.5)
47-
4835

49-
console_exporter.export([(counter, label_values), (gauge, label_values2)])
50-
exporter.export([(counter, label_values), (gauge, label_values2)])
51-
console_exporter.shutdown()
36+
exporter.export([(counter, label_values)])
5237
exporter.shutdown()

ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/metrics.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
import logging
1616

1717
from opentelemetry.ext.azure_monitor import protocol, transport, util
18-
from opentelemetry.sdk.metrics.export import (
19-
MetricsExporter,
20-
MetricsExportResult,
21-
)
18+
from opentelemetry.sdk.metrics.export import MetricsExporter
19+
from opentelemetry.sdk.util import ns_to_iso_str
2220

2321
logger = logging.getLogger(__name__)
2422

@@ -27,10 +25,15 @@ class AzureMonitorMetricsExporter(MetricsExporter, transport.TransportMixin):
2725
def __init__(self, **options):
2826
self.options = util.Options(**options)
2927
util.validate_key(self.options.instrumentation_key)
30-
self.export_result_type = MetricsExportResult
3128

3229
def export(self, metric_tuples):
33-
# Metric tuples is a sequence of metric to label values pairs
30+
"""Exports metrics with specified label values.
31+
32+
Args:
33+
metrics_tuples: a sequence of metric to label value pairs.
34+
The metric handles with the corresponding label values for
35+
each metric will be used for exporting.
36+
"""
3437
envelopes = tuple(map(self._metric_tuple_to_envelope, metric_tuples))
3538
return self._transmit(envelopes)
3639

@@ -41,7 +44,7 @@ def _metric_tuple_to_envelope(self, metric_tuple):
4144
envelope = protocol.Envelope(
4245
iKey=self.options.instrumentation_key,
4346
tags=dict(util.azure_monitor_context),
44-
time=handle.last_update_timestamp,
47+
time=ns_to_iso_str(handle.last_update_timestamp),
4548
)
4649
envelope.name = "Microsoft.ApplicationInsights.Metric"
4750
# label_keys and label_values assumed to have the same length

ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/trace.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from urllib.parse import urlparse
1818

1919
from opentelemetry.ext.azure_monitor import protocol, transport, util
20-
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
20+
from opentelemetry.sdk.trace.export import SpanExporter
2121
from opentelemetry.sdk.util import ns_to_iso_str
2222
from opentelemetry.trace import Span, SpanKind
2323

@@ -28,7 +28,6 @@ class AzureMonitorSpanExporter(SpanExporter, transport.TransportMixin):
2828
def __init__(self, **options):
2929
self.options = util.Options(**options)
3030
util.validate_key(self.options.instrumentation_key)
31-
self.export_result_type = SpanExportResult
3231

3332
def export(self, spans):
3433
envelopes = tuple(map(self.span_to_envelope, spans))

ext/opentelemetry-ext-azure-monitor/src/opentelemetry/ext/azure_monitor/transport.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ def _transmit(self, envelopes):
3232
},
3333
timeout=self.options.timeout,
3434
)
35-
except requests.RequestException:
36-
logger.exception("Transient client side error.")
35+
except requests.RequestException as ex:
36+
logger.warning("Transient client side error %s.", ex)
3737
return self.export_result_type.FAILED_RETRYABLE
3838

3939
text = "N/A"
4040
data = None # noqa pylint: disable=unused-variable
4141
try:
4242
text = response.text
43-
except Exception: # noqa pylint: disable=broad-except
44-
logger.exception("Error while reading response body %s.")
43+
except Exception as ex: # noqa pylint: disable=broad-except
44+
logger.warning("Error while reading response body %s.", ex)
4545
else:
4646
try:
4747
data = json.loads(text) # noqa pylint: disable=unused-variable

opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from typing import Sequence, Tuple, Type
1717

1818
from opentelemetry import metrics as metrics_api
19-
from opentelemetry.sdk.util import ns_to_iso_str, time_ns
19+
from opentelemetry.sdk.util import time_ns
2020

2121
logger = logging.getLogger(__name__)
2222

@@ -32,7 +32,7 @@ def __init__(
3232
self.value_type = value_type
3333
self.enabled = enabled
3434
self.monotonic = monotonic
35-
self.last_update_timestamp = ns_to_iso_str(time_ns())
35+
self.last_update_timestamp = time_ns()
3636

3737
def _validate_update(self, value: metrics_api.ValueT):
3838
if not self.enabled:
@@ -57,7 +57,7 @@ def update(self, value: metrics_api.ValueT) -> None:
5757
logger.warning("Monotonic counter cannot descend.")
5858
return
5959
self.data += value
60-
self.last_update_timestamp = ns_to_iso_str(time_ns())
60+
self.last_update_timestamp = time_ns()
6161

6262
def add(self, value: metrics_api.ValueT) -> None:
6363
"""See `opentelemetry.metrics.CounterHandle._add`."""
@@ -71,7 +71,7 @@ def update(self, value: metrics_api.ValueT) -> None:
7171
logger.warning("Monotonic gauge cannot descend.")
7272
return
7373
self.data = value
74-
self.last_update_timestamp = ns_to_iso_str(time_ns())
74+
self.last_update_timestamp = time_ns()
7575

7676
def set(self, value: metrics_api.ValueT) -> None:
7777
"""See `opentelemetry.metrics.GaugeHandle._set`."""
@@ -84,7 +84,7 @@ def update(self, value: metrics_api.ValueT) -> None:
8484
if self.monotonic and value < 0:
8585
logger.warning("Monotonic measure cannot accept negatives.")
8686
return
87-
self.last_update_timestamp = ns_to_iso_str(time_ns())
87+
self.last_update_timestamp = time_ns()
8888

8989
def record(self, value: metrics_api.ValueT) -> None:
9090
"""See `opentelemetry.metrics.MeasureHandle._record`."""

opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/__init__.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@
1616
from typing import Sequence, Tuple
1717

1818
from .. import Metric
19-
20-
21-
class MetricsExportResult(Enum):
22-
SUCCESS = 0
23-
FAILED_RETRYABLE = 1
24-
FAILED_NOT_RETRYABLE = 2
19+
from opentelemetry.sdk.util import ExportResult
2520

2621

2722
class MetricsExporter:
@@ -33,7 +28,7 @@ class MetricsExporter:
3328

3429
def export(
3530
self, metric_tuples: Sequence[Tuple[Metric, Sequence[str]]]
36-
) -> "MetricsExportResult":
31+
) -> "ExportResult":
3732
"""Exports a batch of telemetry data.
3833
3934
Args:
@@ -63,7 +58,7 @@ class ConsoleMetricsExporter(MetricsExporter):
6358

6459
def export(
6560
self, metric_tuples: Sequence[Tuple[Metric, Sequence[str]]]
66-
) -> "MetricsExportResult":
61+
) -> "ExportResult":
6762
for metric_tuple in metric_tuples:
6863
handle = metric_tuple[0].get_handle(metric_tuple[1])
6964
print(
@@ -74,4 +69,4 @@ def export(
7469
handle,
7570
)
7671
)
77-
return MetricsExportResult.SUCCESS
72+
return ExportResult.SUCCESS

opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@
2626
logger = logging.getLogger(__name__)
2727

2828

29-
class SpanExportResult(Enum):
30-
SUCCESS = 0
31-
FAILED_RETRYABLE = 1
32-
FAILED_NOT_RETRYABLE = 2
33-
34-
3529
class SpanExporter:
3630
"""Interface for exporting spans.
3731
@@ -42,7 +36,7 @@ class SpanExporter:
4236
`SimpleExportSpanProcessor` or a `BatchSpanProcessor`.
4337
"""
4438

45-
def export(self, spans: typing.Sequence[Span]) -> "SpanExportResult":
39+
def export(self, spans: typing.Sequence[Span]) -> "ExportResult":
4640
"""Exports a batch of telemetry data.
4741
4842
Args:
@@ -217,7 +211,7 @@ class ConsoleSpanExporter(SpanExporter):
217211
spans to the console STDOUT.
218212
"""
219213

220-
def export(self, spans: typing.Sequence[Span]) -> SpanExportResult:
214+
def export(self, spans: typing.Sequence[Span]) -> ExportResult:
221215
for span in spans:
222216
print(span)
223-
return SpanExportResult.SUCCESS
217+
return util.ExportResult.SUCCESS

opentelemetry-sdk/src/opentelemetry/sdk/trace/export/in_memory_span_exporter.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
import typing
1717

1818
from .. import Span
19-
from . import SpanExporter, SpanExportResult
19+
from . import SpanExporter
20+
from opentelemetry.sdk import util
2021

2122

2223
class InMemorySpanExporter(SpanExporter):
@@ -42,13 +43,13 @@ def get_finished_spans(self):
4243
with self._lock:
4344
return tuple(self._finished_spans)
4445

45-
def export(self, spans: typing.Sequence[Span]) -> SpanExportResult:
46+
def export(self, spans: typing.Sequence[Span]) -> util.ExportResult:
4647
"""Stores a list of spans in memory."""
4748
if self._stopped:
48-
return SpanExportResult.FAILED_NOT_RETRYABLE
49+
return util.ExportResult.FAILED_NOT_RETRYABLE
4950
with self._lock:
5051
self._finished_spans.extend(spans)
51-
return SpanExportResult.SUCCESS
52+
return util.ExportResult.SUCCESS
5253

5354
def shutdown(self):
5455
"""Shut downs the exporter.

opentelemetry-sdk/src/opentelemetry/sdk/util.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import threading
1717
import time
1818
from collections import OrderedDict, deque
19+
from enum import Enum
1920

2021
try:
2122
# pylint: disable=ungrouped-imports
@@ -141,3 +142,9 @@ def from_map(cls, maxlen, mapping):
141142
# pylint: disable=protected-access
142143
bounded_dict._dict = mapping
143144
return bounded_dict
145+
146+
147+
class ExportResult(Enum):
148+
SUCCESS = 0
149+
FAILED_RETRYABLE = 1
150+
FAILED_NOT_RETRYABLE = 2

opentelemetry-sdk/tests/trace/export/test_export.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from opentelemetry import trace as trace_api
2020
from opentelemetry.sdk import trace
2121
from opentelemetry.sdk.trace import export
22+
from opentelemetry.sdk.util import ExportResult
2223

2324

2425
class MySpanExporter(export.SpanExporter):
@@ -28,14 +29,14 @@ def __init__(self, destination, max_export_batch_size=None):
2829
self.destination = destination
2930
self.max_export_batch_size = max_export_batch_size
3031

31-
def export(self, spans: trace.Span) -> export.SpanExportResult:
32+
def export(self, spans: trace.Span) -> ExportResult:
3233
if (
3334
self.max_export_batch_size is not None
3435
and len(spans) > self.max_export_batch_size
3536
):
3637
raise ValueError("Batch is too big")
3738
self.destination.extend(span.name for span in spans)
38-
return export.SpanExportResult.SUCCESS
39+
return ExportResult.SUCCESS
3940

4041

4142
class TestSimpleExportSpanProcessor(unittest.TestCase):

0 commit comments

Comments
 (0)