Skip to content

Commit 409c9ce

Browse files
committed
qml: adapt peer stats to updated Core time APIs
Use NodeClock types from the updated Core node stats interface and adjust the mock Node getProxy override to match the optional-returning API. The starting height field is no longer exposed by node state stats, so report it as unavailable.
1 parent 0fa26e0 commit 409c9ce

7 files changed

Lines changed: 23 additions & 22 deletions

File tree

qml/models/peerdetailsmodel.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ class PeerDetailsModel : public QObject
5454
QString services() const { return PeerStatsUtil::FormatServicesStr(m_combinedStats->nodeStateStats.their_services); }
5555
bool transactionRelay() const { return m_combinedStats->nodeStateStats.m_relay_txs; }
5656
bool addressRelay() const { return m_combinedStats->nodeStateStats.m_addr_relay_enabled; }
57-
QString startingHeight() const { return QString::number(m_combinedStats->nodeStateStats.m_starting_height); }
57+
QString startingHeight() const { return tr("N/A"); }
5858
QString syncedHeaders() const { return QString::number(m_combinedStats->nodeStateStats.nSyncHeight); }
5959
QString syncedBlocks() const { return QString::number(m_combinedStats->nodeStateStats.nCommonHeight); }
6060
QString direction() const { return QString::fromStdString(m_combinedStats->nodeStats.fInbound ? "Inbound" : "Outbound"); }
61-
QString connectionDuration() const { return PeerStatsUtil::FormatDurationStr(GetTime<std::chrono::seconds>() - m_combinedStats->nodeStats.m_connected); }
62-
QString lastSend() const { return PeerStatsUtil::FormatDurationStr(GetTime<std::chrono::seconds>() - m_combinedStats->nodeStats.m_last_send); }
63-
QString lastReceived() const { return PeerStatsUtil::FormatDurationStr(GetTime<std::chrono::seconds>() - m_combinedStats->nodeStats.m_last_recv); }
61+
QString connectionDuration() const { return PeerStatsUtil::FormatDurationStr(NodeClock::now() - m_combinedStats->nodeStats.m_connected); }
62+
QString lastSend() const { return PeerStatsUtil::FormatDurationStr(NodeClock::now() - m_combinedStats->nodeStats.m_last_send); }
63+
QString lastReceived() const { return PeerStatsUtil::FormatDurationStr(NodeClock::now() - m_combinedStats->nodeStats.m_last_recv); }
6464
QString bytesSent() const { return PeerStatsUtil::FormatBytes(m_combinedStats->nodeStats.nSendBytes); }
6565
QString bytesReceived() const { return PeerStatsUtil::FormatBytes(m_combinedStats->nodeStats.nRecvBytes); }
6666
QString pingTime() const { return PeerStatsUtil::FormatPingTime(m_combinedStats->nodeStats.m_last_ping_time); }

qml/peerstatsutil.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ QString NetworkToQString(Network net)
5252
assert(false);
5353
}
5454

55-
QString FormatDurationStr(std::chrono::seconds dur)
55+
QString FormatDurationStr(std::chrono::nanoseconds dur)
5656
{
5757
const auto d{std::chrono::duration_cast<std::chrono::days>(dur)};
5858
const auto h{std::chrono::duration_cast<std::chrono::hours>(dur - d)};
@@ -68,10 +68,9 @@ QString FormatDurationStr(std::chrono::seconds dur)
6868
return str_list.join(" ");
6969
}
7070

71-
QString FormatPeerAge(std::chrono::seconds time_connected)
71+
QString FormatPeerAge(NodeClock::time_point time_connected)
7272
{
73-
const auto time_now{GetTime<std::chrono::seconds>()};
74-
const auto age{time_now - time_connected};
73+
const auto age{NodeClock::now() - time_connected};
7574
if (age >= 24h) return QObject::tr("%1 d").arg(age / 24h);
7675
if (age >= 1h) return QObject::tr("%1 h").arg(age / 1h);
7776
if (age >= 1min) return QObject::tr("%1 m").arg(age / 1min);
@@ -90,12 +89,12 @@ QString FormatServicesStr(quint64 mask)
9089
return QObject::tr("None");
9190
}
9291

93-
QString FormatPingTime(std::chrono::microseconds ping_time)
92+
QString FormatPingTime(NodeClock::duration ping_time)
9493
{
95-
if (ping_time == std::chrono::microseconds::max() || ping_time == 0us) {
94+
if (ping_time == NodeClock::duration::max() || ping_time == 0us) {
9695
return QObject::tr("N/A");
9796
}
98-
return QObject::tr("%1 ms").arg(QString::number(static_cast<int>(count_microseconds(ping_time) / 1000), 10));
97+
return QObject::tr("%1 ms").arg(QString::number(Ticks<std::chrono::milliseconds>(ping_time), 10));
9998
}
10099

101100
QString FormatTimeOffset(int64_t time_offset)

qml/peerstatsutil.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define BITCOIN_QML_PEERSTATSUTIL_H
77

88
#include <net.h>
9+
#include <node/timeoffsets.h>
910

1011
#include <QString>
1112

@@ -15,10 +16,10 @@ namespace PeerStatsUtil {
1516

1617
QString ConnectionTypeToQString(ConnectionType conn_type, bool prepend_direction);
1718
QString NetworkToQString(Network net);
18-
QString FormatDurationStr(std::chrono::seconds dur);
19-
QString FormatPeerAge(std::chrono::seconds time_connected);
19+
QString FormatDurationStr(std::chrono::nanoseconds dur);
20+
QString FormatPeerAge(NodeClock::time_point time_connected);
2021
QString FormatServicesStr(quint64 mask);
21-
QString FormatPingTime(std::chrono::microseconds ping_time);
22+
QString FormatPingTime(NodeClock::duration ping_time);
2223
QString FormatTimeOffset(int64_t time_offset);
2324
QString FormatBytes(uint64_t bytes);
2425

test/mocks/mocknode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class MockNode : public interfaces::Node
5050
MOCK_METHOD(void, forceSetting, (const std::string&, const common::SettingsValue&), (override));
5151
MOCK_METHOD(void, resetSettings, (), (override));
5252
MOCK_METHOD(void, mapPort, (bool), (override));
53-
MOCK_METHOD(bool, getProxy, (Network, Proxy&), (override));
53+
MOCK_METHOD((std::optional<Proxy>), getProxy, (Network), (override));
5454
MOCK_METHOD(size_t, getNodeCount, (ConnectionDirection), (override));
5555
MOCK_METHOD(bool, getNodesStats, (NodesStats&), (override));
5656
MOCK_METHOD(bool, getBanned, (banmap_t&), (override));

test/test_peerlistmodel.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ CNodeStats MakeNodeStats(NodeId node_id, std::string address, bool inbound, Conn
2828
{
2929
CNodeStats stats;
3030
stats.nodeid = node_id;
31-
stats.m_connected = std::chrono::seconds{1'000};
31+
stats.m_connected = NodeClock::time_point{std::chrono::seconds{1'000}};
3232
stats.m_addr_name = std::move(address);
3333
stats.fInbound = inbound;
3434
stats.m_conn_type = connection_type;
@@ -211,21 +211,21 @@ void PeerListModelTests::sortProxySortsByRoles()
211211
using ::testing::SetArgReferee;
212212

213213
auto stats_a = MakeNodeStats(10, "10.0.0.20:8333", false, ConnectionType::MANUAL, NET_IPV6);
214-
stats_a.m_connected = std::chrono::seconds{200};
214+
stats_a.m_connected = NodeClock::time_point{std::chrono::seconds{200}};
215215
stats_a.m_min_ping_time = std::chrono::microseconds{5'000};
216216
stats_a.nSendBytes = 400;
217217
stats_a.nRecvBytes = 300;
218218
stats_a.cleanSubVer = "/Satoshi:27.0.0/";
219219

220220
auto stats_b = MakeNodeStats(20, "10.0.0.10:8333", true, ConnectionType::OUTBOUND_FULL_RELAY, NET_IPV4);
221-
stats_b.m_connected = std::chrono::seconds{400};
221+
stats_b.m_connected = NodeClock::time_point{std::chrono::seconds{400}};
222222
stats_b.m_min_ping_time = std::chrono::microseconds{2'000};
223223
stats_b.nSendBytes = 100;
224224
stats_b.nRecvBytes = 500;
225225
stats_b.cleanSubVer = "/Satoshi:26.0.0/";
226226

227227
auto stats_c = MakeNodeStats(30, "10.0.0.30:8333", false, ConnectionType::BLOCK_RELAY, NET_ONION);
228-
stats_c.m_connected = std::chrono::seconds{100};
228+
stats_c.m_connected = NodeClock::time_point{std::chrono::seconds{100}};
229229
stats_c.m_min_ping_time = std::chrono::microseconds{8'000};
230230
stats_c.nSendBytes = 700;
231231
stats_c.nRecvBytes = 200;

test/test_peerstatsutil.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void PeerStatsUtilTests::formatDuration()
5555

5656
void PeerStatsUtilTests::formatPeerAge()
5757
{
58-
const auto now{GetTime<std::chrono::seconds>()};
58+
const auto now{NodeClock::now()};
5959
QCOMPARE(PeerStatsUtil::FormatPeerAge(now - 90s), QString("1 m"));
6060
QCOMPARE(PeerStatsUtil::FormatPeerAge(now - 3700s), QString("1 h"));
6161
QCOMPARE(PeerStatsUtil::FormatPeerAge(now - 90000s), QString("1 d"));
@@ -72,7 +72,7 @@ void PeerStatsUtilTests::formatServices()
7272
void PeerStatsUtilTests::formatPingTime()
7373
{
7474
QCOMPARE(PeerStatsUtil::FormatPingTime(0us), QString("N/A"));
75-
QCOMPARE(PeerStatsUtil::FormatPingTime(std::chrono::microseconds::max()), QString("N/A"));
75+
QCOMPARE(PeerStatsUtil::FormatPingTime(NodeClock::duration::max()), QString("N/A"));
7676
QCOMPARE(PeerStatsUtil::FormatPingTime(1500us), QString("1 ms"));
7777
QCOMPARE(PeerStatsUtil::FormatPingTime(2500us), QString("2 ms"));
7878
}

test/test_rpcconsolemodel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#include <chrono>
3232
#include <memory>
33+
#include <optional>
3334
#include <string>
3435
#include <vector>
3536

@@ -100,7 +101,7 @@ class RpcTestStubNode : public interfaces::Node
100101
void forceSetting(const std::string&, const common::SettingsValue&) override {}
101102
void resetSettings() override {}
102103
void mapPort(bool) override {}
103-
bool getProxy(Network, Proxy&) override { return false; }
104+
std::optional<Proxy> getProxy(Network) override { return std::nullopt; }
104105
size_t getNodeCount(ConnectionDirection) override { return 0; }
105106
bool getNodesStats(NodesStats&) override { return false; }
106107
bool getBanned(banmap_t&) override { return false; }

0 commit comments

Comments
 (0)