Program Listing for File sampler.h

Return to documentation for file (/home/docs/checkouts/

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

#pragma once

#include <map>
#include <memory>
#include <string>

#include "opentelemetry/common/attribute_value.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/nostd/string_view.h"
#include "opentelemetry/trace/span_metadata.h"
#include "opentelemetry/trace/trace_id.h"
#include "opentelemetry/version.h"

namespace common
class KeyValueIterable;
}  // namespace common

namespace trace
class SpanContext;
class SpanContextKeyValueIterable;
class TraceState;
}  // namespace trace

namespace sdk
namespace trace
enum class Decision
  // IsRecording() == false, span will not be recorded and all events and attributes will be
  // dropped.
  // IsRecording() == true, but Sampled flag MUST NOT be set.
  // IsRecording() == true AND Sampled flag` MUST be set.

struct SamplingResult
  Decision decision;
  // A set of span Attributes that will also be added to the Span. Can be nullptr.
  std::unique_ptr<const std::map<std::string, opentelemetry::common::AttributeValue>> attributes;
  //  The tracestate used by the span.
  nostd::shared_ptr<opentelemetry::trace::TraceState> trace_state;

  inline bool IsRecording()
    return decision == Decision::RECORD_ONLY || decision == Decision::RECORD_AND_SAMPLE;
  inline bool IsSampled() { return decision == Decision::RECORD_AND_SAMPLE; }

class Sampler
  virtual ~Sampler() = default;
  virtual SamplingResult ShouldSample(
      const opentelemetry::trace::SpanContext &parent_context,
      opentelemetry::trace::TraceId trace_id,
      nostd::string_view name,
      opentelemetry::trace::SpanKind span_kind,
      const opentelemetry::common::KeyValueIterable &attributes,
      const opentelemetry::trace::SpanContextKeyValueIterable &links) noexcept = 0;

  virtual nostd::string_view GetDescription() const noexcept = 0;
}  // namespace trace
}  // namespace sdk