NVIDIA DeepStream SDK API Reference

9.2 Release
includes/opentelemetry/sdk/trace/simple_processor.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 <atomic>
7 #include <chrono>
8 #include <memory>
9 #include <mutex>
10 #include <utility>
11 
12 #include "opentelemetry/common/spin_lock_mutex.h"
13 #include "opentelemetry/nostd/span.h"
14 #include "opentelemetry/sdk/common/exporter_utils.h"
15 #include "opentelemetry/sdk/trace/exporter.h"
16 #include "opentelemetry/sdk/trace/processor.h"
17 #include "opentelemetry/sdk/trace/recordable.h"
18 #include "opentelemetry/trace/span_context.h"
19 #include "opentelemetry/version.h"
20 
22 namespace sdk
23 {
24 namespace trace
25 {
36 {
37 public:
42  explicit SimpleSpanProcessor(std::unique_ptr<SpanExporter> &&exporter) noexcept
43  : exporter_(std::move(exporter))
44  {}
45 
46  std::unique_ptr<Recordable> MakeRecordable() noexcept override
47  {
48  return exporter_->MakeRecordable();
49  }
50 
51  void OnStart(Recordable & /* span */,
52  const opentelemetry::trace::SpanContext & /* parent_context */) noexcept override
53  {}
54 
55  void OnEnd(std::unique_ptr<Recordable> &&span) noexcept override
56  {
58  const std::lock_guard<opentelemetry::common::SpinLockMutex> locked(lock_);
59  if (exporter_->Export(batch) == sdk::common::ExportResult::kFailure)
60  {
61  /* Once it is defined how the SDK does logging, an error should be
62  * logged in this case. */
63  }
64  }
65 
66  bool ForceFlush(
67  std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override
68  {
69  if (exporter_ != nullptr)
70  {
71  return exporter_->ForceFlush(timeout);
72  }
73 
74  return true;
75  }
76 
77  bool Shutdown(
78  std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept override
79  {
80  return InternalShutdown(timeout);
81  }
82 
84 
85 protected:
87  std::chrono::microseconds timeout = (std::chrono::microseconds::max)()) noexcept
88  {
89  // We only call shutdown ONCE.
90  if (exporter_ != nullptr && !shutdown_latch_.test_and_set(std::memory_order_acquire))
91  {
92  return exporter_->Shutdown(timeout);
93  }
94  return true;
95  }
96 
97 private:
98  std::unique_ptr<SpanExporter> exporter_;
99  opentelemetry::common::SpinLockMutex lock_;
100 #if defined(__cpp_lib_atomic_value_initialization) && \
101  __cpp_lib_atomic_value_initialization >= 201911L
102  std::atomic_flag shutdown_latch_{};
103 #else
104  std::atomic_flag shutdown_latch_ = ATOMIC_FLAG_INIT;
105 #endif
106 };
107 } // namespace trace
108 } // namespace sdk
trace
Definition: includes/opentelemetry/context/context_value.h:18
sdk::common::ExportResult::kFailure
@ kFailure
sdk::trace::Recordable
Maintains a representation of a span in a format that can be processed by a recorder.
Definition: includes/opentelemetry/sdk/trace/recordable.h:44
sdk::trace::SimpleSpanProcessor::MakeRecordable
std::unique_ptr< Recordable > MakeRecordable() noexcept override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:46
sdk::trace::SimpleSpanProcessor::Shutdown
bool Shutdown(std::chrono::microseconds timeout=(std::chrono::microseconds::max)()) noexcept override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:77
exporter
Definition: includes/opentelemetry/exporters/memory/in_memory_data.h:11
OPENTELEMETRY_BEGIN_NAMESPACE
#define OPENTELEMETRY_BEGIN_NAMESPACE
Definition: includes/opentelemetry/version.h:21
nostd::span
Back port of std::span.
Definition: includes/opentelemetry/nostd/span.h:51
max
int max(int a, int b)
Compute the component-wise maximum.
Definition: sources/libs/nvmultiobjecttracker/include/modules/cuDCFv2/helper_math.h:60
sdk::trace::SimpleSpanProcessor::OnStart
void OnStart(Recordable &, const opentelemetry::trace::SpanContext &) noexcept override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:51
sdk::trace::SimpleSpanProcessor::~SimpleSpanProcessor
~SimpleSpanProcessor() override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:83
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
sdk::trace::SimpleSpanProcessor::ForceFlush
bool ForceFlush(std::chrono::microseconds timeout=(std::chrono::microseconds::max)()) noexcept override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:66
sdk::trace::SimpleSpanProcessor::InternalShutdown
bool InternalShutdown(std::chrono::microseconds timeout=(std::chrono::microseconds::max)()) noexcept
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:86
sdk::trace::SimpleSpanProcessor
The simple span processor passes finished recordables to the configured SpanExporter,...
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:35
sdk::trace::SimpleSpanProcessor::OnEnd
void OnEnd(std::unique_ptr< Recordable > &&span) noexcept override
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:55
sdk
Definition: includes/opentelemetry/sdk/common/atomic_shared_ptr.h:13
sdk::trace::SpanProcessor
Span processor allow hooks for span start and end method invocations.
Definition: includes/opentelemetry/sdk/trace/processor.h:29
sdk::trace::SimpleSpanProcessor::SimpleSpanProcessor
SimpleSpanProcessor(std::unique_ptr< SpanExporter > &&exporter) noexcept
Initialize a simple span processor.
Definition: includes/opentelemetry/sdk/trace/simple_processor.h:42