Skip to content

Commit 5559c65

Browse files
committed
wip
1 parent 88ab5b9 commit 5559c65

File tree

5 files changed

+208
-73
lines changed

5 files changed

+208
-73
lines changed

core/tracing/otel_tracer.cxx

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,50 +22,62 @@
2222
#if defined(__GNUC__)
2323
#pragma GCC diagnostic push
2424
#pragma GCC diagnostic ignored "-Wsign-conversion"
25+
#pragma GCC diagnostic ignored "-Wdeprecated-builtins"
26+
#elif defined(__clang__)
27+
#pragma clang diagnostic push
28+
#pragma clang diagnostic ignored "-Wdeprecated-builtins"
2529
#endif
2630
#include <opentelemetry/trace/provider.h>
2731
#include <opentelemetry/trace/tracer.h>
2832
#if defined(__GNUC__)
2933
#pragma GCC diagnostic pop
34+
#elif defined(__clang__)
35+
#pragma clang diagnostic pop
3036
#endif
3137

3238
namespace couchbase::core::tracing
3339
{
34-
namespace
35-
{
36-
class otel_request_span : public couchbase::tracing::request_span
40+
41+
auto
42+
otel_request_span::wrapped_span() -> std::shared_ptr<opentelemetry::trace::Span>
3743
{
38-
public:
39-
explicit otel_request_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
40-
: span_(std::move(span))
41-
{
42-
}
44+
return span_;
45+
}
4346

44-
void add_tag(const std::string& name, const std::string& value) override
45-
{
46-
span_->SetAttribute(name, value);
47-
}
47+
void
48+
otel_request_span::end()
49+
{
50+
span_->End();
51+
}
4852

49-
void add_tag(const std::string& name, std::uint64_t value) override
50-
{
51-
span_->SetAttribute(name, value);
52-
}
53+
void
54+
otel_request_span::add_tag(const std::string& name, std::uint64_t value)
55+
{
56+
span_->SetAttribute(name, value);
57+
}
5358

54-
void end() override
55-
{
56-
span_->End();
57-
}
59+
void
60+
otel_request_span::add_tag(const std::string& name, const std::string& value)
61+
{
62+
span_->SetAttribute(name, value);
63+
}
5864

59-
auto wrapped_span() -> opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span>
60-
{
61-
return span_;
62-
}
65+
otel_request_span::otel_request_span(std::shared_ptr<opentelemetry::trace::Span> span)
66+
: span_(std::move(span))
67+
{
68+
}
6369

64-
private:
65-
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span_;
66-
};
70+
otel_request_span::~otel_request_span()
71+
{
72+
span_->End();
73+
}
6774

68-
} // namespace
75+
auto
76+
otel_request_span::wrap(std::shared_ptr<opentelemetry::trace::Span> span)
77+
-> std::shared_ptr<otel_request_span>
78+
{
79+
return std::make_shared<otel_request_span>(span);
80+
}
6981

7082
class otel_request_tracer_impl
7183
{
@@ -80,15 +92,32 @@ class otel_request_tracer_impl
8092
{
8193
}
8294

95+
explicit otel_request_tracer_impl(std::shared_ptr<opentelemetry::trace::Tracer> tracer)
96+
: tracer_{ std::move(tracer) }
97+
{
98+
}
99+
83100
private:
84-
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
101+
std::shared_ptr<opentelemetry::trace::Tracer> tracer_;
85102
};
86103

87104
otel_request_tracer::otel_request_tracer()
88105
: impl_{ std::make_unique<otel_request_tracer_impl>() }
89106
{
90107
}
91108

109+
otel_request_tracer::otel_request_tracer(std::shared_ptr<opentelemetry::trace::Tracer> tracer)
110+
: impl_{ std::make_unique<otel_request_tracer_impl>(std::move(tracer)) }
111+
{
112+
}
113+
114+
auto
115+
otel_request_tracer::wrap(std::shared_ptr<opentelemetry::trace::Tracer> tracer)
116+
-> std::shared_ptr<otel_request_tracer>
117+
{
118+
return std::make_shared<couchbase::core::tracing::otel_request_tracer>(std::move(tracer));
119+
}
120+
92121
otel_request_tracer::~otel_request_tracer() = default;
93122

94123
auto
@@ -100,9 +129,9 @@ otel_request_tracer::start_span(std::string name,
100129
if (wrapped_parent) {
101130
opentelemetry::trace::StartSpanOptions opts;
102131
opts.parent = wrapped_parent->wrapped_span()->GetContext();
103-
return std::make_shared<otel_request_span>(impl_->tracer_->StartSpan(name, opts));
132+
return otel_request_span::wrap(impl_->tracer_->StartSpan(name, opts));
104133
}
105-
return std::make_shared<otel_request_span>(impl_->tracer_->StartSpan(name));
134+
return otel_request_span::wrap(impl_->tracer_->StartSpan(name));
106135
}
107136

108137
} // namespace couchbase::core::tracing

core/tracing/otel_tracer.hxx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,51 @@
1919

2020
#include <couchbase/tracing/request_tracer.hxx>
2121

22+
#include <opentelemetry/version.h>
23+
24+
OPENTELEMETRY_BEGIN_NAMESPACE
25+
namespace trace
26+
{
27+
class Tracer;
28+
class Span;
29+
} // namespace trace
30+
OPENTELEMETRY_END_NAMESPACE
31+
2232
namespace couchbase::core::tracing
2333
{
2434

35+
class otel_request_span : public couchbase::tracing::request_span
36+
{
37+
public:
38+
static auto wrap(std::shared_ptr<opentelemetry::trace::Span> span)
39+
-> std::shared_ptr<otel_request_span>;
40+
41+
explicit otel_request_span(std::shared_ptr<opentelemetry::trace::Span> span);
42+
~otel_request_span() override;
43+
otel_request_span(const otel_request_span&) = delete;
44+
otel_request_span(otel_request_span&&) = delete;
45+
auto operator=(const otel_request_span&) -> otel_request_span& = delete;
46+
auto operator=(otel_request_span&&) -> otel_request_span& = delete;
47+
48+
void add_tag(const std::string& name, const std::string& value) override;
49+
void add_tag(const std::string& name, std::uint64_t value) override;
50+
void end() override;
51+
auto wrapped_span() -> std::shared_ptr<opentelemetry::trace::Span>;
52+
53+
private:
54+
std::shared_ptr<opentelemetry::trace::Span> span_;
55+
};
56+
2557
class otel_request_tracer_impl;
2658

2759
class otel_request_tracer : public couchbase::tracing::request_tracer
2860
{
2961
public:
62+
static auto wrap(std::shared_ptr<opentelemetry::trace::Tracer> tracer)
63+
-> std::shared_ptr<otel_request_tracer>;
64+
3065
otel_request_tracer();
66+
explicit otel_request_tracer(std::shared_ptr<opentelemetry::trace::Tracer> tracer);
3167
otel_request_tracer(const otel_request_tracer&) = delete;
3268
otel_request_tracer(otel_request_tracer&&) noexcept = default;
3369
auto operator=(const otel_request_tracer&) = delete;

couchbase/error_context.hxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public:
3939
[[nodiscard]] auto to_json(
4040
error_context_json_format format = error_context_json_format::compact) const -> std::string;
4141

42+
[[nodiscard]] auto to_attributes(
43+
error_context_json_format format = error_context_json_format::compact) const -> std::string;
44+
4245
[[nodiscard]] auto impl() const -> std::shared_ptr<internal_error_context>;
4346

4447
private:

tools/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ target_link_libraries(
4242
hdr_histogram_static
4343
asio
4444
opentelemetry_trace
45-
opentelemetry_exporter_otlp_http)
45+
opentelemetry_exporter_otlp_http
46+
opentelemetry_exporter_otlp_http_log)
4647

4748
if(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL AND WIN32)
4849
# Ignore the `LNK4099: PDB ['crypto.pdb'|'ssl.pdb'] was not found` warnings, as we don't (atm) keep track fo the *.PDB

0 commit comments

Comments
 (0)