diff options
author | dergoegge <n.goeggi@gmail.com> | 2023-11-27 17:22:41 +0000 |
---|---|---|
committer | stickies-v <stickies-v@protonmail.com> | 2024-04-10 17:01:27 +0200 |
commit | 7d9c3ec622d73a98d07ab3cee78751718982a5bc (patch) | |
tree | 1ca23797dae50e9d814a2512128199457e235a8c /src | |
parent | ee178dfcc1175e0af8163216c9c024f4bfc97965 (diff) |
[net processing] Introduce PeerManagerInfo
For querying statistics/info from PeerManager. The median outbound time
offset is the only initial field.
Diffstat (limited to 'src')
-rw-r--r-- | src/net_processing.cpp | 8 | ||||
-rw-r--r-- | src/net_processing.h | 7 | ||||
-rw-r--r-- | src/rpc/net.cpp | 4 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index b549178677..6289d13989 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -518,6 +518,7 @@ public: std::optional<std::string> FetchBlock(NodeId peer_id, const CBlockIndex& block_index) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); + PeerManagerInfo GetInfo() const override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); bool IgnoresIncomingTxs() override { return m_opts.ignore_incoming_txs; } void SendPings() override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void RelayTransaction(const uint256& txid, const uint256& wtxid) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); @@ -1804,6 +1805,13 @@ bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) c return true; } +PeerManagerInfo PeerManagerImpl::GetInfo() const +{ + return PeerManagerInfo{ + .median_outbound_time_offset = m_outbound_time_offsets.Median(), + }; +} + void PeerManagerImpl::AddToCompactExtraTransactions(const CTransactionRef& tx) { if (m_opts.max_extra_txs <= 0) diff --git a/src/net_processing.h b/src/net_processing.h index 452a973d54..d0ff02311b 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -46,6 +46,10 @@ struct CNodeStateStats { std::chrono::seconds time_offset{0}; }; +struct PeerManagerInfo { + std::chrono::seconds median_outbound_time_offset{0s}; +}; + class PeerManager : public CValidationInterface, public NetEventsInterface { public: @@ -86,6 +90,9 @@ public: /** Get statistics from node state */ virtual bool GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) const = 0; + /** Get peer manager info. */ + virtual PeerManagerInfo GetInfo() const = 0; + /** Whether this node ignores txs received over p2p. */ virtual bool IgnoresIncomingTxs() = 0; diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 176cf0e404..823b6d620f 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -23,7 +23,6 @@ #include <rpc/server_util.h> #include <rpc/util.h> #include <sync.h> -#include <timedata.h> #include <util/chaintype.h> #include <util/strencodings.h> #include <util/string.h> @@ -679,9 +678,10 @@ static RPCHelpMan getnetworkinfo() obj.pushKV("localservicesnames", GetServicesNames(services)); } if (node.peerman) { + auto peerman_info{node.peerman->GetInfo()}; obj.pushKV("localrelay", !node.peerman->IgnoresIncomingTxs()); + obj.pushKV("timeoffset", Ticks<std::chrono::seconds>(peerman_info.median_outbound_time_offset)); } - obj.pushKV("timeoffset", GetTimeOffset()); if (node.connman) { obj.pushKV("networkactive", node.connman->GetNetworkActive()); obj.pushKV("connections", node.connman->GetNodeCount(ConnectionDirection::Both)); |