Program Listing for File reservoir.h

Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/opentelemetry-cpp/checkouts/latest/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h)

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include <memory>
#include <vector>

#include "opentelemetry/sdk/metrics/exemplar/filter.h"
#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace common
{
class SystemTimestamp;
}  // namespace common

namespace context
{
class Context;
}  // namespace context

namespace sdk
{
namespace metrics
{
class ExemplarData;

class ExemplarReservoir
{
public:
  virtual ~ExemplarReservoir() = default;

  virtual void OfferMeasurement(
      int64_t value,
      const MetricAttributes &attributes,
      const opentelemetry::context::Context &context,
      const opentelemetry::common::SystemTimestamp &timestamp) noexcept = 0;

  virtual void OfferMeasurement(
      double value,
      const MetricAttributes &attributes,
      const opentelemetry::context::Context &context,
      const opentelemetry::common::SystemTimestamp &timestamp) noexcept = 0;

  virtual std::vector<std::shared_ptr<ExemplarData>> CollectAndReset(
      const MetricAttributes &pointAttributes) noexcept = 0;

  static nostd::shared_ptr<ExemplarReservoir> GetFilteredExemplarReservoir(
      std::shared_ptr<ExemplarFilter> filter,
      std::shared_ptr<ExemplarReservoir> reservoir);

  static nostd::shared_ptr<ExemplarReservoir> GetHistogramExemplarReservoir(
      size_t size,
      std::shared_ptr<ReservoirCellSelector> reservoir_cell_selector,
      std::shared_ptr<ExemplarData> (ReservoirCell::*map_and_reset_cell)(
          const common::OrderedAttributeMap &attributes));

  static nostd::shared_ptr<ExemplarReservoir> GetNoExemplarReservoir();
};

}  // namespace metrics
}  // namespace sdk
OPENTELEMETRY_END_NAMESPACE