From cf8e61a44c50d43a5c054547cb1e88f0834b26b5 Mon Sep 17 00:00:00 2001 From: Alexey Ivanov Date: Thu, 14 Mar 2024 11:30:04 -0700 Subject: [PATCH] Add ExponentialBucketHistogram test to the exporter --- .../integration_test/test_console_exporter.py | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/tests/metrics/integration_test/test_console_exporter.py b/opentelemetry-sdk/tests/metrics/integration_test/test_console_exporter.py index 1b3283717ae..e67429df6a2 100644 --- a/opentelemetry-sdk/tests/metrics/integration_test/test_console_exporter.py +++ b/opentelemetry-sdk/tests/metrics/integration_test/test_console_exporter.py @@ -16,12 +16,16 @@ from json import loads from unittest import TestCase -from opentelemetry.metrics import get_meter, set_meter_provider +from opentelemetry.metrics import Histogram, get_meter, set_meter_provider from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import ( ConsoleMetricExporter, PeriodicExportingMetricReader, ) +from opentelemetry.sdk.metrics.view import ( + ExponentialBucketHistogramAggregation, + View, +) from opentelemetry.test.globals_test import reset_metrics_globals @@ -73,6 +77,56 @@ def test_console_exporter(self): self.assertEqual(metrics["attributes"], {"a": "b"}) self.assertEqual(metrics["value"], 1) + def test_exp_histogram_exporter(self): + output = StringIO() + exporter = ConsoleMetricExporter(out=output) + reader = PeriodicExportingMetricReader( + exporter, export_interval_millis=100 + ) + provider = MeterProvider( + metric_readers=[reader], + views=[ + View( + instrument_type=Histogram, + aggregation=ExponentialBucketHistogramAggregation(), + ), + ], + ) + set_meter_provider(provider) + meter = get_meter(__name__) + hist = meter.create_histogram( + "name", description="description", unit="unit" + ) + hist.record(1, attributes={"a": "b"}) + provider.shutdown() + + output.seek(0) + result_0 = loads("".join(output.readlines())) + + self.assertGreater(len(result_0), 0) + + metrics = result_0["resource_metrics"][0]["scope_metrics"][0] + + self.assertEqual(metrics["scope"]["name"], "test_console_exporter") + + metrics = metrics["metrics"][0] + + self.assertEqual(metrics["name"], "name") + self.assertEqual(metrics["description"], "description") + self.assertEqual(metrics["unit"], "unit") + + metrics = metrics["data"] + + self.assertEqual(metrics["aggregation_temporality"], 2) + self.assertEqual(len(metrics["data_points"]), 1) + + metrics = metrics["data_points"][0] + + self.assertEqual(metrics["attributes"], {"a": "b"}) + self.assertEqual(metrics["count"], 1) + self.assertEqual(metrics["sum"], 1) + self.assertEqual(metrics["zero_count"], 0) + def test_console_exporter_no_export(self): output = StringIO()