fix(telemetry): use underscore attr names and SpanNames constants in Phase 4

- tempo.yaml: align consensus filter tags with emitted keys
  (consensus_mode, consensus_round, ledger_seq) instead of dotted form
- haveConsensus(): set span attributes before early-return paths so the
  consensus.check span carries diagnostics even when consensus is not reached
- replace hardcoded consensus phase/result/vote literals with
  ConsensusSpanNames.h val constants; add val::phaseOpen/Establish/Accepted
- ConsensusReceiveTracing.h: use canonical consensus::span constants instead
  of duplicate inline detail:: names
- SpanGuardFactory test: use rpc_span / consensus::span constants now that
  levelization permits the dependency

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Pratik Mankawde
2026-06-10 17:07:10 +01:00
parent 4a0994209e
commit ffc197b914
10 changed files with 93 additions and 73 deletions

View File

@@ -1,12 +1,13 @@
#include <xrpld/consensus/ConsensusSpanNames.h>
#include <xrpld/rpc/detail/RpcSpanNames.h>
#include <xrpl/telemetry/SpanGuard.h>
#include <xrpl/telemetry/SpanNames.h>
#include <gtest/gtest.h>
#include <cstdint>
#include <exception>
#include <stdexcept>
#include <string>
#include <utility>
using namespace xrpl;
@@ -30,8 +31,8 @@ TEST(SpanGuardFactory, category_span_returns_null_when_disabled)
auto span = SpanGuard::span(TraceCategory::Rpc, "rpc", "test");
EXPECT_FALSE(span);
span.setAttribute("xrpl.rpc.command", "test");
span.setAttribute("xrpl.rpc.status", "success");
span.setAttribute(rpc_span::attr::command, "test");
span.setAttribute(rpc_span::attr::rpcStatus, rpc_span::val::success);
}
TEST(SpanGuardFactory, child_span_null_when_no_parent)
@@ -87,21 +88,22 @@ TEST(SpanGuardFactory, consensus_close_time_attributes)
{
// Verify the consensus attribute pattern compiles and
// doesn't crash with null SpanGuard.
namespace cs = consensus::span;
{
auto span = telemetry::SpanGuard::span(
telemetry::TraceCategory::Consensus, telemetry::seg::consensus, "accept.apply");
span.setAttribute("xrpl.consensus.ledger.seq", static_cast<int64_t>(42));
span.setAttribute("xrpl.consensus.close_time", static_cast<int64_t>(780000000));
span.setAttribute("xrpl.consensus.close_time_correct", true);
span.setAttribute("xrpl.consensus.close_resolution_ms", static_cast<int64_t>(30000));
span.setAttribute("xrpl.consensus.state", std::string("finished"));
span.setAttribute("xrpl.consensus.proposing", true);
span.setAttribute("xrpl.consensus.round_time_ms", static_cast<int64_t>(3500));
telemetry::TraceCategory::Consensus, telemetry::seg::consensus, cs::op::acceptApply);
span.setAttribute(cs::attr::ledgerSeq, static_cast<int64_t>(42));
span.setAttribute(cs::attr::closeTime, static_cast<int64_t>(780000000));
span.setAttribute(cs::attr::closeTimeCorrect, true);
span.setAttribute(cs::attr::closeResolutionMs, static_cast<int64_t>(30000));
span.setAttribute(cs::attr::consensusState, cs::val::finished);
span.setAttribute(cs::attr::proposing, true);
span.setAttribute(cs::attr::roundTimeMs, static_cast<int64_t>(3500));
}
{
auto span = telemetry::SpanGuard::span(
telemetry::TraceCategory::Consensus, telemetry::seg::consensus, "accept.apply");
span.setAttribute("xrpl.consensus.close_time_correct", false);
span.setAttribute("xrpl.consensus.state", std::string("moved_on"));
telemetry::TraceCategory::Consensus, telemetry::seg::consensus, cs::op::acceptApply);
span.setAttribute(cs::attr::closeTimeCorrect, false);
span.setAttribute(cs::attr::consensusState, cs::val::movedOn);
}
}

View File

@@ -1,5 +1,5 @@
#include <xrpl/basics/BasicConfig.h>
#include <xrpl/beast/utility/Journal.h>
#include <xrpl/config/BasicConfig.h>
#include <xrpl/telemetry/Telemetry.h>
#include <gtest/gtest.h>