Skip to content

Commit f0583e3

Browse files
Alex Botenocelotl
Alex Boten
andauthored
Adding implementation for Gauge (#2408)
* Adding implementation for Gauge Fixes #2385 * update changelog * Update exporter/opentelemetry-exporter-otlp-proto-grpc/tests/metrics/test_otlp_metrics_exporter.py Co-authored-by: Diego Hurtado <[email protected]> Co-authored-by: Diego Hurtado <[email protected]>
1 parent 67ef457 commit f0583e3

File tree

3 files changed

+144
-22
lines changed

3 files changed

+144
-22
lines changed

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
([#2370](https://github.com/open-telemetry/opentelemetry-python/pull/2370))
2424
- [api] Rename `_DefaultMeter` and `_DefaultMeterProvider` to `NoOpMeter` and `NoOpMeterProvider`.
2525
([#2383](https://github.com/open-telemetry/opentelemetry-python/pull/2383))
26+
- [exporter/opentelemetry-exporter-otlp-proto-grpc] Add Gauge to OTLPMetricExporter
27+
([#2408](https://github.com/open-telemetry/opentelemetry-python/pull/2408))
2628

2729
## [1.8.0-0.27b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.8.0-0.27b0) - 2021-12-17
2830

Diff for: exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/_metric_exporter/__init__.py

+8-3
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,15 @@ def _translate_data(
122122
unit=metric.unit,
123123
)
124124
if isinstance(metric.point, Gauge):
125-
# TODO: implement gauge
126-
pbmetric.gauge = pb2.Gauge(
127-
data_points=[],
125+
pt = pb2.NumberDataPoint(
126+
attributes=self._translate_attributes(metric.attributes),
127+
time_unix_nano=metric.point.time_unix_nano,
128128
)
129+
if isinstance(metric.point.value, int):
130+
pt.as_int = metric.point.value
131+
else:
132+
pt.as_double = metric.point.value
133+
pbmetric.gauge.data_points.append(pt)
129134
elif isinstance(metric.point, Histogram):
130135
# TODO: implement histogram
131136
pbmetric.histogram = pb2.Histogram(

Diff for: exporter/opentelemetry-exporter-otlp-proto-grpc/tests/metrics/test_otlp_metrics_exporter.py

+134-19
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,14 @@
3838
InstrumentationLibrary,
3939
KeyValue,
4040
)
41-
from opentelemetry.proto.metrics.v1.metrics_pb2 import (
42-
InstrumentationLibraryMetrics,
43-
)
44-
from opentelemetry.proto.metrics.v1.metrics_pb2 import Metric as OTLPMetric
45-
from opentelemetry.proto.metrics.v1.metrics_pb2 import (
46-
NumberDataPoint as OTLPNumberDataPoint,
47-
)
48-
from opentelemetry.proto.metrics.v1.metrics_pb2 import ResourceMetrics
49-
from opentelemetry.proto.metrics.v1.metrics_pb2 import Sum as OTLPSum
41+
from opentelemetry.proto.metrics.v1 import metrics_pb2 as pb2
5042
from opentelemetry.proto.resource.v1.resource_pb2 import (
5143
Resource as OTLPResource,
5244
)
5345
from opentelemetry.sdk._metrics.export import MetricExportResult
5446
from opentelemetry.sdk._metrics.point import (
5547
AggregationTemporality,
48+
Gauge,
5649
Metric,
5750
Sum,
5851
)
@@ -136,6 +129,16 @@ def _generate_sum(name, val) -> Sum:
136129
)
137130

138131

132+
def _generate_gauge(name, val) -> Gauge:
133+
return _generate_metric(
134+
name,
135+
Gauge(
136+
time_unix_nano=1641946016139533244,
137+
value=val,
138+
),
139+
)
140+
141+
139142
class TestOTLPMetricExporter(TestCase):
140143
def setUp(self):
141144

@@ -150,6 +153,8 @@ def setUp(self):
150153
self.metrics = {
151154
"sum_int": _generate_sum("sum_int", 33),
152155
"sum_float": _generate_sum("sum_float", 2.98),
156+
"gauge_int": _generate_gauge("gauge_int", 9000),
157+
"gauge_float": _generate_gauge("gauge_float", 52.028),
153158
}
154159

155160
def tearDown(self):
@@ -307,7 +312,7 @@ def test_failure(self):
307312
def test_translate_sum_int(self):
308313
expected = ExportMetricsServiceRequest(
309314
resource_metrics=[
310-
ResourceMetrics(
315+
pb2.ResourceMetrics(
311316
resource=OTLPResource(
312317
attributes=[
313318
KeyValue(key="a", value=AnyValue(int_value=1)),
@@ -317,18 +322,18 @@ def test_translate_sum_int(self):
317322
]
318323
),
319324
instrumentation_library_metrics=[
320-
InstrumentationLibraryMetrics(
325+
pb2.InstrumentationLibraryMetrics(
321326
instrumentation_library=InstrumentationLibrary(
322327
name="first_name", version="first_version"
323328
),
324329
metrics=[
325-
OTLPMetric(
330+
pb2.Metric(
326331
name="sum_int",
327332
unit="s",
328333
description="foo",
329-
sum=OTLPSum(
334+
sum=pb2.Sum(
330335
data_points=[
331-
OTLPNumberDataPoint(
336+
pb2.NumberDataPoint(
332337
attributes=[
333338
KeyValue(
334339
key="a",
@@ -365,7 +370,7 @@ def test_translate_sum_int(self):
365370
def test_translate_sum_float(self):
366371
expected = ExportMetricsServiceRequest(
367372
resource_metrics=[
368-
ResourceMetrics(
373+
pb2.ResourceMetrics(
369374
resource=OTLPResource(
370375
attributes=[
371376
KeyValue(key="a", value=AnyValue(int_value=1)),
@@ -375,18 +380,18 @@ def test_translate_sum_float(self):
375380
]
376381
),
377382
instrumentation_library_metrics=[
378-
InstrumentationLibraryMetrics(
383+
pb2.InstrumentationLibraryMetrics(
379384
instrumentation_library=InstrumentationLibrary(
380385
name="first_name", version="first_version"
381386
),
382387
metrics=[
383-
OTLPMetric(
388+
pb2.Metric(
384389
name="sum_float",
385390
unit="s",
386391
description="foo",
387-
sum=OTLPSum(
392+
sum=pb2.Sum(
388393
data_points=[
389-
OTLPNumberDataPoint(
394+
pb2.NumberDataPoint(
390395
attributes=[
391396
KeyValue(
392397
key="a",
@@ -419,3 +424,113 @@ def test_translate_sum_float(self):
419424
# pylint: disable=protected-access
420425
actual = self.exporter._translate_data([self.metrics["sum_float"]])
421426
self.assertEqual(expected, actual)
427+
428+
def test_translate_gauge_int(self):
429+
expected = ExportMetricsServiceRequest(
430+
resource_metrics=[
431+
pb2.ResourceMetrics(
432+
resource=OTLPResource(
433+
attributes=[
434+
KeyValue(key="a", value=AnyValue(int_value=1)),
435+
KeyValue(
436+
key="b", value=AnyValue(bool_value=False)
437+
),
438+
]
439+
),
440+
instrumentation_library_metrics=[
441+
pb2.InstrumentationLibraryMetrics(
442+
instrumentation_library=InstrumentationLibrary(
443+
name="first_name", version="first_version"
444+
),
445+
metrics=[
446+
pb2.Metric(
447+
name="gauge_int",
448+
unit="s",
449+
description="foo",
450+
gauge=pb2.Gauge(
451+
data_points=[
452+
pb2.NumberDataPoint(
453+
attributes=[
454+
KeyValue(
455+
key="a",
456+
value=AnyValue(
457+
int_value=1
458+
),
459+
),
460+
KeyValue(
461+
key="b",
462+
value=AnyValue(
463+
bool_value=True
464+
),
465+
),
466+
],
467+
time_unix_nano=1641946016139533244,
468+
as_int=9000,
469+
)
470+
],
471+
),
472+
)
473+
],
474+
)
475+
],
476+
)
477+
]
478+
)
479+
# pylint: disable=protected-access
480+
actual = self.exporter._translate_data([self.metrics["gauge_int"]])
481+
self.assertEqual(expected, actual)
482+
483+
def test_translate_gauge_float(self):
484+
expected = ExportMetricsServiceRequest(
485+
resource_metrics=[
486+
pb2.ResourceMetrics(
487+
resource=OTLPResource(
488+
attributes=[
489+
KeyValue(key="a", value=AnyValue(int_value=1)),
490+
KeyValue(
491+
key="b", value=AnyValue(bool_value=False)
492+
),
493+
]
494+
),
495+
instrumentation_library_metrics=[
496+
pb2.InstrumentationLibraryMetrics(
497+
instrumentation_library=InstrumentationLibrary(
498+
name="first_name", version="first_version"
499+
),
500+
metrics=[
501+
pb2.Metric(
502+
name="gauge_float",
503+
unit="s",
504+
description="foo",
505+
gauge=pb2.Gauge(
506+
data_points=[
507+
pb2.NumberDataPoint(
508+
attributes=[
509+
KeyValue(
510+
key="a",
511+
value=AnyValue(
512+
int_value=1
513+
),
514+
),
515+
KeyValue(
516+
key="b",
517+
value=AnyValue(
518+
bool_value=True
519+
),
520+
),
521+
],
522+
time_unix_nano=1641946016139533244,
523+
as_double=52.028,
524+
)
525+
],
526+
),
527+
)
528+
],
529+
)
530+
],
531+
)
532+
]
533+
)
534+
# pylint: disable=protected-access
535+
actual = self.exporter._translate_data([self.metrics["gauge_float"]])
536+
self.assertEqual(expected, actual)

0 commit comments

Comments
 (0)