diff --git a/tasks/todo.md b/tasks/todo.md deleted file mode 100644 index 88342fc11b..0000000000 --- a/tasks/todo.md +++ /dev/null @@ -1,78 +0,0 @@ -# OpenTelemetry Implementation - -## POC Tasks (Phase 1 - Core Infrastructure) - -- [x] Write plan to tasks/todo.md -- [x] Task 0: Create Docker observability stack (docker-compose, otel-collector-config, grafana datasource) -- [x] Task 1: Add OpenTelemetry C++ SDK dependency (conanfile.py + CMakeLists.txt + XrplCore.cmake) -- [x] Task 2: Create Core Telemetry interface (Telemetry.h, SpanGuard.h, NullTelemetry.cpp) -- [x] Task 3: Implement OTel-backed TelemetryImpl and TelemetryConfig -- [x] Task 5: Create instrumentation macros (TracingInstrumentation.h) -- [x] Task 4: Integrate Telemetry into Application lifecycle (ServiceRegistry.h, Application.cpp, xrpld-example.cfg) -- [x] Task 6: Instrument RPC ServerHandler -- [x] Task 7: Instrument RPC command execution (RPCHandler) -- [ ] Task 8: Build, run, and verify end-to-end (manual) -- [ ] Task 9: Document POC results and next steps (manual) - -## Phase 2 Tasks (RPC Tracing Completion) - -- [x] Task 2.2: Add XRPL_TRACE_PEER and XRPL_TRACE_LEDGER macros -- [x] Task 2.3: Add shouldTraceLedger() to Telemetry interface + all implementations -- [x] Task 2.5: Enhanced RPC span attributes (duration_ms, error_message) -- [x] Task 2.4: Unit test for telemetry config parser (TelemetryConfig_test.cpp) -- [ ] Task 2.6: Build verification - -## Phase 3 Tasks (Transaction Tracing) — see OpenTelemetryPlan/Phase3_taskList.md -## Phase 4 Tasks (Consensus Tracing) — see OpenTelemetryPlan/Phase4_taskList.md -## Phase 5 Tasks (Documentation & Deployment) — see OpenTelemetryPlan/Phase5_taskList.md - -## Dependency Order -- Tasks 0, 1 (parallel, no deps) -- Tasks 2, 5 (parallel, after 1) -- Task 3 (after 1, 2) -- Task 4 (after 2, 3) -- Tasks 6, 7 (parallel, after 4, 5) - -## Key Design Decisions -- New CMake module: `add_module(xrpl telemetry)` in XrplCore.cmake -- `#ifdef XRPL_ENABLE_TELEMETRY` guards OTel SDK types in interface headers -- NullTelemetry always compiles; TelemetryImpl only when OTel SDK available -- Macros expand to `((void)0)` when disabled -- Section::value_or used for config parsing (matches existing patterns) -- getTelemetry() added to ServiceRegistry (not Application.h) since it's a service accessor - -## New Files Created -| File | Purpose | -|------|---------| -| docker/telemetry/docker-compose.yml | OTel Collector + Jaeger + Grafana stack | -| docker/telemetry/otel-collector-config.yaml | Collector receivers/processors/exporters | -| docker/telemetry/grafana/provisioning/datasources/jaeger.yaml | Grafana Jaeger datasource | -| include/xrpl/telemetry/Telemetry.h | Abstract Telemetry interface + Setup struct | -| include/xrpl/telemetry/SpanGuard.h | RAII span guard (OTel-enabled only) | -| src/libxrpl/telemetry/NullTelemetry.cpp | No-op implementation (always compiles) | -| src/libxrpl/telemetry/TelemetryConfig.cpp | Config parser (setup_Telemetry) | -| src/libxrpl/telemetry/Telemetry.cpp | OTel SDK implementation (OTel-enabled only) | -| src/xrpld/telemetry/TracingInstrumentation.h | XRPL_TRACE_* convenience macros | - -## Modified Files -| File | Changes | -|------|---------| -| conanfile.py | Added `telemetry` option + opentelemetry-cpp dependency | -| CMakeLists.txt | Added `telemetry` option + find_package + compile definition | -| cmake/XrplCore.cmake | Added `telemetry` module + conditional OTel linking | -| include/xrpl/core/ServiceRegistry.h | Added getTelemetry() pure virtual + forward decl | -| src/xrpld/app/main/Application.cpp | Added telemetry_ member, init, start/stop, accessor | -| src/xrpld/rpc/detail/ServerHandler.cpp | Added XRPL_TRACE_RPC to onRequest, processRequest, WS | -| src/xrpld/rpc/detail/RPCHandler.cpp | Added per-command tracing in callMethod | -| cfg/xrpld-example.cfg | Added [telemetry] config section documentation | - -## Expected Trace Hierarchy -``` -rpc.request (HTTP entry point - ServerHandler::onRequest) - └── rpc.process (ServerHandler::processRequest) - └── rpc.command. (RPCHandler::callMethod) - xrpl.rpc.command = "account_info" - xrpl.rpc.version = 2 - xrpl.rpc.role = "user" - xrpl.rpc.status = "success" -```