From 70777ef9fa7700c90787841a99f879ffb502a990 Mon Sep 17 00:00:00 2001 From: Ehsan Saei <71217171+esigo@users.noreply.github.com> Date: Fri, 21 Oct 2022 23:21:18 +0200 Subject: [PATCH] [Metrics SDK] Add support for Pull Metric Reader (#1701) --- CHANGELOG.md | 2 ++ examples/metrics_simple/README.md | 2 +- examples/metrics_simple/metrics_ostream.cc | 3 ++- examples/prometheus/README.md | 4 ++-- examples/prometheus/main.cc | 2 +- .../opentelemetry/exporters/ostream/metric_exporter.h | 4 ++-- exporters/ostream/test/ostream_metric_test.cc | 10 +++++----- .../exporters/otlp/otlp_grpc_metric_exporter.h | 4 ++-- .../exporters/otlp/otlp_grpc_metric_exporter_factory.h | 6 +++--- .../exporters/otlp/otlp_http_metric_exporter.h | 4 ++-- .../exporters/otlp/otlp_http_metric_exporter_factory.h | 6 +++--- .../otlp/src/otlp_grpc_metric_exporter_factory.cc | 9 +++++---- .../otlp/src/otlp_http_metric_exporter_factory.cc | 9 +++++---- .../test/otlp_grpc_metric_exporter_factory_test.cc | 2 +- .../test/otlp_http_metric_exporter_factory_test.cc | 2 +- exporters/otlp/test/otlp_http_metric_exporter_test.cc | 8 ++++---- .../opentelemetry/exporters/prometheus/exporter.h | 4 ++-- .../metrics/export/periodic_exporting_metric_reader.h | 6 +++--- sdk/include/opentelemetry/sdk/metrics/meter_context.h | 2 +- sdk/include/opentelemetry/sdk/metrics/meter_provider.h | 2 +- .../{metric_exporter.h => push_metric_exporter.h} | 6 +++--- .../opentelemetry/sdk/metrics/state/metric_collector.h | 2 +- .../metrics/export/periodic_exporting_metric_reader.cc | 4 ++-- sdk/src/metrics/meter_context.cc | 4 ++-- sdk/src/metrics/meter_provider.cc | 4 ++-- sdk/src/metrics/state/metric_collector.cc | 4 ++-- sdk/test/metrics/async_metric_storage_test.cc | 2 +- sdk/test/metrics/meter_provider_sdk_test.cc | 8 ++++---- sdk/test/metrics/metric_reader_test.cc | 2 +- .../metrics/periodic_exporting_metric_reader_test.cc | 6 +++--- 30 files changed, 69 insertions(+), 64 deletions(-) rename sdk/include/opentelemetry/sdk/metrics/{metric_exporter.h => push_metric_exporter.h} (91%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 529434bd63..20faa52975 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ Increment the: ## [Unreleased] +* [Metrics SDK] Add support for Pull Metric Exporter [#1701](https://github.com/open-telemetry/opentelemetry-cpp/pull/1701) + which includes breaking change in the Metrics api. * [BUILD] Add CMake OTELCPP_MAINTAINER_MODE [#1650](https://github.com/open-telemetry/opentelemetry-cpp/pull/1650) * [SEMANTIC CONVENTIONS] Upgrade to version 1.14.0 [#1697](https://github.com/open-telemetry/opentelemetry-cpp/pull/1697) diff --git a/examples/metrics_simple/README.md b/examples/metrics_simple/README.md index 855d2ae611..7e4f832160 100644 --- a/examples/metrics_simple/README.md +++ b/examples/metrics_simple/README.md @@ -24,7 +24,7 @@ Exporter which will print to stdout by default. The reader periodically collects metrics from the Aggregation Store and exports them. ```cpp - std::unique_ptr exporter{new exportermetrics::OStreamMetricExporter}; + std::unique_ptr exporter{new exportermetrics::OStreamMetricExporter}; std::unique_ptr reader{ new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options)}; ``` diff --git a/examples/metrics_simple/metrics_ostream.cc b/examples/metrics_simple/metrics_ostream.cc index b49c632080..627e06856e 100644 --- a/examples/metrics_simple/metrics_ostream.cc +++ b/examples/metrics_simple/metrics_ostream.cc @@ -29,7 +29,8 @@ namespace void initMetrics(const std::string &name) { - std::unique_ptr exporter{new exportermetrics::OStreamMetricExporter}; + std::unique_ptr exporter{ + new exportermetrics::OStreamMetricExporter}; std::string version{"1.2.0"}; std::string schema{"https://opentelemetry.io/schemas/1.2.0"}; diff --git a/examples/prometheus/README.md b/examples/prometheus/README.md index d7e284a0ec..782e874644 100644 --- a/examples/prometheus/README.md +++ b/examples/prometheus/README.md @@ -24,7 +24,7 @@ The main difference between the [ostream-metrics](../metrics_simple/README.md) example with this one is that the line below is replaced: ```cpp -std::unique_ptr exporter{ +std::unique_ptr exporter{ new exportermetrics::OStreamMetricExporter}; ``` @@ -32,7 +32,7 @@ std::unique_ptr exporter{ with ```cpp -std::unique_ptr exporter{ +std::unique_ptr exporter{ new metrics_exporter::PrometheusExporter(opts)}; ``` diff --git a/examples/prometheus/main.cc b/examples/prometheus/main.cc index 77a648f55d..0bf0fb5427 100644 --- a/examples/prometheus/main.cc +++ b/examples/prometheus/main.cc @@ -36,7 +36,7 @@ void initMetrics(const std::string &name, const std::string &addr) } std::puts("PrometheusExporter example program running ..."); - std::unique_ptr exporter{ + std::unique_ptr exporter{ new metrics_exporter::PrometheusExporter(opts)}; std::string version{"1.2.0"}; diff --git a/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h b/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h index 2a9e9751ea..9c45d011cf 100644 --- a/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h +++ b/exporters/ostream/include/opentelemetry/exporters/ostream/metric_exporter.h @@ -9,7 +9,7 @@ # include "opentelemetry/common/spin_lock_mutex.h" # include "opentelemetry/sdk/metrics/data/metric_data.h" # include "opentelemetry/sdk/metrics/instruments.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE @@ -21,7 +21,7 @@ namespace metrics /** * The OStreamMetricExporter exports record data through an ostream */ -class OStreamMetricExporter final : public opentelemetry::sdk::metrics::MetricExporter +class OStreamMetricExporter final : public opentelemetry::sdk::metrics::PushMetricExporter { public: /** diff --git a/exporters/ostream/test/ostream_metric_test.cc b/exporters/ostream/test/ostream_metric_test.cc index 5ed226f26b..e98e639dca 100644 --- a/exporters/ostream/test/ostream_metric_test.cc +++ b/exporters/ostream/test/ostream_metric_test.cc @@ -23,7 +23,7 @@ namespace exportermetrics = opentelemetry::exporter::metrics; TEST(OStreamMetricsExporter, Shutdown) { auto exporter = - std::unique_ptr(new exportermetrics::OStreamMetricExporter); + std::unique_ptr(new exportermetrics::OStreamMetricExporter); ASSERT_TRUE(exporter->Shutdown()); auto result = exporter->Export(metric_sdk::ResourceMetrics{}); EXPECT_EQ(result, opentelemetry::sdk::common::ExportResult::kFailure); @@ -32,7 +32,7 @@ TEST(OStreamMetricsExporter, Shutdown) TEST(OStreamMetricsExporter, ExportSumPointData) { auto exporter = - std::unique_ptr(new exportermetrics::OStreamMetricExporter); + std::unique_ptr(new exportermetrics::OStreamMetricExporter); metric_sdk::SumPointData sum_point_data{}; sum_point_data.value_ = 10.0; @@ -95,7 +95,7 @@ TEST(OStreamMetricsExporter, ExportSumPointData) TEST(OStreamMetricsExporter, ExportHistogramPointData) { auto exporter = - std::unique_ptr(new exportermetrics::OStreamMetricExporter); + std::unique_ptr(new exportermetrics::OStreamMetricExporter); metric_sdk::HistogramPointData histogram_point_data{}; histogram_point_data.boundaries_ = std::list{10.1, 20.2, 30.2}; @@ -177,7 +177,7 @@ TEST(OStreamMetricsExporter, ExportHistogramPointData) TEST(OStreamMetricsExporter, ExportLastValuePointData) { auto exporter = - std::unique_ptr(new exportermetrics::OStreamMetricExporter); + std::unique_ptr(new exportermetrics::OStreamMetricExporter); metric_sdk::ResourceMetrics data; auto resource = opentelemetry::sdk::resource::Resource::Create( @@ -246,7 +246,7 @@ TEST(OStreamMetricsExporter, ExportLastValuePointData) TEST(OStreamMetricsExporter, ExportDropPointData) { auto exporter = - std::unique_ptr(new exportermetrics::OStreamMetricExporter); + std::unique_ptr(new exportermetrics::OStreamMetricExporter); metric_sdk::ResourceMetrics data; auto resource = opentelemetry::sdk::resource::Resource::Create( diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h index 3ef0a179c3..ef6477d67f 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h @@ -15,7 +15,7 @@ # include "opentelemetry/exporters/otlp/otlp_environment.h" # include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter @@ -26,7 +26,7 @@ namespace otlp /** * The OTLP exporter exports metrics data in OpenTelemetry Protocol (OTLP) format in gRPC. */ -class OtlpGrpcMetricExporter : public opentelemetry::sdk::metrics::MetricExporter +class OtlpGrpcMetricExporter : public opentelemetry::sdk::metrics::PushMetricExporter { public: /** diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h index 5a105ba4c0..0fb4f46077 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h @@ -6,7 +6,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_options.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace exporter @@ -23,12 +23,12 @@ class OtlpGrpcMetricExporterFactory /** * Create a OtlpGrpcMetricExporter. */ - static std::unique_ptr Create(); + static std::unique_ptr Create(); /** * Create a OtlpGrpcMetricExporter. */ - static std::unique_ptr Create( + static std::unique_ptr Create( const OtlpGrpcMetricExporterOptions &options); }; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h index c037f58168..ff47452a07 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter.h @@ -4,7 +4,7 @@ #pragma once #ifndef ENABLE_METRICS_PREVIEW -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include "opentelemetry/exporters/otlp/otlp_environment.h" # include "opentelemetry/exporters/otlp/otlp_http_client.h" @@ -24,7 +24,7 @@ namespace otlp /** * The OTLP exporter exports metrics data in OpenTelemetry Protocol (OTLP) format in HTTP. */ -class OtlpHttpMetricExporter final : public opentelemetry::sdk::metrics::MetricExporter +class OtlpHttpMetricExporter final : public opentelemetry::sdk::metrics::PushMetricExporter { public: /** diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h index 913e5097dc..b0e6fa1678 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_http_metric_exporter_factory.h @@ -5,7 +5,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/exporters/otlp/otlp_http_metric_exporter_options.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include @@ -24,12 +24,12 @@ class OtlpHttpMetricExporterFactory /** * Create a OtlpHttpMetricExporter. */ - static std::unique_ptr Create(); + static std::unique_ptr Create(); /** * Create a OtlpHttpMetricExporter. */ - static std::unique_ptr Create( + static std::unique_ptr Create( const OtlpHttpMetricExporterOptions &options); }; diff --git a/exporters/otlp/src/otlp_grpc_metric_exporter_factory.cc b/exporters/otlp/src/otlp_grpc_metric_exporter_factory.cc index 9060d705b9..fc7952474e 100644 --- a/exporters/otlp/src/otlp_grpc_metric_exporter_factory.cc +++ b/exporters/otlp/src/otlp_grpc_metric_exporter_factory.cc @@ -15,16 +15,17 @@ namespace exporter namespace otlp { -std::unique_ptr OtlpGrpcMetricExporterFactory::Create() +std::unique_ptr +OtlpGrpcMetricExporterFactory::Create() { OtlpGrpcMetricExporterOptions options; return Create(options); } -std::unique_ptr OtlpGrpcMetricExporterFactory::Create( - const OtlpGrpcMetricExporterOptions &options) +std::unique_ptr +OtlpGrpcMetricExporterFactory::Create(const OtlpGrpcMetricExporterOptions &options) { - std::unique_ptr exporter( + std::unique_ptr exporter( new OtlpGrpcMetricExporter(options)); return exporter; } diff --git a/exporters/otlp/src/otlp_http_metric_exporter_factory.cc b/exporters/otlp/src/otlp_http_metric_exporter_factory.cc index e5c194777f..9abc30d25c 100644 --- a/exporters/otlp/src/otlp_http_metric_exporter_factory.cc +++ b/exporters/otlp/src/otlp_http_metric_exporter_factory.cc @@ -13,16 +13,17 @@ namespace exporter namespace otlp { -std::unique_ptr OtlpHttpMetricExporterFactory::Create() +std::unique_ptr +OtlpHttpMetricExporterFactory::Create() { OtlpHttpMetricExporterOptions options; return Create(options); } -std::unique_ptr OtlpHttpMetricExporterFactory::Create( - const OtlpHttpMetricExporterOptions &options) +std::unique_ptr +OtlpHttpMetricExporterFactory::Create(const OtlpHttpMetricExporterOptions &options) { - std::unique_ptr exporter( + std::unique_ptr exporter( new OtlpHttpMetricExporter(options)); return exporter; } diff --git a/exporters/otlp/test/otlp_grpc_metric_exporter_factory_test.cc b/exporters/otlp/test/otlp_grpc_metric_exporter_factory_test.cc index 8073b6658d..41bdf2dac2 100644 --- a/exporters/otlp/test/otlp_grpc_metric_exporter_factory_test.cc +++ b/exporters/otlp/test/otlp_grpc_metric_exporter_factory_test.cc @@ -27,7 +27,7 @@ TEST(OtlpGrpcMetricExporterFactory, BuildTest) OtlpGrpcMetricExporterOptions opts; opts.endpoint = "localhost:45454"; - std::unique_ptr exporter = + std::unique_ptr exporter = OtlpGrpcMetricExporterFactory::Create(opts); EXPECT_TRUE(exporter != nullptr); diff --git a/exporters/otlp/test/otlp_http_metric_exporter_factory_test.cc b/exporters/otlp/test/otlp_http_metric_exporter_factory_test.cc index 949aa778e5..3cc77394ae 100644 --- a/exporters/otlp/test/otlp_http_metric_exporter_factory_test.cc +++ b/exporters/otlp/test/otlp_http_metric_exporter_factory_test.cc @@ -35,7 +35,7 @@ TEST(OtlpHttpMetricExporterFactory, BuildTest) OtlpHttpMetricExporterOptions opts; opts.url = "localhost:45454"; - std::unique_ptr exporter = + std::unique_ptr exporter = OtlpHttpMetricExporterFactory::Create(opts); EXPECT_TRUE(exporter != nullptr); diff --git a/exporters/otlp/test/otlp_http_metric_exporter_test.cc b/exporters/otlp/test/otlp_http_metric_exporter_test.cc index aaa1cda1a6..804e1f9efb 100644 --- a/exporters/otlp/test/otlp_http_metric_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_metric_exporter_test.cc @@ -78,10 +78,10 @@ namespace http_client = opentelemetry::ext::http::client; class OtlpHttpMetricExporterTestPeer : public ::testing::Test { public: - std::unique_ptr GetExporter( + std::unique_ptr GetExporter( std::unique_ptr http_client) { - return std::unique_ptr( + return std::unique_ptr( new OtlpHttpMetricExporter(std::move(http_client))); } @@ -734,8 +734,8 @@ class OtlpHttpMetricExporterTestPeer : public ::testing::Test TEST(OtlpHttpMetricExporterTest, Shutdown) { - auto exporter = - std::unique_ptr(new OtlpHttpMetricExporter()); + auto exporter = std::unique_ptr( + new OtlpHttpMetricExporter()); ASSERT_TRUE(exporter->Shutdown()); auto result = exporter->Export(opentelemetry::sdk::metrics::ResourceMetrics{}); EXPECT_EQ(result, opentelemetry::sdk::common::ExportResult::kFailure); diff --git a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter.h b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter.h index cbb34c7392..2553d2fa42 100644 --- a/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter.h +++ b/exporters/prometheus/include/opentelemetry/exporters/prometheus/exporter.h @@ -12,7 +12,7 @@ # include "opentelemetry/exporters/prometheus/collector.h" # include "opentelemetry/nostd/span.h" # include "opentelemetry/sdk/common/env_variables.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include "opentelemetry/version.h" /** @@ -46,7 +46,7 @@ struct PrometheusExporterOptions std::string url = GetPrometheusDefaultHttpEndpoint(); }; -class PrometheusExporter : public sdk::metrics::MetricExporter +class PrometheusExporter : public sdk::metrics::PushMetricExporter { public: /** diff --git a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h index 54c7c0536a..0e9f56722f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h +++ b/sdk/include/opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h @@ -18,7 +18,7 @@ namespace sdk namespace metrics { -class MetricExporter; +class PushMetricExporter; /** * Struct to hold PeriodicExortingMetricReader options. */ @@ -40,7 +40,7 @@ class PeriodicExportingMetricReader : public MetricReader { public: - PeriodicExportingMetricReader(std::unique_ptr exporter, + PeriodicExportingMetricReader(std::unique_ptr exporter, const PeriodicExportingMetricReaderOptions &option); AggregationTemporality GetAggregationTemporality( @@ -53,7 +53,7 @@ class PeriodicExportingMetricReader : public MetricReader void OnInitialized() noexcept override; - std::unique_ptr exporter_; + std::unique_ptr exporter_; std::chrono::milliseconds export_interval_millis_; std::chrono::milliseconds export_timeout_millis_; diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index c7197fd18b..8af3c22eea 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -82,7 +82,7 @@ class MeterContext : public std::enable_shared_from_this * Note: This reader may not receive any in-flight meter data, but will get newly created meter * data. Note: This method is not thread safe, and should ideally be called from main thread. */ - void AddMetricReader(std::unique_ptr reader) noexcept; + void AddMetricReader(std::shared_ptr reader) noexcept; /** * Attaches a View to list of configured Views for this Meter context. diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index 8fdca2daa8..8b41106bec 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -61,7 +61,7 @@ class MeterProvider final : public opentelemetry::metrics::MeterProvider * Note: This reader may not receive any in-flight meter data, but will get newly created meter * data. Note: This method is not thread safe, and should ideally be called from main thread. */ - void AddMetricReader(std::unique_ptr reader) noexcept; + void AddMetricReader(std::shared_ptr reader) noexcept; /** * Attaches a View to list of configured Views for this Meter provider. diff --git a/sdk/include/opentelemetry/sdk/metrics/metric_exporter.h b/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h similarity index 91% rename from sdk/include/opentelemetry/sdk/metrics/metric_exporter.h rename to sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h index ec7831a32a..5c5b85931f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/metric_exporter.h +++ b/sdk/include/opentelemetry/sdk/metrics/push_metric_exporter.h @@ -20,13 +20,13 @@ namespace metrics class MetricData; /** - * MetricExporter defines the interface to be used by metrics libraries to + * PushMetricExporter defines the interface to be used by metrics libraries to * push metrics data to the OpenTelemetry exporters. */ -class MetricExporter +class PushMetricExporter { public: - virtual ~MetricExporter() = default; + virtual ~PushMetricExporter() = default; /** * Exports a batch of metrics data. This method must not be called diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h index 2b6ca98201..5164aafe59 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_collector.h @@ -34,7 +34,7 @@ class CollectorHandle class MetricCollector : public MetricProducer, public CollectorHandle { public: - MetricCollector(MeterContext *context, std::unique_ptr metric_reader); + MetricCollector(MeterContext *context, std::shared_ptr metric_reader); ~MetricCollector() override = default; diff --git a/sdk/src/metrics/export/periodic_exporting_metric_reader.cc b/sdk/src/metrics/export/periodic_exporting_metric_reader.cc index ed653be0ed..eab145ecae 100644 --- a/sdk/src/metrics/export/periodic_exporting_metric_reader.cc +++ b/sdk/src/metrics/export/periodic_exporting_metric_reader.cc @@ -4,7 +4,7 @@ #ifndef ENABLE_METRICS_PREVIEW # include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" # include "opentelemetry/sdk/common/global_log_handler.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include # include @@ -16,7 +16,7 @@ namespace metrics { PeriodicExportingMetricReader::PeriodicExportingMetricReader( - std::unique_ptr exporter, + std::unique_ptr exporter, const PeriodicExportingMetricReaderOptions &option) : exporter_{std::move(exporter)}, export_interval_millis_{option.export_interval_millis}, diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index 398934b520..581a6b1b93 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -45,9 +45,9 @@ opentelemetry::common::SystemTimestamp MeterContext::GetSDKStartTime() noexcept return sdk_start_ts_; } -void MeterContext::AddMetricReader(std::unique_ptr reader) noexcept +void MeterContext::AddMetricReader(std::shared_ptr reader) noexcept { - auto collector = std::shared_ptr{new MetricCollector(this, std::move(reader))}; + auto collector = std::shared_ptr{new MetricCollector(this, reader)}; collectors_.push_back(collector); } diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index 5077dac8bb..1114f73537 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -59,9 +59,9 @@ const resource::Resource &MeterProvider::GetResource() const noexcept return context_->GetResource(); } -void MeterProvider::AddMetricReader(std::unique_ptr reader) noexcept +void MeterProvider::AddMetricReader(std::shared_ptr reader) noexcept { - return context_->AddMetricReader(std::move(reader)); + return context_->AddMetricReader(reader); } void MeterProvider::AddView(std::unique_ptr instrument_selector, diff --git a/sdk/src/metrics/state/metric_collector.cc b/sdk/src/metrics/state/metric_collector.cc index 97f29a8fbe..fd61b4f782 100644 --- a/sdk/src/metrics/state/metric_collector.cc +++ b/sdk/src/metrics/state/metric_collector.cc @@ -17,8 +17,8 @@ namespace metrics { MetricCollector::MetricCollector(opentelemetry::sdk::metrics::MeterContext *context, - std::unique_ptr metric_reader) - : meter_context_{context}, metric_reader_{std::move(metric_reader)} + std::shared_ptr metric_reader) + : meter_context_{context}, metric_reader_{metric_reader} { metric_reader_->SetMetricProducer(this); } diff --git a/sdk/test/metrics/async_metric_storage_test.cc b/sdk/test/metrics/async_metric_storage_test.cc index 939dd26f08..01c04d609e 100644 --- a/sdk/test/metrics/async_metric_storage_test.cc +++ b/sdk/test/metrics/async_metric_storage_test.cc @@ -7,9 +7,9 @@ # include "opentelemetry/sdk/metrics/async_instruments.h" # include "opentelemetry/sdk/metrics/instruments.h" # include "opentelemetry/sdk/metrics/meter_context.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" # include "opentelemetry/sdk/metrics/metric_reader.h" # include "opentelemetry/sdk/metrics/observer_result.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include "opentelemetry/sdk/metrics/state/metric_collector.h" # include "opentelemetry/sdk/metrics/state/observable_registry.h" diff --git a/sdk/test/metrics/meter_provider_sdk_test.cc b/sdk/test/metrics/meter_provider_sdk_test.cc index eb57dd026b..ee75ed54ac 100644 --- a/sdk/test/metrics/meter_provider_sdk_test.cc +++ b/sdk/test/metrics/meter_provider_sdk_test.cc @@ -6,14 +6,14 @@ # include "opentelemetry/sdk/metrics/export/metric_producer.h" # include "opentelemetry/sdk/metrics/meter.h" # include "opentelemetry/sdk/metrics/meter_provider.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" # include "opentelemetry/sdk/metrics/metric_reader.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include "opentelemetry/sdk/metrics/view/instrument_selector.h" # include "opentelemetry/sdk/metrics/view/meter_selector.h" using namespace opentelemetry::sdk::metrics; -class MockMetricExporter : public MetricExporter +class MockMetricExporter : public PushMetricExporter { public: @@ -38,7 +38,7 @@ class MockMetricExporter : public MetricExporter class MockMetricReader : public MetricReader { public: - MockMetricReader(std::unique_ptr exporter) : exporter_(std::move(exporter)) {} + MockMetricReader(std::unique_ptr exporter) : exporter_(std::move(exporter)) {} AggregationTemporality GetAggregationTemporality( InstrumentType instrument_type) const noexcept override { @@ -55,7 +55,7 @@ class MockMetricReader : public MetricReader virtual void OnInitialized() noexcept override {} private: - std::unique_ptr exporter_; + std::unique_ptr exporter_; }; TEST(MeterProvider, GetMeter) diff --git a/sdk/test/metrics/metric_reader_test.cc b/sdk/test/metrics/metric_reader_test.cc index 44c30941f3..31987c6ada 100644 --- a/sdk/test/metrics/metric_reader_test.cc +++ b/sdk/test/metrics/metric_reader_test.cc @@ -5,7 +5,7 @@ # include "opentelemetry/sdk/metrics/metric_reader.h" # include # include "opentelemetry/sdk/metrics/meter_context.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" using namespace opentelemetry; using namespace opentelemetry::sdk::instrumentationscope; diff --git a/sdk/test/metrics/periodic_exporting_metric_reader_test.cc b/sdk/test/metrics/periodic_exporting_metric_reader_test.cc index 4c7fd4aa4d..59ae25118b 100644 --- a/sdk/test/metrics/periodic_exporting_metric_reader_test.cc +++ b/sdk/test/metrics/periodic_exporting_metric_reader_test.cc @@ -5,7 +5,7 @@ # include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h" # include "opentelemetry/sdk/metrics/export/metric_producer.h" -# include "opentelemetry/sdk/metrics/metric_exporter.h" +# include "opentelemetry/sdk/metrics/push_metric_exporter.h" # include @@ -13,7 +13,7 @@ using namespace opentelemetry; using namespace opentelemetry::sdk::instrumentationscope; using namespace opentelemetry::sdk::metrics; -class MockPushMetricExporter : public MetricExporter +class MockPushMetricExporter : public PushMetricExporter { public: opentelemetry::sdk::common::ExportResult Export(const ResourceMetrics &record) noexcept override @@ -63,7 +63,7 @@ class MockMetricProducer : public MetricProducer TEST(PeriodicExporingMetricReader, BasicTests) { - std::unique_ptr exporter(new MockPushMetricExporter()); + std::unique_ptr exporter(new MockPushMetricExporter()); PeriodicExportingMetricReaderOptions options; options.export_timeout_millis = std::chrono::milliseconds(200); options.export_interval_millis = std::chrono::milliseconds(500);