Skip to content

Commit

Permalink
Update ExemplarFilter and ExemplarReservoir for spec (#2372)
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomsonTan authored Apr 29, 2024
1 parent 830651a commit 2d077f8
Show file tree
Hide file tree
Showing 43 changed files with 650 additions and 525 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ Increment the:

## [Unreleased]

* [SDK] Update ExemplarFilter and ExemplarReservoir for spec
[#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372)

Notes on experimental features:

* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372)
introduced `MeterProvider::SetExemplar()` which accepts en
`ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and
`kTraceBased`.

## [1.15.0] 2024-04-21

* [EXPORTER] Change OTLP HTTP content_type default to binary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@

#pragma once

#include <memory>
#include <vector>
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW

#include "opentelemetry/sdk/metrics/data/exemplar_data.h"
#include "opentelemetry/sdk/metrics/exemplar/filter.h"
#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
#include "opentelemetry/version.h"
# include <memory>
# include <vector>

# include "opentelemetry/sdk/common/global_log_handler.h"
# include "opentelemetry/sdk/metrics/data/exemplar_data.h"
# include "opentelemetry/sdk/metrics/exemplar/filter_type.h"
# include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h"
# include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
# include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace common
Expand All @@ -29,7 +32,7 @@ namespace sdk
namespace metrics
{

class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoir
{

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

HistogramExemplarReservoir(size_t size,
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell)(
const opentelemetry::sdk::common::OrderedAttributeMap &attributes))
: FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell)
AlignedHistogramBucketExemplarReservoir(
size_t size,
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
MapAndResetCellType map_and_reset_cell)
: FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell)
{}

class HistogramCellSelector : public ReservoirCellSelector
Expand Down Expand Up @@ -72,7 +75,9 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
return static_cast<int>(i);
}
}
return -1;

// The bucket at max_size is for values greater than the last boundary
return static_cast<int>(max_size);
}

private:
Expand All @@ -87,3 +92,5 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir
} // namespace metrics
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE

#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW

This file was deleted.

54 changes: 0 additions & 54 deletions sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h

This file was deleted.

46 changes: 46 additions & 0 deletions sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW

# include <memory>

# include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h"
# include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace context
{
class Context;
} // namespace context

namespace sdk
{
namespace common
{
class OrderedAttributeMap;
} // namespace common

namespace metrics
{
using MetricAttributes = opentelemetry::sdk::metrics::FilteredOrderedAttributeMap;

/**
* Exemplar filter type is used to pre-filter measurements before attempting to store them in a
* reservoir.
* https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplarfilter
*/
enum class ExemplarFilterType : uint8_t
{
kAlwaysOff,
kAlwaysOn,
kTraceBased
};

} // namespace metrics
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE

#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@

#pragma once

#include <memory>
#include <vector>
#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW

#include "opentelemetry/context/context.h"
#include "opentelemetry/nostd/function_ref.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/sdk/common/attribute_utils.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
# include <memory>
# include <vector>

# include "opentelemetry/context/context.h"
# include "opentelemetry/nostd/function_ref.h"
# include "opentelemetry/nostd/shared_ptr.h"
# include "opentelemetry/sdk/common/attribute_utils.h"
# include "opentelemetry/sdk/metrics/exemplar/reservoir.h"
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h"
# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
Expand All @@ -26,13 +28,14 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir
public:
FixedSizeExemplarReservoir(size_t size,
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell)(
const opentelemetry::sdk::common::OrderedAttributeMap &attributes))
MapAndResetCellType map_and_reset_cell)
: storage_(size),
reservoir_cell_selector_(reservoir_cell_selector),
map_and_reset_cell_(map_and_reset_cell)
{}

using ExemplarReservoir::OfferMeasurement;

void OfferMeasurement(
int64_t value,
const MetricAttributes &attributes,
Expand Down Expand Up @@ -95,10 +98,11 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir
explicit FixedSizeExemplarReservoir() = default;
std::vector<ReservoirCell> storage_;
std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector_;
std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell_)(
const opentelemetry::sdk::common::OrderedAttributeMap &attributes);
MapAndResetCellType map_and_reset_cell_;
};

} // namespace metrics
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE

#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW
Loading

2 comments on commit 2d077f8

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'OpenTelemetry-cpp sdk Benchmark'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 2d077f8 Previous: 830651a Ratio
BM_ComputeIndex/0 16.575436107581034 ns/iter 5.96759158097128 ns/iter 2.78

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'OpenTelemetry-cpp exporters Benchmark'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 2d077f8 Previous: 830651a Ratio
BM_OtlpExporterSparseSpans 187.07921157530205 ns/iter 92.88221834825268 ns/iter 2.01

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.