NVIDIA DeepStream SDK API Reference

9.2 Release
includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.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 <stddef.h>
7 #include <stdint.h>
8 #include <algorithm>
9 #include <memory>
10 #include <vector>
11 
12 #include "opentelemetry/common/spin_lock_mutex.h"
13 #include "opentelemetry/nostd/variant.h"
14 #include "opentelemetry/sdk/metrics/aggregation/aggregation.h"
15 #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h"
16 #include "opentelemetry/sdk/metrics/data/metric_data.h"
17 #include "opentelemetry/sdk/metrics/data/point_data.h"
18 #include "opentelemetry/version.h"
19 
21 namespace sdk
22 {
23 namespace metrics
24 {
25 class AggregationConfig;
26 
28 {
29 public:
30  LongHistogramAggregation(const AggregationConfig *aggregation_config = nullptr);
33 
34  void Aggregate(int64_t value, const PointAttributes &attributes = {}) noexcept override;
35 
36  void Aggregate(double /* value */, const PointAttributes & /* attributes */) noexcept override {}
37 
38  /* Returns the result of merge of the existing aggregation with delta aggregation with same
39  * boundaries */
40  std::unique_ptr<Aggregation> Merge(const Aggregation &delta) const noexcept override;
41 
42  /* Returns the new delta aggregation by comparing existing aggregation with next aggregation with
43  * same boundaries. Data points for `next` aggregation (sum , bucket-counts) should be more than
44  * the current aggregation - which is the normal scenario as measurements values are monotonic
45  * increasing.
46  */
47  std::unique_ptr<Aggregation> Diff(const Aggregation &next) const noexcept override;
48 
49  PointType ToPoint() const noexcept override;
50 
51 private:
52  mutable opentelemetry::common::SpinLockMutex lock_;
53  HistogramPointData point_data_;
54  bool record_min_max_ = true;
55 };
56 
58 {
59 public:
60  DoubleHistogramAggregation(const AggregationConfig *aggregation_config = nullptr);
63 
64  void Aggregate(int64_t /* value */, const PointAttributes & /* attributes */) noexcept override {}
65 
66  void Aggregate(double value, const PointAttributes &attributes = {}) noexcept override;
67 
68  /* Returns the result of merge of the existing aggregation with delta aggregation with same
69  * boundaries */
70  std::unique_ptr<Aggregation> Merge(const Aggregation &delta) const noexcept override;
71 
72  /* Returns the new delta aggregation by comparing existing aggregation with next aggregation with
73  * same boundaries. Data points for `next` aggregation (sum , bucket-counts) should be more than
74  * the current aggregation - which is the normal scenario as measurements values are monotonic
75  * increasing.
76  */
77  std::unique_ptr<Aggregation> Diff(const Aggregation &next) const noexcept override;
78 
79  PointType ToPoint() const noexcept override;
80 
81 private:
82  mutable opentelemetry::common::SpinLockMutex lock_;
83  mutable HistogramPointData point_data_;
84  bool record_min_max_ = true;
85 };
86 
87 template <class T>
89  HistogramPointData &delta,
90  HistogramPointData &merge)
91 {
92  for (size_t i = 0; i < current.counts_.size(); i++)
93  {
94  merge.counts_[i] = current.counts_[i] + delta.counts_[i];
95  }
96  merge.boundaries_ = current.boundaries_;
97  merge.sum_ = nostd::get<T>(current.sum_) + nostd::get<T>(delta.sum_);
98  merge.count_ = current.count_ + delta.count_;
99  merge.record_min_max_ = current.record_min_max_ && delta.record_min_max_;
100  if (merge.record_min_max_)
101  {
102  merge.min_ = (std::min)(nostd::get<T>(current.min_), nostd::get<T>(delta.min_));
103  merge.max_ = (std::max)(nostd::get<T>(current.max_), nostd::get<T>(delta.max_));
104  }
105 }
106 
107 template <class T>
109 {
110  for (size_t i = 0; i < current.counts_.size(); i++)
111  {
112  diff.counts_[i] = next.counts_[i] - current.counts_[i];
113  }
114  diff.boundaries_ = current.boundaries_;
115  diff.count_ = next.count_ - current.count_;
116  diff.record_min_max_ = false;
117 }
118 
119 template <class T>
120 size_t BucketBinarySearch(T value, const std::vector<double> &boundaries)
121 {
122  auto low = std::lower_bound(boundaries.begin(), boundaries.end(), value);
123  return low - boundaries.begin();
124 }
125 
126 } // namespace metrics
127 } // namespace sdk
sdk::metrics::HistogramPointData
Definition: includes/opentelemetry/sdk/metrics/data/point_data.h:55
sdk::metrics::DoubleHistogramAggregation::Aggregate
void Aggregate(int64_t, const PointAttributes &) noexcept override
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:64
sdk::metrics::BucketBinarySearch
size_t BucketBinarySearch(T value, const std::vector< double > &boundaries)
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:120
sdk::metrics::HistogramMerge
void HistogramMerge(HistogramPointData &current, HistogramPointData &delta, HistogramPointData &merge)
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:88
sdk::metrics::AggregationConfig
Definition: includes/opentelemetry/sdk/metrics/aggregation/aggregation_config.h:16
sdk::metrics::PointAttributes
opentelemetry::sdk::common::OrderedAttributeMap PointAttributes
Definition: includes/opentelemetry/sdk/metrics/data/metric_data.h:20
sdk::metrics::HistogramPointData::count_
uint64_t count_
Definition: includes/opentelemetry/sdk/metrics/data/point_data.h:72
sdk::metrics::LongHistogramAggregation::Diff
std::unique_ptr< Aggregation > Diff(const Aggregation &next) const noexcept override
sdk::metrics::LongHistogramAggregation::Merge
std::unique_ptr< Aggregation > Merge(const Aggregation &delta) const noexcept override
OPENTELEMETRY_BEGIN_NAMESPACE
#define OPENTELEMETRY_BEGIN_NAMESPACE
Definition: includes/opentelemetry/version.h:21
sdk::metrics::DoubleHistogramAggregation
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:57
sdk::metrics::LongHistogramAggregation::Aggregate
void Aggregate(double, const PointAttributes &) noexcept override
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:36
max
int max(int a, int b)
Compute the component-wise maximum.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:60
sdk::metrics::HistogramPointData::boundaries_
std::vector< double > boundaries_
Definition: includes/opentelemetry/sdk/metrics/data/point_data.h:67
OPENTELEMETRY_END_NAMESPACE
#define OPENTELEMETRY_END_NAMESPACE
Definition: includes/opentelemetry/version.h:24
sdk::metrics::HistogramDiff
void HistogramDiff(HistogramPointData &current, HistogramPointData &next, HistogramPointData &diff)
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:108
sdk::metrics::Aggregation
Definition: includes/opentelemetry/sdk/metrics/aggregation/aggregation.h:16
min
int min(int a, int b)
Compute the component-wise minimum.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:70
sdk::metrics::LongHistogramAggregation::LongHistogramAggregation
LongHistogramAggregation(const AggregationConfig *aggregation_config=nullptr)
sdk
Definition: includes/opentelemetry/sdk/common/atomic_shared_ptr.h:13
sdk::metrics::LongHistogramAggregation::ToPoint
PointType ToPoint() const noexcept override
metrics
Definition: includes/opentelemetry/metrics/async_instruments.h:10
sdk::metrics::HistogramPointData::record_min_max_
bool record_min_max_
Definition: includes/opentelemetry/sdk/metrics/data/point_data.h:73
sdk::metrics::PointType
opentelemetry::nostd::variant< SumPointData, HistogramPointData, Base2ExponentialHistogramPointData, LastValuePointData, DropPointData > PointType
Definition: includes/opentelemetry/sdk/metrics/data/metric_data.h:25
sdk::metrics::LongHistogramAggregation::Aggregate
void Aggregate(int64_t value, const PointAttributes &attributes={}) noexcept override
sdk::metrics::HistogramPointData::counts_
std::vector< uint64_t > counts_
Definition: includes/opentelemetry/sdk/metrics/data/point_data.h:71
opentelemetry
Definition: includes/opentelemetry/exporters/otlp/otlp_grpc_client.h:38
sdk::metrics::LongHistogramAggregation
Definition: includes/opentelemetry/sdk/metrics/aggregation/histogram_aggregation.h:27
common
Definition: includes/opentelemetry/common/attribute_value.h:14