diff --git a/src/libxrpl/beast/insight/OTelCollector.cpp b/src/libxrpl/beast/insight/OTelCollector.cpp index 5ce716118c..1b608ba5c8 100644 --- a/src/libxrpl/beast/insight/OTelCollector.cpp +++ b/src/libxrpl/beast/insight/OTelCollector.cpp @@ -56,6 +56,7 @@ #include #include +#include #include #include #include @@ -490,8 +491,8 @@ public: * @param name Raw metric name from beast::insight callers. * @return Fully-qualified metric name. */ - std::string - formatName(std::string const& name) const; + static std::string + formatName(std::string const& name); private: /** Journal for log output. */ @@ -821,7 +822,7 @@ OTelCollectorImp::otelMeter() const } std::string -OTelCollectorImp::formatName(std::string const& name) const +OTelCollectorImp::formatName(std::string const& name) { // Produce a clean, lowercase, Prometheus-compatible metric name. // No prefix — the OTel resource (service.name) identifies the service. @@ -831,9 +832,13 @@ OTelCollectorImp::formatName(std::string const& name) const for (char const c : name) { if (c == '.' || c == ' ') + { result += '_'; + } else + { result += static_cast(std::tolower(static_cast(c))); + } } return result; } diff --git a/src/libxrpl/telemetry/Telemetry.cpp b/src/libxrpl/telemetry/Telemetry.cpp index c9376a806b..293e2b57a9 100644 --- a/src/libxrpl/telemetry/Telemetry.cpp +++ b/src/libxrpl/telemetry/Telemetry.cpp @@ -535,8 +535,10 @@ public: getMeter(std::string_view name = kMeterName) override { if (!meterProvider_) + { return metrics_api::Provider::GetMeterProvider()->GetMeter( std::string(name), std::string(kMeterVersion)); + } return meterProvider_->GetMeter(std::string(name), std::string(kMeterVersion)); } diff --git a/src/tests/libxrpl/telemetry/GetMeter.cpp b/src/tests/libxrpl/telemetry/GetMeter.cpp index b69920fdeb..f19f18cbee 100644 --- a/src/tests/libxrpl/telemetry/GetMeter.cpp +++ b/src/tests/libxrpl/telemetry/GetMeter.cpp @@ -17,18 +17,18 @@ #ifdef XRPL_ENABLE_TELEMETRY +#include #include #include -#include #include #include -#include #include #include #include #include +#include #include using namespace xrpl; @@ -85,7 +85,7 @@ TEST(GetMeter, global_provider_meter_accepts_updown_counter) // A views-less SDK MeterProvider with no reader is sufficient to prove the // API contract: it hands out a real (non-noop) Meter that creates working // instruments. No exporter/reader means no background threads or network. - std::shared_ptr sdkProvider = + std::shared_ptr const sdkProvider = metrics_sdk::MeterProviderFactory::Create(); metrics_api::Provider::SetMeterProvider( opentelemetry::nostd::shared_ptr(sdkProvider)); diff --git a/src/tests/libxrpl/telemetry/ValidationTracker.cpp b/src/tests/libxrpl/telemetry/ValidationTracker.cpp index 7a5179c871..f3d80d7420 100644 --- a/src/tests/libxrpl/telemetry/ValidationTracker.cpp +++ b/src/tests/libxrpl/telemetry/ValidationTracker.cpp @@ -176,7 +176,7 @@ TEST_F(ValidationTrackerTest, MaxPendingEventsTrimming) for (std::size_t i = 0; i < kCount; ++i) { auto const hash = makeHash(i + 1); - LedgerIndex const seq = static_cast(i + 1); + auto const seq = static_cast(i + 1); tracker_.recordOurValidation(hash, seq); tracker_.recordNetworkValidation(hash, seq); } diff --git a/src/xrpld/telemetry/ValidationTracker.h b/src/xrpld/telemetry/ValidationTracker.h index dac2f9c706..08b8d04f49 100644 --- a/src/xrpld/telemetry/ValidationTracker.h +++ b/src/xrpld/telemetry/ValidationTracker.h @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/src/xrpld/telemetry/detail/ValidationTracker.cpp b/src/xrpld/telemetry/detail/ValidationTracker.cpp index 17ec00fde3..2385d18ec1 100644 --- a/src/xrpld/telemetry/detail/ValidationTracker.cpp +++ b/src/xrpld/telemetry/detail/ValidationTracker.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace xrpl::telemetry { @@ -255,11 +256,11 @@ void ValidationTracker::repairWindowEntry(std::deque& window, uint256 const& hash) { // Scan backwards since late repairs target recently added entries. - for (auto it = window.rbegin(); it != window.rend(); ++it) + for (auto& event : std::views::reverse(window)) { - if (!it->agreed && it->ledgerHash == hash) + if (!event.agreed && event.ledgerHash == hash) { - it->agreed = true; + event.agreed = true; return; } }