NVIDIA DeepStream SDK API Reference

9.2 Release
includes/opentelemetry/sdk/metrics/view/view_registry.h
Go to the documentation of this file.
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #pragma once
5 
6 #include <algorithm>
7 #include <memory>
8 #include <string>
9 #include <utility>
10 #include <vector>
11 
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"
20 
22 namespace sdk
23 {
24 namespace metrics
25 {
27 {
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)
32  : instrument_selector_{std::move(instrument_selector)},
33  meter_selector_{std::move(meter_selector)},
34  view_{std::move(view)}
35  {}
36  std::unique_ptr<opentelemetry::sdk::metrics::InstrumentSelector> instrument_selector_;
37  std::unique_ptr<opentelemetry::sdk::metrics::MeterSelector> meter_selector_;
38  std::unique_ptr<opentelemetry::sdk::metrics::View> view_;
39 };
40 
42 {
43 public:
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)
47  {
48  // TBD - thread-safe ?
49 
50  auto registered_view = std::unique_ptr<RegisteredView>(new RegisteredView{
51  std::move(instrument_selector), std::move(meter_selector), std::move(view)});
52  registered_views_.push_back(std::move(registered_view));
53  }
54 
55  bool FindViews(
56  const opentelemetry::sdk::metrics::InstrumentDescriptor &instrument_descriptor,
57  const opentelemetry::sdk::instrumentationscope::InstrumentationScope &instrumentation_scope,
58  nostd::function_ref<bool(const View &)> callback) const
59  {
60  bool found = false;
61  for (auto const &registered_view : registered_views_)
62  {
63  if (MatchMeter(registered_view->meter_selector_.get(), instrumentation_scope) &&
64  MatchInstrument(registered_view->instrument_selector_.get(), instrument_descriptor))
65  {
66  found = true;
67  if (!callback(*(registered_view->view_.get())))
68  {
69  return false;
70  }
71  }
72  }
73  // return default view if none found;
74  if (!found)
75  {
76  static const View view("");
77  if (!callback(view))
78  {
79  return false;
80  }
81  }
82  return true;
83  }
84 
85  ViewRegistry() = default;
86  ~ViewRegistry() = default;
87 
88 private:
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)
93  {
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()));
99  }
100 
101  static bool MatchInstrument(
102  opentelemetry::sdk::metrics::InstrumentSelector *selector,
103  const opentelemetry::sdk::metrics::InstrumentDescriptor &instrument_descriptor)
104  {
105  return selector->GetNameFilter()->Match(instrument_descriptor.name_) &&
106  selector->GetUnitFilter()->Match(instrument_descriptor.unit_) &&
107  (selector->GetInstrumentType() == instrument_descriptor.type_);
108  }
109 };
110 } // namespace metrics
111 } // namespace sdk
sdk::metrics::View
View defines the interface to allow SDK user to customize the metrics before exported.
Definition: includes/opentelemetry/sdk/metrics/view/view.h:24
nostd::function_ref
Definition: includes/opentelemetry/nostd/function_ref.h:17
sdk::metrics::ViewRegistry
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:41
sdk::metrics::RegisteredView::meter_selector_
std::unique_ptr< opentelemetry::sdk::metrics::MeterSelector > meter_selector_
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:37
sdk::metrics::RegisteredView::view_
std::unique_ptr< opentelemetry::sdk::metrics::View > view_
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:38
OPENTELEMETRY_BEGIN_NAMESPACE
#define OPENTELEMETRY_BEGIN_NAMESPACE
Definition: includes/opentelemetry/version.h:21
sdk::metrics::RegisteredView
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:26
sdk::metrics::RegisteredView::instrument_selector_
std::unique_ptr< opentelemetry::sdk::metrics::InstrumentSelector > instrument_selector_
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:36
OPENTELEMETRY_END_NAMESPACE
#define OPENTELEMETRY_END_NAMESPACE
Definition: includes/opentelemetry/version.h:24
absl::move
constexpr absl::OTABSL_OPTION_NAMESPACE_NAME::remove_reference_t< T > && move(T &&t) noexcept
Definition: includes/opentelemetry/nostd/internal/absl/utility/utility.h:199
sdk::metrics::ViewRegistry::~ViewRegistry
~ViewRegistry()=default
sdk::metrics::RegisteredView::RegisteredView
RegisteredView(std::unique_ptr< opentelemetry::sdk::metrics::InstrumentSelector > instrument_selector, std::unique_ptr< opentelemetry::sdk::metrics::MeterSelector > meter_selector, std::unique_ptr< opentelemetry::sdk::metrics::View > view)
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:28
sdk
Definition: includes/opentelemetry/sdk/common/atomic_shared_ptr.h:13
metrics
Definition: includes/opentelemetry/metrics/async_instruments.h:10
sdk::metrics::ViewRegistry::FindViews
bool FindViews(const opentelemetry::sdk::metrics::InstrumentDescriptor &instrument_descriptor, const opentelemetry::sdk::instrumentationscope::InstrumentationScope &instrumentation_scope, nostd::function_ref< bool(const View &)> callback) const
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:55
sdk::metrics::ViewRegistry::ViewRegistry
ViewRegistry()=default
sdk::metrics::ViewRegistry::AddView
void AddView(std::unique_ptr< opentelemetry::sdk::metrics::InstrumentSelector > instrument_selector, std::unique_ptr< opentelemetry::sdk::metrics::MeterSelector > meter_selector, std::unique_ptr< opentelemetry::sdk::metrics::View > view)
Definition: includes/opentelemetry/sdk/metrics/view/view_registry.h:44