1
1
// Copyright The OpenTelemetry Authors
2
2
// SPDX-License-Identifier: Apache-2.0
3
3
4
+ #include " grpcpp/grpcpp.h"
5
+ #include " opentelemetry/exporters/otlp/otlp_grpc_exporter.h"
6
+
4
7
#include " opentelemetry/exporters/otlp/otlp_grpc_metric_exporter_factory.h"
5
8
#include " opentelemetry/metrics/provider.h"
6
9
#include " opentelemetry/sdk/metrics/aggregation/default_aggregation.h"
11
14
#include " opentelemetry/sdk/metrics/meter_provider.h"
12
15
#include " opentelemetry/sdk/metrics/meter_provider_factory.h"
13
16
#include " opentelemetry/sdk/metrics/provider.h"
17
+ #include " opentelemetry/sdk/metrics/view/instrument_selector_factory.h"
18
+ #include " opentelemetry/sdk/metrics/view/view_factory.h"
19
+ #include " opentelemetry/sdk/metrics/view/meter_selector_factory.h"
14
20
15
21
#include < memory>
16
22
#include < thread>
@@ -55,6 +61,61 @@ void InitMetrics()
55
61
metric_sdk::Provider::SetMeterProvider (provider);
56
62
}
57
63
64
+ void InitMetrics (std::string &name)
65
+ {
66
+ auto exporter = otlp_exporter::OtlpGrpcMetricExporterFactory::Create (exporter_options);
67
+
68
+ std::string version{" 1.2.0" };
69
+ std::string schema{" https://opentelemetry.io/schemas/1.2.0" };
70
+
71
+ // Initialize and set the global MeterProvider
72
+ metric_sdk::PeriodicExportingMetricReaderOptions reader_options;
73
+ reader_options.export_interval_millis = std::chrono::milliseconds (1000 );
74
+ reader_options.export_timeout_millis = std::chrono::milliseconds (500 );
75
+
76
+ auto reader =
77
+ metric_sdk::PeriodicExportingMetricReaderFactory::Create (std::move (exporter), reader_options);
78
+
79
+ auto context = metric_sdk::MeterContextFactory::Create ();
80
+ context->AddMetricReader (std::move (reader));
81
+
82
+ auto provider = metric_sdk::MeterProviderFactory::Create (std::move (context));
83
+
84
+ // auto provider = opentelemetry::sdk::metrics::MeterProviderFactory::Create();
85
+
86
+ // std::shared_ptr<opentelemetry::metrics::MeterProvider> provider(std::move(u_provider));
87
+
88
+ // histogram view
89
+ std::string histogram_name = name + " _histogram" ;
90
+ std::string unit = " unit" ;
91
+
92
+ auto histogram_instrument_selector = metric_sdk::InstrumentSelectorFactory::Create (
93
+ metric_sdk::InstrumentType::kHistogram , histogram_name, unit);
94
+
95
+ auto histogram_meter_selector = metric_sdk::MeterSelectorFactory::Create (name, version, schema);
96
+
97
+ auto histogram_aggregation_config = std::unique_ptr<metric_sdk::Base2ExponentialHistogramAggregationConfig>(
98
+ new metric_sdk::Base2ExponentialHistogramAggregationConfig);
99
+
100
+ histogram_aggregation_config->max_scale_ = 3 ;
101
+
102
+ // histogram_aggregation_config->boundaries_ = std::vector<double>{
103
+ // 0.0, 50.0, 100.0, 250.0, 500.0, 750.0, 1000.0, 2500.0, 5000.0, 10000.0, 20000.0};
104
+
105
+ std::shared_ptr<metric_sdk::AggregationConfig> aggregation_config (
106
+ std::move (histogram_aggregation_config));
107
+
108
+ auto histogram_view = metric_sdk::ViewFactory::Create (
109
+ name, " description" , unit, metric_sdk::AggregationType::kBase2ExponentialHistogram , aggregation_config);
110
+
111
+ provider->AddView (std::move (histogram_instrument_selector), std::move (histogram_meter_selector),
112
+ std::move (histogram_view));
113
+
114
+ std::shared_ptr<opentelemetry::metrics::MeterProvider> api_provider (std::move (provider));
115
+
116
+ metric_sdk::Provider::SetMeterProvider (api_provider);
117
+ }
118
+
58
119
void CleanupMetrics ()
59
120
{
60
121
std::shared_ptr<metrics_api::MeterProvider> none;
@@ -78,10 +139,19 @@ int main(int argc, char *argv[])
78
139
}
79
140
}
80
141
}
142
+ std::cout << " Using endpoint: " << exporter_options.endpoint << std::endl;
143
+ std::cout << " Using example type: " << example_type << std::endl;
144
+ std::cout << " Using cacert path: " << exporter_options.ssl_credentials_cacert_path << std::endl;
145
+ std::cout << " Using ssl credentials: " << exporter_options.use_ssl_credentials << std::endl;
146
+
81
147
// Removing this line will leave the default noop MetricProvider in place.
82
- InitMetrics ();
148
+
83
149
std::string name{" otlp_grpc_metric_example" };
84
150
151
+ InitMetrics (name);
152
+
153
+ // InitMetrics();
154
+
85
155
if (example_type == " counter" )
86
156
{
87
157
foo_library::counter_example (name);
@@ -93,6 +163,8 @@ int main(int argc, char *argv[])
93
163
else if (example_type == " histogram" )
94
164
{
95
165
foo_library::histogram_example (name);
166
+ } else if (example_type == " exponential_histogram" ) {
167
+ foo_library::histogram_exp_example (name);
96
168
}
97
169
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
98
170
else if (example_type == " gauge" )
@@ -102,15 +174,15 @@ int main(int argc, char *argv[])
102
174
#endif
103
175
else
104
176
{
105
- std::thread counter_example{&foo_library::counter_example, name};
106
- std::thread observable_counter_example{&foo_library::observable_counter_example, name};
177
+ // std::thread counter_example{&foo_library::counter_example, name};
178
+ // std::thread observable_counter_example{&foo_library::observable_counter_example, name};
107
179
std::thread histogram_example{&foo_library::histogram_example, name};
108
180
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
109
181
std::thread gauge_example{&foo_library::gauge_example, name};
110
182
#endif
111
183
112
- counter_example.join ();
113
- observable_counter_example.join ();
184
+ // counter_example.join();
185
+ // observable_counter_example.join();
114
186
histogram_example.join ();
115
187
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
116
188
gauge_example.join ();
0 commit comments