Skip to content

Commit 2d077f8

Browse files
authored
Update ExemplarFilter and ExemplarReservoir for spec (#2372)
1 parent 830651a commit 2d077f8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+650
-525
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ Increment the:
1515

1616
## [Unreleased]
1717

18+
* [SDK] Update ExemplarFilter and ExemplarReservoir for spec
19+
[#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372)
20+
21+
Notes on experimental features:
22+
23+
* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372)
24+
introduced `MeterProvider::SetExemplar()` which accepts en
25+
`ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and
26+
`kTraceBased`.
27+
1828
## [1.15.0] 2024-04-21
1929

2030
* [EXPORTER] Change OTLP HTTP content_type default to binary

sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h renamed to sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33

44
#pragma once
55

6-
#include <memory>
7-
#include <vector>
6+
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
87

9-
#include "opentelemetry/sdk/metrics/data/exemplar_data.h"
10-
#include "opentelemetry/sdk/metrics/exemplar/filter.h"
11-
#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h"
12-
#include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
13-
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
14-
#include "opentelemetry/version.h"
8+
# include <memory>
9+
# include <vector>
10+
11+
# include "opentelemetry/sdk/common/global_log_handler.h"
12+
# include "opentelemetry/sdk/metrics/data/exemplar_data.h"
13+
# include "opentelemetry/sdk/metrics/exemplar/filter_type.h"
14+
# include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h"
15+
# include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
16+
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
17+
# include "opentelemetry/version.h"
1518

1619
OPENTELEMETRY_BEGIN_NAMESPACE
1720
namespace common
@@ -29,7 +32,7 @@ namespace sdk
2932
namespace metrics
3033
{
3134

32-
class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
35+
class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoir
3336
{
3437

3538
public:
@@ -39,11 +42,11 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
3942
return std::shared_ptr<ReservoirCellSelector>{new HistogramCellSelector(boundaries)};
4043
}
4144

42-
HistogramExemplarReservoir(size_t size,
43-
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
44-
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell)(
45-
const opentelemetry::sdk::common::OrderedAttributeMap &attributes))
46-
: FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell)
45+
AlignedHistogramBucketExemplarReservoir(
46+
size_t size,
47+
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
48+
MapAndResetCellType map_and_reset_cell)
49+
: FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell)
4750
{}
4851

4952
class HistogramCellSelector : public ReservoirCellSelector
@@ -72,7 +75,9 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
7275
return static_cast<int>(i);
7376
}
7477
}
75-
return -1;
78+
79+
// The bucket at max_size is for values greater than the last boundary
80+
return static_cast<int>(max_size);
7681
}
7782

7883
private:
@@ -87,3 +92,5 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
8792
} // namespace metrics
8893
} // namespace sdk
8994
OPENTELEMETRY_END_NAMESPACE
95+
96+
#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW

sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h

Lines changed: 0 additions & 43 deletions
This file was deleted.

sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
7+
8+
# include <memory>
9+
10+
# include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h"
11+
# include "opentelemetry/version.h"
12+
13+
OPENTELEMETRY_BEGIN_NAMESPACE
14+
namespace context
15+
{
16+
class Context;
17+
} // namespace context
18+
19+
namespace sdk
20+
{
21+
namespace common
22+
{
23+
class OrderedAttributeMap;
24+
} // namespace common
25+
26+
namespace metrics
27+
{
28+
using MetricAttributes = opentelemetry::sdk::metrics::FilteredOrderedAttributeMap;
29+
30+
/**
31+
* Exemplar filter type is used to pre-filter measurements before attempting to store them in a
32+
* reservoir.
33+
* https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplarfilter
34+
*/
35+
enum class ExemplarFilterType : uint8_t
36+
{
37+
kAlwaysOff,
38+
kAlwaysOn,
39+
kTraceBased
40+
};
41+
42+
} // namespace metrics
43+
} // namespace sdk
44+
OPENTELEMETRY_END_NAMESPACE
45+
46+
#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW

sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h

Lines changed: 0 additions & 73 deletions
This file was deleted.

sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@
33

44
#pragma once
55

6-
#include <memory>
7-
#include <vector>
6+
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW
87

9-
#include "opentelemetry/context/context.h"
10-
#include "opentelemetry/nostd/function_ref.h"
11-
#include "opentelemetry/nostd/shared_ptr.h"
12-
#include "opentelemetry/sdk/common/attribute_utils.h"
13-
#include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
14-
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h"
15-
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
8+
# include <memory>
9+
# include <vector>
10+
11+
# include "opentelemetry/context/context.h"
12+
# include "opentelemetry/nostd/function_ref.h"
13+
# include "opentelemetry/nostd/shared_ptr.h"
14+
# include "opentelemetry/sdk/common/attribute_utils.h"
15+
# include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
16+
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h"
17+
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
1618

1719
OPENTELEMETRY_BEGIN_NAMESPACE
1820
namespace sdk
@@ -26,13 +28,14 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir
2628
public:
2729
FixedSizeExemplarReservoir(size_t size,
2830
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
29-
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell)(
30-
const opentelemetry::sdk::common::OrderedAttributeMap &attributes))
31+
MapAndResetCellType map_and_reset_cell)
3132
: storage_(size),
3233
reservoir_cell_selector_(reservoir_cell_selector),
3334
map_and_reset_cell_(map_and_reset_cell)
3435
{}
3536

37+
using ExemplarReservoir::OfferMeasurement;
38+
3639
void OfferMeasurement(
3740
int64_t value,
3841
const MetricAttributes &attributes,
@@ -95,10 +98,11 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir
9598
explicit FixedSizeExemplarReservoir() = default;
9699
std::vector<ReservoirCell> storage_;
97100
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector_;
98-
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell_)(
99-
const opentelemetry::sdk::common::OrderedAttributeMap &attributes);
101+
MapAndResetCellType map_and_reset_cell_;
100102
};
101103

102104
} // namespace metrics
103105
} // namespace sdk
104106
OPENTELEMETRY_END_NAMESPACE
107+
108+
#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW

0 commit comments

Comments
 (0)