mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-04 17:27:00 +00:00
fix(telemetry): emit real diverged-peer count for peers_insane_count
The xrpld_peer_quality{metric="peers_insane_count"} gauge was hardcoded to 0.0
with a TODO, leaving the "Insane/Diverged Peers" panel permanently empty.
PeerImp::json() already exposes the peer's tracking state via the "track"
field (set to "diverged" when tracking_ == Tracking::Diverged). The peer-quality
callback already iterates peer->json() for latency and version, so count peers
whose "track" field equals "diverged" in the same loop — no change to the
abstract Peer interface required.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1000,10 +1000,12 @@ MetricsRegistry::registerPeerQualityGauge()
|
||||
->Observe(value, {{"metric", name}});
|
||||
};
|
||||
|
||||
// Collect latencies and version info from each peer's JSON.
|
||||
// Collect latencies, version info, and tracking state from
|
||||
// each peer's JSON.
|
||||
std::vector<int> latencies;
|
||||
int higherVersionCount = 0;
|
||||
int totalPeers = 0;
|
||||
int divergedCount = 0;
|
||||
auto const ownVersion = std::string(BuildInfo::getVersionString());
|
||||
|
||||
app.getOverlay().foreach([&](std::shared_ptr<Peer> const& peer) {
|
||||
@@ -1019,6 +1021,11 @@ MetricsRegistry::registerPeerQualityGauge()
|
||||
if (!pv.empty() && pv > ownVersion)
|
||||
++higherVersionCount;
|
||||
}
|
||||
// PeerImp::json() sets "track" to "diverged" when the peer's
|
||||
// tracking state is Tracking::Diverged (i.e. it is following
|
||||
// a different ledger chain than us).
|
||||
if (pj.isMember(jss::track) && pj[jss::track].asString() == "diverged")
|
||||
++divergedCount;
|
||||
});
|
||||
|
||||
// P90 latency across connected peers.
|
||||
@@ -1041,13 +1048,11 @@ MetricsRegistry::registerPeerQualityGauge()
|
||||
: 0.0;
|
||||
observe("peers_higher_version_pct", higherPct);
|
||||
|
||||
// Count peers that are insane/diverged (tracking ==
|
||||
// Tracking::diverged). Not directly available from the Peer
|
||||
// interface, so we count peers with negative or zero latency
|
||||
// as a proxy for unreachable/diverged state.
|
||||
// TODO: expose PeerImp::tracking_ via the Peer interface for
|
||||
// a precise count.
|
||||
observe("peers_insane_count", 0.0);
|
||||
// Count peers diverged from our ledger chain, read from the
|
||||
// peer's "track" JSON field (set by PeerImp::json()). Diverged
|
||||
// peers are following a different chain and are a leading
|
||||
// indicator of local sync trouble.
|
||||
observe("peers_insane_count", static_cast<double>(divergedCount));
|
||||
|
||||
// Binary flag: recommend upgrade if >60% run a newer version.
|
||||
observe("upgrade_recommended", higherPct > 60.0 ? 1.0 : 0.0);
|
||||
|
||||
Reference in New Issue
Block a user