NVIDIA DeepStream SDK API Reference

9.2 Release
includes/opentelemetry/trace/span_context.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 <stdint.h>
7 
8 #include <utility>
9 
10 #include "opentelemetry/nostd/shared_ptr.h"
11 #include "opentelemetry/trace/span_id.h"
12 #include "opentelemetry/trace/trace_flags.h"
13 #include "opentelemetry/trace/trace_id.h"
14 #include "opentelemetry/trace/trace_state.h"
15 #include "opentelemetry/version.h"
16 
18 namespace trace
19 {
20 /* SpanContext contains the state that must propagate to child Spans and across
21  * process boundaries. It contains TraceId and SpanId, TraceFlags, TraceState
22  * and whether it was propagated from a remote parent.
23  */
24 class SpanContext final
25 {
26 public:
27  /* A temporary constructor for an invalid SpanContext.
28  * Trace id and span id are set to invalid (all zeros).
29  *
30  * @param sampled_flag a required parameter specifying if child spans should be
31  * sampled
32  * @param is_remote true if this context was propagated from a remote parent.
33  */
34  SpanContext(bool sampled_flag, bool is_remote) noexcept
35  : trace_id_(),
36  span_id_(),
37  trace_flags_(trace::TraceFlags(static_cast<uint8_t>(sampled_flag))),
38  is_remote_(is_remote),
39  trace_state_(TraceState::GetDefault())
40  {}
41 
45  bool is_remote,
47  : trace_id_(trace_id),
48  span_id_(span_id),
49  trace_flags_(trace_flags),
50  is_remote_(is_remote),
51  trace_state_(std::move(trace_state))
52  {}
53 
54  SpanContext(const SpanContext &ctx) = default;
55 
56  // @returns whether this context is valid
57  bool IsValid() const noexcept { return trace_id_.IsValid() && span_id_.IsValid(); }
58 
59  // @returns the trace_flags associated with this span_context
60  const trace::TraceFlags &trace_flags() const noexcept { return trace_flags_; }
61 
62  // @returns the trace_id associated with this span_context
63  const trace::TraceId &trace_id() const noexcept { return trace_id_; }
64 
65  // @returns the span_id associated with this span_context
66  const trace::SpanId &span_id() const noexcept { return span_id_; }
67 
68  // @returns the trace_state associated with this span_context
69  const nostd::shared_ptr<trace::TraceState> &trace_state() const noexcept { return trace_state_; }
70 
71  /*
72  * @param that SpanContext for comparing.
73  * @return true if `that` equals the current SpanContext.
74  * N.B. trace_state is ignored for the comparison.
75  */
76  bool operator==(const SpanContext &that) const noexcept
77  {
78  return trace_id() == that.trace_id() && span_id() == that.span_id() &&
79  trace_flags() == that.trace_flags();
80  }
81 
82  SpanContext &operator=(const SpanContext &ctx) = default;
83 
84  bool IsRemote() const noexcept { return is_remote_; }
85 
86  static SpanContext GetInvalid() noexcept { return SpanContext(false, false); }
87 
88  bool IsSampled() const noexcept { return trace_flags_.IsSampled(); }
89 
90 private:
91  trace::TraceId trace_id_;
92  trace::SpanId span_id_;
93  trace::TraceFlags trace_flags_;
94  bool is_remote_;
96 };
97 } // namespace trace
trace::TraceId
Definition: includes/opentelemetry/trace/trace_id.h:19
trace
Definition: includes/opentelemetry/context/context_value.h:18
trace::SpanContext::trace_id
const trace::TraceId & trace_id() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:63
trace::SpanContext::IsSampled
bool IsSampled() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:88
trace::SpanContext::SpanContext
SpanContext(bool sampled_flag, bool is_remote) noexcept
Definition: includes/opentelemetry/trace/span_context.h:34
trace::TraceId::IsValid
bool IsValid() const noexcept
Definition: includes/opentelemetry/trace/trace_id.h:59
trace::SpanContext
Definition: includes/opentelemetry/trace/span_context.h:24
nostd::shared_ptr
Provide a type-erased version of std::shared_ptr that has ABI stability.
Definition: includes/opentelemetry/nostd/shared_ptr.h:28
trace::SpanContext::SpanContext
SpanContext(TraceId trace_id, SpanId span_id, TraceFlags trace_flags, bool is_remote, nostd::shared_ptr< TraceState > trace_state=TraceState::GetDefault()) noexcept
Definition: includes/opentelemetry/trace/span_context.h:42
OPENTELEMETRY_BEGIN_NAMESPACE
#define OPENTELEMETRY_BEGIN_NAMESPACE
Definition: includes/opentelemetry/version.h:21
trace::SpanContext::IsRemote
bool IsRemote() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:84
trace::TraceState::GetDefault
static OPENTELEMETRY_API_SINGLETON nostd::shared_ptr< TraceState > GetDefault()
Definition: includes/opentelemetry/trace/trace_state.h:43
trace::TraceFlags::IsSampled
bool IsSampled() const noexcept
Definition: includes/opentelemetry/trace/trace_flags.h:40
trace::SpanContext::trace_state
const nostd::shared_ptr< trace::TraceState > & trace_state() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:69
OPENTELEMETRY_END_NAMESPACE
#define OPENTELEMETRY_END_NAMESPACE
Definition: includes/opentelemetry/version.h:24
absl::move
constexpr absl::OTABSL_OPTION_NAMESPACE_NAME::remove_reference_t< T > && move(T &&t) noexcept
Definition: includes/opentelemetry/nostd/internal/absl/utility/utility.h:199
trace::SpanContext::trace_flags
const trace::TraceFlags & trace_flags() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:60
trace::SpanContext::IsValid
bool IsValid() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:57
trace::SpanContext::operator=
SpanContext & operator=(const SpanContext &ctx)=default
std
Extensions to the C++ standard library.
Definition: includes/opentelemetry/nostd/string_view.h:212
trace::SpanContext::span_id
const trace::SpanId & span_id() const noexcept
Definition: includes/opentelemetry/trace/span_context.h:66
trace::SpanId
Definition: includes/opentelemetry/trace/span_id.h:16
trace::TraceFlags
Definition: includes/opentelemetry/trace/trace_flags.h:18
trace::SpanId::IsValid
bool IsValid() const noexcept
Definition: includes/opentelemetry/trace/span_id.h:50
trace::SpanContext::operator==
bool operator==(const SpanContext &that) const noexcept
Definition: includes/opentelemetry/trace/span_context.h:76
trace::SpanContext::GetInvalid
static SpanContext GetInvalid() noexcept
Definition: includes/opentelemetry/trace/span_context.h:86