17
17
#include " opentelemetry/sdk/metrics/instruments.h"
18
18
#include " opentelemetry/sdk/metrics/meter_provider.h"
19
19
#include " opentelemetry/sdk/metrics/meter_provider_factory.h"
20
+ #include " opentelemetry/sdk/metrics/meter_context_factory.h"
20
21
#include " opentelemetry/sdk/metrics/metric_reader.h"
21
22
#include " opentelemetry/sdk/metrics/provider.h"
22
23
#include " opentelemetry/sdk/metrics/push_metric_exporter.h"
@@ -56,9 +57,9 @@ void InitMetrics(const std::string &name)
56
57
auto reader =
57
58
metrics_sdk::PeriodicExportingMetricReaderFactory::Create (std::move (exporter), options);
58
59
59
- auto provider = opentelemetry::sdk::metrics::MeterProviderFactory ::Create ();
60
-
61
- provider-> AddMetricReader (std::move (reader ));
60
+ auto context = metrics_sdk::MeterContextFactory ::Create ();
61
+ context-> AddMetricReader ( std::move (reader));
62
+ auto provider = opentelemetry::sdk::metrics::MeterProviderFactory::Create (std::move (context ));
62
63
63
64
// counter view
64
65
std::string counter_name = name + " _counter" ;
@@ -112,6 +113,28 @@ void InitMetrics(const std::string &name)
112
113
provider->AddView (std::move (histogram_instrument_selector), std::move (histogram_meter_selector),
113
114
std::move (histogram_view));
114
115
116
+ // hisogram view with base2 exponential aggregation
117
+ std::string histogram_base2_name = name + " _exponential_histogram" ;
118
+ unit = " histogram-unit" ;
119
+ auto histogram_base2_instrument_selector = metrics_sdk::InstrumentSelectorFactory::Create (
120
+ metrics_sdk::InstrumentType::kHistogram , histogram_base2_name, unit);
121
+ auto histogram_base2_meter_selector = metrics_sdk::MeterSelectorFactory::Create (name, version,
122
+ schema);
123
+ auto histogram_base2_aggregation_config = std::unique_ptr<metrics_sdk::Base2ExponentialHistogramAggregationConfig>(
124
+ new metrics_sdk::Base2ExponentialHistogramAggregationConfig);
125
+ histogram_base2_aggregation_config->max_scale_ = 3 ;
126
+ histogram_base2_aggregation_config->record_min_max_ = true ;
127
+ histogram_base2_aggregation_config->max_buckets_ = 100 ;
128
+
129
+ std::shared_ptr<metrics_sdk::AggregationConfig> base2_aggregation_config (
130
+ std::move (histogram_base2_aggregation_config));
131
+
132
+ auto histogram_base2_view = metrics_sdk::ViewFactory::Create (
133
+ name, " description" , unit, metrics_sdk::AggregationType::kBase2ExponentialHistogram ,
134
+ base2_aggregation_config);
135
+
136
+ provider->AddView (std::move (histogram_base2_instrument_selector), std::move (histogram_base2_meter_selector), std::move (histogram_base2_view));
137
+
115
138
std::shared_ptr<opentelemetry::metrics::MeterProvider> api_provider (std::move (provider));
116
139
117
140
metrics_sdk::Provider::SetMeterProvider (api_provider);
@@ -147,6 +170,10 @@ int main(int argc, char **argv)
147
170
{
148
171
foo_library::histogram_example (name);
149
172
}
173
+ else if (example_type == " exponential_histogram" )
174
+ {
175
+ foo_library::histogram_exp_example (name);
176
+ }
150
177
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
151
178
else if (example_type == " gauge" )
152
179
{
@@ -170,6 +197,7 @@ int main(int argc, char **argv)
170
197
std::thread counter_example{&foo_library::counter_example, name};
171
198
std::thread observable_counter_example{&foo_library::observable_counter_example, name};
172
199
std::thread histogram_example{&foo_library::histogram_example, name};
200
+ std::thread histogram_exp_example{&foo_library::histogram_exp_example, name};
173
201
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
174
202
std::thread gauge_example{&foo_library::gauge_example, name};
175
203
#endif
@@ -181,6 +209,7 @@ int main(int argc, char **argv)
181
209
counter_example.join ();
182
210
observable_counter_example.join ();
183
211
histogram_example.join ();
212
+ histogram_exp_example.join ();
184
213
#if OPENTELEMETRY_ABI_VERSION_NO >= 2
185
214
gauge_example.join ();
186
215
#endif
0 commit comments