From c157253372b26e153c9e883caf9c97a9b2611ff2 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 29 May 2026 18:51:47 +0100 Subject: [PATCH 1/3] activate telemetry by default and fix clang-tidy issues. Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- CMakeLists.txt | 2 +- conanfile.py | 2 +- src/libxrpl/telemetry/NullTelemetry.cpp | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ffa9ce3947..5a0ac32b92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,7 +122,7 @@ endif() # so that tracing macros in TracingInstrumentation.h are compiled in. # When OFF (default), all tracing code compiles to no-ops with zero overhead. # Enable via: conan install -o telemetry=True, or cmake -Dtelemetry=ON. -option(telemetry "Enable OpenTelemetry tracing" OFF) +option(telemetry "Enable OpenTelemetry tracing" ON) if(telemetry) find_package(opentelemetry-cpp CONFIG REQUIRED) add_compile_definitions(XRPL_ENABLE_TELEMETRY) diff --git a/conanfile.py b/conanfile.py index 36b50e4b4e..951ce41135 100644 --- a/conanfile.py +++ b/conanfile.py @@ -54,7 +54,7 @@ class Xrpl(ConanFile): "rocksdb": True, "shared": False, "static": True, - "telemetry": False, + "telemetry": True, "tests": False, "unity": False, "xrpld": False, diff --git a/src/libxrpl/telemetry/NullTelemetry.cpp b/src/libxrpl/telemetry/NullTelemetry.cpp index 7cbfd24019..812220acdb 100644 --- a/src/libxrpl/telemetry/NullTelemetry.cpp +++ b/src/libxrpl/telemetry/NullTelemetry.cpp @@ -10,12 +10,16 @@ its own factory that can return the real TelemetryImpl. */ +#include #include -#include +#include +#include #ifdef XRPL_ENABLE_TELEMETRY #include + +#include #endif namespace xrpl::telemetry { From e321f294e562c1d4d69e0a51db5e5890d4b0ca3f Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 29 May 2026 19:21:37 +0100 Subject: [PATCH 2/3] clang issues Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- OpenTelemetryPlan/04-code-samples.md | 4 ++-- OpenTelemetryPlan/05-configuration-reference.md | 12 ++++++------ OpenTelemetryPlan/POC_taskList.md | 14 +++++++------- OpenTelemetryPlan/Phase2_taskList.md | 2 +- docs/build/telemetry.md | 2 +- src/tests/libxrpl/telemetry/TelemetryConfig.cpp | 12 +++++------- 6 files changed, 22 insertions(+), 24 deletions(-) diff --git a/OpenTelemetryPlan/04-code-samples.md b/OpenTelemetryPlan/04-code-samples.md index d4d5c0bdc0..d242de1764 100644 --- a/OpenTelemetryPlan/04-code-samples.md +++ b/OpenTelemetryPlan/04-code-samples.md @@ -165,12 +165,12 @@ public: // Factory functions std::unique_ptr -make_Telemetry( +makeTelemetry( Telemetry::Setup const& setup, beast::Journal journal); Telemetry::Setup -setup_Telemetry( +setupTelemetry( Section const& section, std::string const& nodePublicKey, std::string const& version); diff --git a/OpenTelemetryPlan/05-configuration-reference.md b/OpenTelemetryPlan/05-configuration-reference.md index ff7f21e913..78df60e2b3 100644 --- a/OpenTelemetryPlan/05-configuration-reference.md +++ b/OpenTelemetryPlan/05-configuration-reference.md @@ -118,7 +118,7 @@ namespace xrpl { namespace telemetry { Telemetry::Setup -setup_Telemetry( +setupTelemetry( Section const& section, std::string const& nodePublicKey, std::string const& version) @@ -203,8 +203,8 @@ class ApplicationImp : public Application, public BasicApp // Member initializer list (excerpt): // ... // , telemetry_( - // telemetry::make_Telemetry( - // telemetry::setup_Telemetry( + // telemetry::makeTelemetry( + // telemetry::setupTelemetry( // config_->section("telemetry"), // "", // Updated later via setServiceInstanceId() // BuildInfo::getVersionString()), @@ -617,8 +617,8 @@ flowchart TB end subgraph init["Initialization"] - parse["setup_Telemetry()"] - factory["make_Telemetry()"] + parse["setupTelemetry()"] + factory["makeTelemetry()"] end subgraph runtime["Runtime Components"] @@ -651,7 +651,7 @@ flowchart TB **Reading the diagram:** - **Configuration Sources**: `xrpld.cfg` provides runtime settings (endpoint, sampling) while the CMake flag controls whether telemetry is compiled in at all. -- **Initialization**: `setup_Telemetry()` parses config values, then `make_Telemetry()` constructs the provider, processor, and exporter objects. +- **Initialization**: `setupTelemetry()` parses config values, then `makeTelemetry()` constructs the provider, processor, and exporter objects. - **Runtime Components**: The `TracerProvider` creates spans, the `BatchProcessor` buffers them, and the `OTLP Exporter` serializes and sends them over the wire. - **OTLP arrow to Collector**: Trace data leaves the xrpld process via OTLP (gRPC or HTTP) and enters the external Collector pipeline. - **Collector Pipeline**: `Receivers` ingest OTLP data, `Processors` apply sampling/filtering/enrichment, and `Exporters` forward traces to storage backends (Tempo, etc.). diff --git a/OpenTelemetryPlan/POC_taskList.md b/OpenTelemetryPlan/POC_taskList.md index ef9ea332c1..112c0359fe 100644 --- a/OpenTelemetryPlan/POC_taskList.md +++ b/OpenTelemetryPlan/POC_taskList.md @@ -143,8 +143,8 @@ - `virtual bool shouldTraceRpc() const = 0;` - `virtual bool shouldTraceTransactions() const = 0;` - `virtual bool shouldTraceConsensus() const = 0;` - - Factory: `std::unique_ptr make_Telemetry(Setup const&, beast::Journal);` - - Config parser: `Telemetry::Setup setup_Telemetry(Section const&, std::string const& nodePublicKey, std::string const& version);` + - Factory: `std::unique_ptr makeTelemetry(Setup const&, beast::Journal);` + - Config parser: `Telemetry::Setup setupTelemetry(Section const&, std::string const& nodePublicKey, std::string const& version);` - Create `include/xrpl/telemetry/SpanGuard.h`: - RAII guard with static factory methods (`rpcSpan()`, `txSpan()`, `consensusSpan()`, etc.) that access the global `Telemetry::getInstance()` singleton internally. @@ -196,10 +196,10 @@ - `shouldTraceRpc()` etc. read from `Setup` fields - Create `src/libxrpl/telemetry/TelemetryConfig.cpp`: - - `setup_Telemetry()` parses the `[telemetry]` config section from `xrpld.cfg` + - `setupTelemetry()` parses the `[telemetry]` config section from `xrpld.cfg` - Maps config keys: `enabled`, `exporter`, `endpoint`, `sampling_ratio`, `trace_rpc`, `trace_transactions`, `trace_consensus`, `trace_peer` -- Wire `make_Telemetry()` factory: +- Wire `makeTelemetry()` factory: - If `setup.enabled` is true AND `XRPL_ENABLE_TELEMETRY` is defined: return `TelemetryImpl` - Otherwise: return `NullTelemetry` @@ -217,7 +217,7 @@ **Reference**: - [04-code-samples.md §4.1](./04-code-samples.md) — `Telemetry` interface that `TelemetryImpl` must implement -- [05-configuration-reference.md §5.2](./05-configuration-reference.md) — `setup_Telemetry()` config parser implementation +- [05-configuration-reference.md §5.2](./05-configuration-reference.md) — `setupTelemetry()` config parser implementation - [02-design-decisions.md §2.2](./02-design-decisions.md) — OTLP/gRPC exporter config (endpoint, TLS options) - [02-design-decisions.md §2.4.1](./02-design-decisions.md) — Resource attributes: `service.name`, `service.version`, `service.instance.id`, `xrpl.network.id` - [03-implementation-strategy.md §3.4](./03-implementation-strategy.md) — Per-operation CPU costs and overhead budget for span creation @@ -242,8 +242,8 @@ `serviceInstanceId` (node identity is not yet known): ```cpp , telemetry_( - telemetry::make_Telemetry( - telemetry::setup_Telemetry( + telemetry::makeTelemetry( + telemetry::setupTelemetry( config_->section("telemetry"), "", // Updated later via setServiceInstanceId() BuildInfo::getVersionString()), diff --git a/OpenTelemetryPlan/Phase2_taskList.md b/OpenTelemetryPlan/Phase2_taskList.md index 6b64210e6b..1d01a8165e 100644 --- a/OpenTelemetryPlan/Phase2_taskList.md +++ b/OpenTelemetryPlan/Phase2_taskList.md @@ -67,7 +67,7 @@ - `src/tests/libxrpl/telemetry/TelemetryConfig.cpp`: - Test Setup defaults (all fields have correct initial values) - - Test `setup_Telemetry` config parser (empty section, full section, edge cases) + - Test `setupTelemetry` config parser (empty section, full section, edge cases) - Test `samplingRatio` clamping (values outside 0.0-1.0) - `src/tests/libxrpl/telemetry/SpanGuardFactory.cpp`: diff --git a/docs/build/telemetry.md b/docs/build/telemetry.md index d71a752aee..ed585cb64f 100644 --- a/docs/build/telemetry.md +++ b/docs/build/telemetry.md @@ -258,7 +258,7 @@ The Conan package provides a single umbrella target | `include/xrpl/telemetry/SpanGuard.h` | RAII span guard with `discard()` for dropping unwanted spans | | `include/xrpl/telemetry/DiscardFlag.h` | Thread-local discard flag (zero-dependency header) | | `src/libxrpl/telemetry/Telemetry.cpp` | OTel SDK setup, `FilteringSpanProcessor`, provider lifecycle | -| `src/libxrpl/telemetry/TelemetryConfig.cpp` | Config parser (`setup_Telemetry()`) | +| `src/libxrpl/telemetry/TelemetryConfig.cpp` | Config parser (`setupTelemetry()`) | | `src/libxrpl/telemetry/NullTelemetry.cpp` | No-op implementation (used when disabled) | | `src/libxrpl/telemetry/SpanGuard.cpp` | Pimpl implementation for SpanGuard (all OTel types confined) | | `src/xrpld/rpc/detail/ServerHandler.cpp` | RPC entry point instrumentation | diff --git a/src/tests/libxrpl/telemetry/TelemetryConfig.cpp b/src/tests/libxrpl/telemetry/TelemetryConfig.cpp index 6ee77482f0..dc84bd937f 100644 --- a/src/tests/libxrpl/telemetry/TelemetryConfig.cpp +++ b/src/tests/libxrpl/telemetry/TelemetryConfig.cpp @@ -4,8 +4,6 @@ #include -#include - using namespace xrpl; TEST(TelemetryConfig, setup_defaults) @@ -34,7 +32,7 @@ TEST(TelemetryConfig, setup_defaults) TEST(TelemetryConfig, parse_empty_section) { Section const section; - auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 0); + auto setup = telemetry::setupTelemetry(section, "nHUtest123", "2.0.0", 0); EXPECT_FALSE(setup.enabled); EXPECT_EQ(setup.serviceName, "xrpld"); @@ -68,7 +66,7 @@ TEST(TelemetryConfig, parse_full_section) section.set("trace_peer", "1"); section.set("trace_ledger", "0"); - auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 1); + auto setup = telemetry::setupTelemetry(section, "nHUtest123", "2.0.0", 1); EXPECT_TRUE(setup.enabled); EXPECT_EQ(setup.serviceName, "my-rippled"); @@ -94,7 +92,7 @@ TEST(TelemetryConfig, null_telemetry_factory) beast::Journal::Sink& sink = beast::Journal::getNullSink(); beast::Journal const j(sink); - auto tel = telemetry::make_Telemetry(setup, j); + auto tel = telemetry::makeTelemetry(setup, j); EXPECT_TRUE(tel != nullptr); EXPECT_FALSE(tel->isEnabled()); EXPECT_FALSE(tel->shouldTraceRpc()); @@ -112,11 +110,11 @@ TEST(TelemetryConfig, sampling_ratio_clamped) { Section section; section.set("sampling_ratio", "2.5"); - auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 0); + auto setup = telemetry::setupTelemetry(section, "nHUtest123", "2.0.0", 0); EXPECT_DOUBLE_EQ(setup.samplingRatio, 1.0); Section section2; section2.set("sampling_ratio", "-0.5"); - auto setup2 = telemetry::setup_Telemetry(section2, "nHUtest123", "2.0.0", 0); + auto setup2 = telemetry::setupTelemetry(section2, "nHUtest123", "2.0.0", 0); EXPECT_DOUBLE_EQ(setup2.samplingRatio, 0.0); } From 5d1e3f207c3e4e6fdecfeae45e332f03b7684160 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:35:09 +0100 Subject: [PATCH 3/3] clang-tidy fixes Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- src/libxrpl/telemetry/SpanGuard.cpp | 3 ++- src/libxrpl/telemetry/Telemetry.cpp | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libxrpl/telemetry/SpanGuard.cpp b/src/libxrpl/telemetry/SpanGuard.cpp index 338ef1ede3..c189c0ec99 100644 --- a/src/libxrpl/telemetry/SpanGuard.cpp +++ b/src/libxrpl/telemetry/SpanGuard.cpp @@ -26,12 +26,13 @@ #include #include +#include #include #include #include -#include #include #include +#include #include #include diff --git a/src/libxrpl/telemetry/Telemetry.cpp b/src/libxrpl/telemetry/Telemetry.cpp index f1f9ccba14..5dd645e8b4 100644 --- a/src/libxrpl/telemetry/Telemetry.cpp +++ b/src/libxrpl/telemetry/Telemetry.cpp @@ -18,11 +18,15 @@ #include #include +#include #include #include +#include #include #include +#include +#include #include #include #include @@ -33,8 +37,15 @@ #include #include #include +#include +#include +#include +#include +#include #include +#include +#include #include #include #include @@ -82,7 +93,7 @@ namespace resource = opentelemetry::sdk::resource; */ class FilteringSpanProcessor : public trace_sdk::SpanProcessor { - std::unique_ptr delegate_{}; + std::unique_ptr delegate_; public: explicit FilteringSpanProcessor(std::unique_ptr delegate) @@ -240,7 +251,7 @@ class TelemetryImpl : public Telemetry Held as std::shared_ptr so we can call ForceFlush() on shutdown. Wrapped in a nostd::shared_ptr when registered as the global provider. */ - std::shared_ptr sdkProvider_{}; + std::shared_ptr sdkProvider_; public: TelemetryImpl(Setup setup, beast::Journal journal) : setup_(std::move(setup)), journal_(journal)