]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/opentracing-cpp/mocktracer/src/mock_span_context.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / jaegertracing / opentracing-cpp / mocktracer / src / mock_span_context.h
CommitLineData
f67539c2
TL
1#ifndef OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H
2#define OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H
3
4#include <opentracing/mocktracer/tracer.h>
5#include <exception>
6#include <mutex>
7#include <string>
8#include "propagation.h"
9
10namespace opentracing {
11BEGIN_OPENTRACING_ABI_NAMESPACE
12namespace mocktracer {
13
14class MockSpan;
15
16class MockSpanContext : public SpanContext {
17 public:
18 MockSpanContext() = default;
19
20 MockSpanContext(SpanContextData&& data) noexcept : data_(std::move(data)) {}
21
22 MockSpanContext(const MockSpanContext&) = delete;
23 MockSpanContext(MockSpanContext&&) = delete;
24
25 ~MockSpanContext() override = default;
26
27 MockSpanContext& operator=(const MockSpanContext&) = delete;
28 MockSpanContext& operator=(MockSpanContext&& other) noexcept;
29
30 void ForeachBaggageItem(
31 std::function<bool(const std::string& key, const std::string& value)> f)
32 const override;
33
34 std::string ToTraceID() const noexcept override try {
35 return std::to_string(data_.trace_id);
36 } catch (const std::exception& /*e*/) {
37 return {};
38 }
39
40 std::string ToSpanID() const noexcept override try {
41 return std::to_string(data_.span_id);
42 } catch (const std::exception& /*e*/) {
43 return {};
44 }
45
46 uint64_t trace_id() const noexcept { return data_.trace_id; }
47
48 uint64_t span_id() const noexcept { return data_.span_id; }
49
50 void CopyData(SpanContextData& data) const;
51
52 template <class Carrier>
53 expected<void> Inject(const PropagationOptions& propagation_options,
54 Carrier& writer) const {
55 std::lock_guard<std::mutex> lock_guard{baggage_mutex_};
56 return InjectSpanContext(propagation_options, writer, data_);
57 }
58
59 template <class Carrier>
60 expected<bool> Extract(const PropagationOptions& propagation_options,
61 Carrier& reader) {
62 std::lock_guard<std::mutex> lock_guard{baggage_mutex_};
63 return ExtractSpanContext(propagation_options, reader, data_);
64 }
65
66 std::unique_ptr<SpanContext> Clone() const noexcept override;
67
68 private:
69 friend MockSpan;
70
71 mutable std::mutex baggage_mutex_;
72 SpanContextData data_;
73};
74
75} // namespace mocktracer
76END_OPENTRACING_ABI_NAMESPACE
77} // namespace opentracing
78
79#endif // OPENTRACING_MOCKTRACER_SPAN_CONTEXT_H