12 #include "opentelemetry/nostd/function_ref.h"
13 #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h"
14 #include "opentelemetry/sdk/metrics/instruments.h"
15 #include "opentelemetry/sdk/metrics/view/instrument_selector.h"
16 #include "opentelemetry/sdk/metrics/view/meter_selector.h"
17 #include "opentelemetry/sdk/metrics/view/predicate.h"
18 #include "opentelemetry/sdk/metrics/view/view.h"
19 #include "opentelemetry/version.h"
29 std::unique_ptr<opentelemetry::sdk::metrics::InstrumentSelector> instrument_selector,
30 std::unique_ptr<opentelemetry::sdk::metrics::MeterSelector> meter_selector,
31 std::unique_ptr<opentelemetry::sdk::metrics::View> view)
38 std::unique_ptr<opentelemetry::sdk::metrics::View>
view_;
44 void AddView(std::unique_ptr<opentelemetry::sdk::metrics::InstrumentSelector> instrument_selector,
45 std::unique_ptr<opentelemetry::sdk::metrics::MeterSelector> meter_selector,
46 std::unique_ptr<opentelemetry::sdk::metrics::View> view)
50 auto registered_view = std::unique_ptr<RegisteredView>(
new RegisteredView{
52 registered_views_.push_back(
std::move(registered_view));
56 const opentelemetry::sdk::metrics::InstrumentDescriptor &instrument_descriptor,
57 const opentelemetry::sdk::instrumentationscope::InstrumentationScope &instrumentation_scope,
61 for (
auto const ®istered_view : registered_views_)
63 if (MatchMeter(registered_view->meter_selector_.get(), instrumentation_scope) &&
64 MatchInstrument(registered_view->instrument_selector_.get(), instrument_descriptor))
67 if (!callback(*(registered_view->view_.get())))
76 static const View view(
"");
89 std::vector<std::unique_ptr<RegisteredView>> registered_views_;
90 static bool MatchMeter(
91 opentelemetry::sdk::metrics::MeterSelector *selector,
92 const opentelemetry::sdk::instrumentationscope::InstrumentationScope &instrumentation_scope)
94 return selector->GetNameFilter()->Match(instrumentation_scope.GetName()) &&
95 (instrumentation_scope.GetVersion().size() == 0 ||
96 selector->GetVersionFilter()->Match(instrumentation_scope.GetVersion())) &&
97 (instrumentation_scope.GetSchemaURL().size() == 0 ||
98 selector->GetSchemaFilter()->Match(instrumentation_scope.GetSchemaURL()));
101 static bool MatchInstrument(
102 opentelemetry::sdk::metrics::InstrumentSelector *selector,
103 const opentelemetry::sdk::metrics::InstrumentDescriptor &instrument_descriptor)
105 return selector->GetNameFilter()->Match(instrument_descriptor.name_) &&
106 selector->GetUnitFilter()->Match(instrument_descriptor.unit_) &&
107 (selector->GetInstrumentType() == instrument_descriptor.type_);