Skip to content

Commit b49fd2d

Browse files
author
user2
committed
Support tracing in SDK
1 parent 88690b0 commit b49fd2d

File tree

12 files changed

+234
-146
lines changed

12 files changed

+234
-146
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ option(YDB_SDK_EXAMPLES "Build YDB C++ SDK examples" On)
77
set(YDB_SDK_GOOGLE_COMMON_PROTOS_TARGET "" CACHE STRING "Name of cmake target preparing google common proto library")
88
option(YDB_SDK_USE_RAPID_JSON "Search for rapid json library in system" ON)
99

10+
option(YDB_SDK_TRACING "Enable tracing support" ON)
11+
1012
set(BUILD_SHARED_LIBS Off)
1113
set(CMAKE_CXX_STANDARD 20)
1214
set(CMAKE_CXX_STANDARD_REQUIRED On)

cmake/external_libs.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ find_package(jwt-cpp REQUIRED)
1515
find_package(GTest REQUIRED)
1616
find_package(double-conversion REQUIRED)
1717

18+
# OpenTelemetry
19+
if(YDB_SDK_TRACING)
20+
find_package(opentelemetry-cpp REQUIRED)
21+
endif()
22+
1823
# RapidJSON
1924
if (YDB_SDK_USE_RAPID_JSON)
2025
find_package(RapidJSON REQUIRED)
@@ -85,4 +90,4 @@ target_include_directories(nayuki_md5 PUBLIC
8590
$<INSTALL_INTERFACE:third_party/nayuki_md5>
8691
)
8792

88-
_ydb_sdk_install_targets(TARGETS nayuki_md5)
93+
_ydb_sdk_install_targets(TARGETS nayuki_md5)

examples/tracing/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
add_executable(tracing_example tracing_example.cpp)
2+
3+
if(YDB_SDK_TRACING)
4+
target_link_libraries(tracing_example PRIVATE
5+
ydb-cpp-sdk
6+
${OPENTELEMETRY_LIBRARIES}
7+
)
8+
else()
9+
target_link_libraries(tracing_example PRIVATE ydb-cpp-sdk)
10+
target_compile_definitions(tracing_example PRIVATE -DYDB_SDK_TRACING_DISABLED)
11+
endif()

examples/tracing/tracing_example.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,19 @@
44
#include <ydb-cpp-sdk/client/driver.h>
55

66
int main() {
7-
// 1. Настройка OpenTelemetry с экспортером в Jaeger
87
auto exporter = opentelemetry::exporter::jaeger::JaegerExporterFactory::Create();
98
auto provider = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(exporter));
10-
auto otel_tracer = provider->GetTracer("ydb-cpp-sdk");
9+
auto otelTracer = provider->GetTracer("ydb-cpp-sdk");
1110

12-
// 2. Создание адаптера для YDB SDK
13-
auto ydb_tracer = std::make_shared<NYdb::NTracing::TOpenTelemetryTracer>(otel_tracer);
11+
auto ydbTracer = std::make_shared<NYdb::NTracing::TOpenTelemetryTracer>(otelTracer);
1412

15-
// 3. Инициализация драйвера YDB с трейсером
1613
auto driver = NYdb::TDriver(
1714
NYdb::TDriverConfig()
18-
.SetEndpoint("grpc://localhost:2136")
15+
.SetEndpoint("localhost:2136")
1916
.SetDatabase("/local")
20-
.SetTracer(ydb_tracer)
17+
.SetTracer(ydbTracer)
2118
);
2219

23-
// 4. Тестовый запрос (спан создастся автоматически внутри SDK)
2420
auto client = NYdb::NTable::TTableClient(driver);
2521
auto session = client.CreateSession().GetValueSync();
2622
session.ExecuteDataQuery("SELECT 1", NYdb::NTable::TTxControl::BeginTx().CommitTx()).GetValueSync();

include/ydb-cpp-sdk/client/driver/driver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <ydb-cpp-sdk/client/types/fatal_error_handlers/handlers.h>
99
#include <ydb-cpp-sdk/client/types/request_settings.h>
1010
#include <ydb-cpp-sdk/client/types/status/status.h>
11+
#include <ydb-cpp-sdk/client/tracing/tracer.h>
1112

1213
#include <library/cpp/logger/backend.h>
1314

include/ydb-cpp-sdk/client/tracing/noop_tracer.h

Lines changed: 0 additions & 22 deletions
This file was deleted.

include/ydb-cpp-sdk/client/tracing/otel_tracer.h

Lines changed: 0 additions & 106 deletions
This file was deleted.

include/ydb-cpp-sdk/client/tracing/tracer.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ namespace NTracing {
99

1010
using TAttributeMap = std::unordered_map<std::string, std::string>;
1111

12-
// Контекст с идентификаторами трассировки
1312
class TTraceContext {
1413
public:
1514
TTraceContext(std::string traceId, std::string spanId, std::string parentSpanId = "")
@@ -22,13 +21,8 @@ class TTraceContext {
2221
const std::string& GetSpanId() const { return SpanId_; }
2322
const std::string& GetParentSpanId() const { return ParentSpanId_; }
2423

25-
// Генерация нового контекста (создает новые уникальные traceId и spanId)
2624
static std::shared_ptr<TTraceContext> GenerateNew();
27-
28-
// Создание дочернего контекста (новый spanId, тот же traceId)
2925
std::shared_ptr<TTraceContext> CreateChild() const;
30-
31-
// Формирование W3C traceparent ("00-traceId-spanId-01")
3226
std::string ToTraceParent() const;
3327

3428
private:
@@ -55,16 +49,13 @@ class ITracer {
5549
public:
5650
virtual ~ITracer() = default;
5751

58-
// Создать новый спан с именем, атрибутами и опциональным родительским контекстом
5952
virtual std::unique_ptr<ISpan> StartSpan(
6053
const std::string& name,
6154
const TAttributeMap& attributes = {},
6255
std::shared_ptr<TTraceContext> parentContext = nullptr) = 0;
6356

64-
// Получить текущий контекст
6557
virtual std::shared_ptr<TTraceContext> GetCurrentContext() const = 0;
6658

67-
// Получить W3C traceparent текущего контекста (если есть)
6859
virtual std::string GetCurrentTraceParent() const {
6960
if (auto ctx = GetCurrentContext()) {
7061
return ctx->ToTraceParent();

src/client/driver/driver.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <ydb-cpp-sdk/client/driver/driver.h>
2+
#include <ydb-cpp-sdk/client/tracing/tracer.h>
23

34
#define INCLUDE_YDB_INTERNAL_H
45
#include <src/client/impl/ydb_internal/driver/constants.h>
@@ -203,6 +204,11 @@ TDriverConfig& TDriverConfig::SetLog(std::unique_ptr<TLogBackend>&& log) {
203204
return *this;
204205
}
205206

207+
TDriverConfig& TDriverConfig::SetTracer(std::shared_ptr<NTracing::ITracer> tracer) {
208+
Impl_->Tracer_ = tracer ? tracer : std::make_shared<NTracing::TNoopTracer>();
209+
return *this;
210+
}
211+
206212
////////////////////////////////////////////////////////////////////////////////
207213

208214
std::shared_ptr<TGRpcConnectionsImpl> CreateInternalInterface(const TDriver connection) {

src/client/tracing/noop_tracer.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#pragma once
2+
3+
#include <ydb-cpp-sdk/client/tracing/tracer.h>
4+
5+
namespace NYdb::inline V3 {
6+
namespace NTracing {
7+
8+
class TNoopSpan : public ISpan {
9+
public:
10+
void AddAttribute(const std::string&, const std::string&) override {}
11+
void AddEvent(const std::string&, const TAttributeMap& = {}) override {}
12+
void SetStatus(bool, const std::string& = "") override {}
13+
void End() override {}
14+
15+
const TTraceContext& GetContext() const override {
16+
static TTraceContext emptyContext("", "");
17+
return emptyContext;
18+
}
19+
};
20+
21+
class TNoopTracer : public ITracer {
22+
public:
23+
std::unique_ptr<ISpan> StartSpan(
24+
const std::string&,
25+
const TAttributeMap& = {},
26+
std::shared_ptr<TTraceContext> = nullptr) override
27+
{
28+
return std::make_unique<TNoopSpan>();
29+
}
30+
31+
std::shared_ptr<TTraceContext> GetCurrentContext() const override {
32+
return nullptr;
33+
}
34+
};
35+
36+
} // namespace NTracing
37+
} // namespace NYdb

0 commit comments

Comments
 (0)