Skip to content

Commit a713385

Browse files
committed
Use OpenTelemetry in the tools
1 parent 9017147 commit a713385

File tree

11 files changed

+487
-50
lines changed

11 files changed

+487
-50
lines changed

.github/workflows/columnar.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Install build environment
2424
run: |
2525
sudo apt-get update -y
26-
sudo apt-get install -y libssl-dev cmake gcc g++ curl gdb
26+
sudo apt-get install -y libssl-dev cmake gcc g++ curl gdb libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb
2727
- uses: actions/checkout@v4
2828
with:
2929
submodules: recursive

.github/workflows/linters.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
- name: Install dependencies
4949
run: |
5050
sudo apt-get update -y
51-
sudo apt-get install -y libssl-dev cmake curl wget gnupg2
51+
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb
5252
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor --output /etc/apt/keyrings/llvm-snapshot.gpg
5353
sudo bash -c "echo 'deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] https://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main' >> /etc/apt/sources.list"
5454
sudo apt-get update -y
@@ -75,7 +75,7 @@ jobs:
7575
- name: Install dependencies
7676
run: |
7777
sudo apt-get update -y
78-
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 cppcheck
78+
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 clang clang-tools cppcheck libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb
7979
- name: Run cppcheck
8080
run: ./bin/check-cppcheck
8181

@@ -88,7 +88,7 @@ jobs:
8888
- name: Install dependencies
8989
run: |
9090
sudo apt-get update -y
91-
sudo apt-get install -y libssl-dev cmake curl wget gnupg2
91+
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 clang clang-tools clang-tidy libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb
9292
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor --output /etc/apt/keyrings/llvm-snapshot.gpg
9393
sudo bash -c "echo 'deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] https://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main' >> /etc/apt/sources.list"
9494
sudo apt-get update -y

.github/workflows/sanitizers.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
- name: Install dependencies
3232
run: |
3333
sudo apt-get update -y
34-
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 gdb clang clang-tools valgrind
34+
sudo apt-get install -y libssl-dev cmake curl wget gnupg2 libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb clang clang-tools valgrind
3535
- uses: actions/checkout@v4
3636
with:
3737
submodules: recursive

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- name: Install dependencies
2727
run: |
2828
sudo apt-get update -y
29-
sudo apt-get install -y libssl-dev cmake gcc g++ curl gdb
29+
sudo apt-get install -y libssl-dev cmake gcc g++ curl libcurl4-openssl-dev libprotobuf-dev libgrpc-dev gdb
3030
- uses: actions/checkout@v4
3131
with:
3232
submodules: recursive

cmake/ThirdPartyDependencies.cmake

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,32 @@ if(NOT TARGET spdlog::spdlog)
3939
"SPDLOG_FMT_EXTERNAL OFF")
4040
endif()
4141

42+
if(NOT TARGET opentelemetry)
43+
# https://github.com/open-telemetry/opentelemetry-cpp/releases
44+
cpmaddpackage(
45+
NAME
46+
opentelemetry
47+
VERSION
48+
1.20.0
49+
GITHUB_REPOSITORY
50+
"open-telemetry/opentelemetry-cpp"
51+
EXCLUDE_FROM_ALL ON
52+
OPTIONS
53+
"OPENTELEMETRY_INSTALL OFF"
54+
"WITH_ABI_VERSION_1 OFF"
55+
"WITH_ABI_VERSION_2 ON"
56+
"WITH_STL ON"
57+
"WITH_ABSEIL OFF"
58+
"WITH_OTLP_HTTP ON"
59+
"WITH_OTLP_GRPC OFF"
60+
"WITH_BENCHMARK OFF"
61+
"BUILD_TESTING OFF"
62+
"BUILD_SHARED_LIBS OFF"
63+
"CMAKE_C_VISIBILITY_PRESET hidden"
64+
"CMAKE_CXX_VISIBILITY_PRESET hidden"
65+
"CMAKE_POSITION_INDEPENDENT_CODE ON")
66+
endif()
67+
4268
if(NOT TARGET Microsoft.GSL::GSL)
4369
# https://github.com/microsoft/GSL/releases
4470
cpmaddpackage(

couchbase/metrics/otel_meter.hxx

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,26 @@
1717

1818
#pragma once
1919

20-
#include "opentelemetry/sdk/metrics/meter.h"
2120
#include <couchbase/metrics/meter.hxx>
2221

22+
#include <opentelemetry/context/context.h>
23+
#include <opentelemetry/metrics/meter.h>
24+
#include <opentelemetry/metrics/sync_instruments.h>
25+
2326
#include <algorithm>
24-
#include <iostream>
25-
#include <thread>
27+
#include <mutex>
2628
#include <utility>
2729

28-
using couchbase::metrics::meter;
29-
using couchbase::metrics::value_recorder;
30-
31-
namespace nostd = opentelemetry::nostd;
32-
namespace metrics_api = opentelemetry::metrics;
33-
namespace metrics_sdk = opentelemetry::sdk::metrics;
34-
3530
namespace couchbase::metrics
3631
{
3732

3833
class otel_sync_histogram
3934
{
4035
public:
41-
otel_sync_histogram(nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter)
42-
: histogram_counter_(histogram_counter)
36+
explicit otel_sync_histogram(
37+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>
38+
histogram_counter)
39+
: histogram_counter_{ std::move(histogram_counter) }
4340
{
4441
}
4542

@@ -51,17 +48,19 @@ public:
5148
}
5249

5350
private:
54-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
51+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>
52+
histogram_counter_;
5553
std::mutex mutex_;
5654
};
5755

5856
class otel_value_recorder : public couchbase::metrics::value_recorder
5957
{
6058
public:
6159
explicit otel_value_recorder(
62-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter,
60+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>
61+
histogram_counter,
6362
const std::map<std::string, std::string>& tags)
64-
: histogram_counter_(histogram_counter)
63+
: histogram_counter_{ std::move(histogram_counter) }
6564
, tags_(tags)
6665
{
6766
}
@@ -73,18 +72,20 @@ public:
7372
uvalue, opentelemetry::common::KeyValueIterableView<decltype(tags_)>{ tags_ }, context_);
7473
}
7574

76-
const std::map<std::string, std::string> tags()
75+
[[nodiscard]] auto tags() const -> const std::map<std::string, std::string>&
7776
{
7877
return tags_;
7978
}
8079

81-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter()
80+
auto histogram_counter()
81+
-> opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>
8282
{
8383
return histogram_counter_;
8484
}
8585

8686
private:
87-
nostd::shared_ptr<metrics_api::Histogram<std::uint64_t>> histogram_counter_;
87+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Histogram<std::uint64_t>>
88+
histogram_counter_;
8889
const std::map<std::string, std::string> tags_;
8990
opentelemetry::context::Context context_{};
9091
std::mutex mutex_;
@@ -93,8 +94,8 @@ private:
9394
class otel_meter : public couchbase::metrics::meter
9495
{
9596
public:
96-
explicit otel_meter(nostd::shared_ptr<metrics_api::Meter> meter)
97-
: meter_(meter)
97+
explicit otel_meter(opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter)
98+
: meter_{ std::move(meter) }
9899
{
99100
}
100101

@@ -132,7 +133,7 @@ public:
132133
}
133134

134135
private:
135-
nostd::shared_ptr<metrics_api::Meter> meter_;
136+
opentelemetry::nostd::shared_ptr<opentelemetry::metrics::Meter> meter_;
136137
std::mutex mutex_;
137138
std::multimap<std::string, std::shared_ptr<otel_value_recorder>> recorders_;
138139
};

couchbase/tracing/otel_tracer.hxx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,15 @@
1818
#pragma once
1919

2020
#include <couchbase/tracing/request_tracer.hxx>
21-
#include <opentelemetry/exporters/ostream/span_exporter.h>
22-
#include <opentelemetry/sdk/trace/simple_processor.h>
23-
#include <opentelemetry/sdk/trace/tracer_provider.h>
21+
2422
#include <opentelemetry/trace/tracer.h>
2523

26-
namespace nostd = opentelemetry::nostd;
2724
namespace couchbase::tracing
2825
{
2926
class otel_request_span : public couchbase::tracing::request_span
3027
{
3128
public:
32-
explicit otel_request_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
29+
explicit otel_request_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
3330
: span_(std::move(span))
3431
{
3532
}
@@ -45,24 +42,25 @@ public:
4542
{
4643
span_->End();
4744
}
48-
nostd::shared_ptr<opentelemetry::trace::Span> wrapped_span()
45+
auto wrapped_span() -> opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span>
4946
{
5047
return span_;
5148
}
5249

5350
private:
54-
nostd::shared_ptr<opentelemetry::trace::Span> span_;
51+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span_;
5552
};
5653

5754
class otel_request_tracer : public couchbase::tracing::request_tracer
5855
{
5956
public:
60-
otel_request_tracer(nostd::shared_ptr<opentelemetry::trace::Tracer> tracer)
57+
explicit otel_request_tracer(
58+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer)
6159
: tracer_(std::move(tracer))
6260
{
6361
}
6462

65-
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent = {})
63+
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent)
6664
-> std::shared_ptr<couchbase::tracing::request_span> override
6765
{
6866
auto wrapped_parent = std::dynamic_pointer_cast<otel_request_span>(parent);
@@ -74,13 +72,13 @@ public:
7472
return std::make_shared<otel_request_span>(tracer_->StartSpan(name));
7573
}
7674

77-
auto wrap_span(nostd::shared_ptr<opentelemetry::trace::Span> span)
75+
auto wrap_span(opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span> span)
7876
-> std::shared_ptr<couchbase::tracing::otel_request_span>
7977
{
80-
return std::make_shared<couchbase::tracing::otel_request_span>(span);
78+
return std::make_shared<couchbase::tracing::otel_request_span>(std::move(span));
8179
}
8280

8381
private:
84-
nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
82+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
8583
};
86-
} // namespace couchbase::tracing
84+
} // namespace couchbase::tracing

tools/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ target_link_libraries(
4646
$<BUILD_INTERFACE:taocpp::json>
4747
$<BUILD_INTERFACE:spdlog::spdlog>
4848
$<BUILD_INTERFACE:hdr_histogram_static>
49-
$<BUILD_INTERFACE:asio>)
49+
$<BUILD_INTERFACE:asio>
50+
$<BUILD_INTERFACE:opentelemetry_exporter_otlp_http>
51+
$<BUILD_INTERFACE:opentelemetry_exporter_otlp_http_metric>
52+
)
5053
propagate_public_compile_definitions(cbc spdlog::spdlog asio)
5154

5255
if(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL AND WIN32)

tools/get.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "utils.hxx"
2020

2121
#include <core/logger/logger.hxx>
22+
2223
#include <couchbase/cluster.hxx>
2324
#include <couchbase/codec/raw_binary_transcoder.hxx>
2425
#include <couchbase/codec/tao_json_serializer.hxx>

0 commit comments

Comments
 (0)