Skip to content

Commit d0452f8

Browse files
authored
[SDK] Provide builders to avoid exposing Metrics SDK internals (open-telemetry#2189)
1 parent cfcda57 commit d0452f8

35 files changed

+1090
-115
lines changed

examples/metrics_simple/metrics_ostream.cc

Lines changed: 56 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,27 @@
33

44
#include <memory>
55
#include <thread>
6-
#include "opentelemetry/exporters/ostream/metric_exporter.h"
6+
7+
#include "opentelemetry/exporters/ostream/metric_exporter_factory.h"
78
#include "opentelemetry/metrics/provider.h"
89
#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
910
#include "opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h"
10-
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
11+
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
1112
#include "opentelemetry/sdk/metrics/meter.h"
1213
#include "opentelemetry/sdk/metrics/meter_provider.h"
14+
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"
15+
#include "opentelemetry/sdk/metrics/push_metric_exporter.h"
16+
#include "opentelemetry/sdk/metrics/view/instrument_selector_factory.h"
17+
#include "opentelemetry/sdk/metrics/view/meter_selector_factory.h"
18+
#include "opentelemetry/sdk/metrics/view/view_factory.h"
1319

1420
#ifdef BAZEL_BUILD
1521
# include "examples/common/metrics_foo_library/foo_library.h"
1622
#else
1723
# include "metrics_foo_library/foo_library.h"
1824
#endif
1925

20-
namespace metric_sdk = opentelemetry::sdk::metrics;
26+
namespace metrics_sdk = opentelemetry::sdk::metrics;
2127
namespace common = opentelemetry::common;
2228
namespace exportermetrics = opentelemetry::exporter::metrics;
2329
namespace metrics_api = opentelemetry::metrics;
@@ -27,59 +33,75 @@ namespace
2733

2834
void InitMetrics(const std::string &name)
2935
{
30-
std::unique_ptr<metric_sdk::PushMetricExporter> exporter{
31-
new exportermetrics::OStreamMetricExporter};
36+
auto exporter = exportermetrics::OStreamMetricExporterFactory::Create();
3237

3338
std::string version{"1.2.0"};
3439
std::string schema{"https://opentelemetry.io/schemas/1.2.0"};
3540

3641
// Initialize and set the global MeterProvider
37-
metric_sdk::PeriodicExportingMetricReaderOptions options;
42+
metrics_sdk::PeriodicExportingMetricReaderOptions options;
3843
options.export_interval_millis = std::chrono::milliseconds(1000);
3944
options.export_timeout_millis = std::chrono::milliseconds(500);
40-
std::unique_ptr<metric_sdk::MetricReader> reader{
41-
new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options)};
42-
auto provider = std::shared_ptr<metrics_api::MeterProvider>(new metric_sdk::MeterProvider());
43-
auto p = std::static_pointer_cast<metric_sdk::MeterProvider>(provider);
45+
46+
auto reader =
47+
metrics_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), options);
48+
49+
auto u_provider = metrics_sdk::MeterProviderFactory::Create();
50+
auto *p = static_cast<metrics_sdk::MeterProvider *>(u_provider.get());
51+
4452
p->AddMetricReader(std::move(reader));
4553

4654
// counter view
4755
std::string counter_name = name + "_counter";
48-
std::unique_ptr<metric_sdk::InstrumentSelector> instrument_selector{
49-
new metric_sdk::InstrumentSelector(metric_sdk::InstrumentType::kCounter, counter_name)};
50-
std::unique_ptr<metric_sdk::MeterSelector> meter_selector{
51-
new metric_sdk::MeterSelector(name, version, schema)};
52-
std::unique_ptr<metric_sdk::View> sum_view{
53-
new metric_sdk::View{name, "description", metric_sdk::AggregationType::kSum}};
56+
57+
auto instrument_selector = metrics_sdk::InstrumentSelectorFactory::Create(
58+
metrics_sdk::InstrumentType::kCounter, counter_name);
59+
60+
auto meter_selector = metrics_sdk::MeterSelectorFactory::Create(name, version, schema);
61+
62+
auto sum_view =
63+
metrics_sdk::ViewFactory::Create(name, "description", metrics_sdk::AggregationType::kSum);
64+
5465
p->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(sum_view));
5566

5667
// observable counter view
5768
std::string observable_counter_name = name + "_observable_counter";
58-
std::unique_ptr<metric_sdk::InstrumentSelector> observable_instrument_selector{
59-
new metric_sdk::InstrumentSelector(metric_sdk::InstrumentType::kObservableCounter,
60-
observable_counter_name)};
61-
std::unique_ptr<metric_sdk::MeterSelector> observable_meter_selector{
62-
new metric_sdk::MeterSelector(name, version, schema)};
63-
std::unique_ptr<metric_sdk::View> observable_sum_view{
64-
new metric_sdk::View{name, "test_description", metric_sdk::AggregationType::kSum}};
69+
70+
auto observable_instrument_selector = metrics_sdk::InstrumentSelectorFactory::Create(
71+
metrics_sdk::InstrumentType::kObservableCounter, observable_counter_name);
72+
73+
auto observable_meter_selector = metrics_sdk::MeterSelectorFactory::Create(name, version, schema);
74+
75+
auto observable_sum_view = metrics_sdk::ViewFactory::Create(name, "test_description",
76+
metrics_sdk::AggregationType::kSum);
77+
6578
p->AddView(std::move(observable_instrument_selector), std::move(observable_meter_selector),
6679
std::move(observable_sum_view));
6780

6881
// histogram view
6982
std::string histogram_name = name + "_histogram";
70-
std::unique_ptr<metric_sdk::InstrumentSelector> histogram_instrument_selector{
71-
new metric_sdk::InstrumentSelector(metric_sdk::InstrumentType::kHistogram, histogram_name)};
72-
std::unique_ptr<metric_sdk::MeterSelector> histogram_meter_selector{
73-
new metric_sdk::MeterSelector(name, version, schema)};
74-
std::shared_ptr<opentelemetry::sdk::metrics::AggregationConfig> aggregation_config{
75-
new opentelemetry::sdk::metrics::HistogramAggregationConfig};
76-
static_cast<opentelemetry::sdk::metrics::HistogramAggregationConfig *>(aggregation_config.get())
77-
->boundaries_ = std::vector<double>{0.0, 50.0, 100.0, 250.0, 500.0, 750.0,
78-
1000.0, 2500.0, 5000.0, 10000.0, 20000.0};
79-
std::unique_ptr<metric_sdk::View> histogram_view{new metric_sdk::View{
80-
name, "description", metric_sdk::AggregationType::kHistogram, aggregation_config}};
83+
84+
auto histogram_instrument_selector = metrics_sdk::InstrumentSelectorFactory::Create(
85+
metrics_sdk::InstrumentType::kHistogram, histogram_name);
86+
87+
auto histogram_meter_selector = metrics_sdk::MeterSelectorFactory::Create(name, version, schema);
88+
89+
auto histogram_aggregation_config = std::unique_ptr<metrics_sdk::HistogramAggregationConfig>(
90+
new metrics_sdk::HistogramAggregationConfig);
91+
92+
histogram_aggregation_config->boundaries_ = std::vector<double>{
93+
0.0, 50.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0};
94+
95+
std::shared_ptr<metrics_sdk::AggregationConfig> aggregation_config(
96+
std::move(histogram_aggregation_config));
97+
98+
auto histogram_view = metrics_sdk::ViewFactory::Create(
99+
name, "description", metrics_sdk::AggregationType::kHistogram, aggregation_config);
100+
81101
p->AddView(std::move(histogram_instrument_selector), std::move(histogram_meter_selector),
82102
std::move(histogram_view));
103+
104+
std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
83105
metrics_api::Provider::SetMeterProvider(provider);
84106
}
85107

examples/otlp/BUILD

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ cc_binary(
7676
)
7777

7878
cc_binary(
79-
name = "example_otlp_grpc_metrics",
79+
name = "example_otlp_grpc_metric",
8080
srcs = [
8181
"grpc_metric_main.cc",
8282
],
@@ -93,3 +93,22 @@ cc_binary(
9393
"//sdk/src/metrics",
9494
],
9595
)
96+
97+
cc_binary(
98+
name = "example_otlp_http_metric",
99+
srcs = [
100+
"http_metric_main.cc",
101+
],
102+
tags = [
103+
"examples",
104+
"metrics",
105+
"otlp",
106+
],
107+
deps = [
108+
"//api",
109+
"//examples/common/metrics_foo_library:common_metrics_foo_library",
110+
"//exporters/otlp:otlp_http_exporter",
111+
"//exporters/otlp:otlp_http_metric_exporter",
112+
"//sdk/src/metrics",
113+
],
114+
)

examples/otlp/CMakeLists.txt

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ include_directories(
1010
${CMAKE_SOURCE_DIR}/exporters/otlp/include)
1111

1212
if(WITH_OTLP_GRPC)
13+
# TRACE
14+
1315
add_executable(example_otlp_grpc grpc_main.cc)
1416

1517
target_link_libraries(example_otlp_grpc ${CMAKE_THREAD_LIBS_INIT}
@@ -21,6 +23,18 @@ if(WITH_OTLP_GRPC)
2123
target_link_libraries(example_otlp_grpc opentelemetry_trace
2224
opentelemetry_exporter_otlp_grpc)
2325
endif()
26+
27+
# METRIC
28+
29+
add_executable(example_otlp_grpc_metric grpc_metric_main.cc)
30+
31+
target_link_libraries(
32+
example_otlp_grpc_metric ${CMAKE_THREAD_LIBS_INIT}
33+
common_metrics_foo_library opentelemetry_metrics
34+
opentelemetry_exporter_otlp_grpc_metrics)
35+
36+
# LOG
37+
2438
if(WITH_LOGS_PREVIEW)
2539
add_executable(example_otlp_grpc_log grpc_log_main.cc)
2640

@@ -37,6 +51,8 @@ if(WITH_OTLP_GRPC)
3751
endif()
3852

3953
if(WITH_OTLP_HTTP)
54+
# TRACE
55+
4056
add_executable(example_otlp_http http_main.cc)
4157

4258
target_link_libraries(example_otlp_http ${CMAKE_THREAD_LIBS_INIT}
@@ -49,6 +65,16 @@ if(WITH_OTLP_HTTP)
4965
opentelemetry_exporter_otlp_http)
5066
endif()
5167

68+
# METRIC
69+
70+
add_executable(example_otlp_http_metric http_metric_main.cc)
71+
target_link_libraries(
72+
example_otlp_http_metric ${CMAKE_THREAD_LIBS_INIT}
73+
common_metrics_foo_library opentelemetry_metrics
74+
opentelemetry_exporter_otlp_http_metric)
75+
76+
# LOG
77+
5278
if(WITH_LOGS_PREVIEW)
5379
add_executable(example_otlp_http_log http_log_main.cc)
5480
target_link_libraries(example_otlp_http_log ${CMAKE_THREAD_LIBS_INIT}
@@ -66,11 +92,3 @@ if(WITH_OTLP_HTTP)
6692

6793
endif()
6894
endif()
69-
70-
if(WITH_OTLP_GRPC)
71-
add_executable(example_otlp_metric_grpc grpc_metric_main.cc)
72-
target_link_libraries(
73-
example_otlp_metric_grpc ${CMAKE_THREAD_LIBS_INIT}
74-
common_metrics_foo_library opentelemetry_metrics
75-
opentelemetry_exporter_otlp_grpc_metrics)
76-
endif()

examples/otlp/grpc_metric_main.cc

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
#include "opentelemetry/metrics/provider.h"
66
#include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
77
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
8+
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h"
89
#include "opentelemetry/sdk/metrics/meter.h"
10+
#include "opentelemetry/sdk/metrics/meter_context_factory.h"
911
#include "opentelemetry/sdk/metrics/meter_provider.h"
12+
#include "opentelemetry/sdk/metrics/meter_provider_factory.h"
1013

1114
#include <memory>
1215
#include <thread>
@@ -25,24 +28,30 @@ namespace otlp_exporter = opentelemetry::exporter::otlp;
2528
namespace
2629
{
2730

28-
otlp_exporter::OtlpGrpcMetricExporterOptions options;
31+
otlp_exporter::OtlpGrpcMetricExporterOptions exporter_options;
2932

3033
void InitMetrics()
3134
{
32-
auto exporter = otlp_exporter::OtlpGrpcMetricExporterFactory::Create(options);
35+
auto exporter = otlp_exporter::OtlpGrpcMetricExporterFactory::Create(exporter_options);
3336

3437
std::string version{"1.2.0"};
3538
std::string schema{"https://opentelemetry.io/schemas/1.2.0"};
3639

3740
// Initialize and set the global MeterProvider
38-
metric_sdk::PeriodicExportingMetricReaderOptions options;
39-
options.export_interval_millis = std::chrono::milliseconds(1000);
40-
options.export_timeout_millis = std::chrono::milliseconds(500);
41-
std::unique_ptr<metric_sdk::MetricReader> reader{
42-
new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options)};
43-
auto provider = std::shared_ptr<metrics_api::MeterProvider>(new metric_sdk::MeterProvider());
44-
auto p = std::static_pointer_cast<metric_sdk::MeterProvider>(provider);
45-
p->AddMetricReader(std::move(reader));
41+
metric_sdk::PeriodicExportingMetricReaderOptions reader_options;
42+
reader_options.export_interval_millis = std::chrono::milliseconds(1000);
43+
reader_options.export_timeout_millis = std::chrono::milliseconds(500);
44+
45+
auto reader =
46+
metric_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), reader_options);
47+
48+
auto context = metric_sdk::MeterContextFactory::Create();
49+
context->AddMetricReader(std::move(reader));
50+
51+
std::shared_ptr<metric_sdk::MeterContext> s_context(std::move(context));
52+
53+
auto u_provider = metric_sdk::MeterProviderFactory::Create(s_context);
54+
std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
4655

4756
metrics_api::Provider::SetMeterProvider(provider);
4857
}
@@ -59,14 +68,14 @@ int main(int argc, char *argv[])
5968
std::string example_type;
6069
if (argc > 1)
6170
{
62-
options.endpoint = argv[1];
71+
exporter_options.endpoint = argv[1];
6372
if (argc > 2)
6473
{
6574
example_type = argv[2];
6675
if (argc > 3)
6776
{
68-
options.use_ssl_credentials = true;
69-
options.ssl_credentials_cacert_path = argv[3];
77+
exporter_options.use_ssl_credentials = true;
78+
exporter_options.ssl_credentials_cacert_path = argv[3];
7079
}
7180
}
7281
}

0 commit comments

Comments
 (0)