aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordergoegge <n.goeggi@gmail.com>2023-11-27 17:22:41 +0000
committerstickies-v <stickies-v@protonmail.com>2024-04-10 17:01:27 +0200
commit7d9c3ec622d73a98d07ab3cee78751718982a5bc (patch)
tree1ca23797dae50e9d814a2512128199457e235a8c /src
parentee178dfcc1175e0af8163216c9c024f4bfc97965 (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.cpp8
-rw-r--r--src/net_processing.h7
-rw-r--r--src/rpc/net.cpp4
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));