peertablemodel.h
1 // Copyright (c) 2011-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #ifndef BITCOIN_QT_PEERTABLEMODEL_H 6 #define BITCOIN_QT_PEERTABLEMODEL_H 7 8 #include <net_processing.h> 9 #include <net.h> 10 11 #include <QAbstractTableModel> 12 #include <QList> 13 #include <QModelIndex> 14 #include <QStringList> 15 #include <QVariant> 16 17 class PeerTablePriv; 18 19 namespace interfaces { 20 class Node; 21 } 22 23 QT_BEGIN_NAMESPACE 24 class QTimer; 25 QT_END_NAMESPACE 26 27 struct CNodeCombinedStats { 28 CNodeStats nodeStats; 29 CNodeStateStats nodeStateStats; 30 bool fNodeStateStatsAvailable; 31 }; 32 Q_DECLARE_METATYPE(CNodeCombinedStats*) 33 34 /** 35 Qt model providing information about connected peers, similar to the 36 "getpeerinfo" RPC call. Used by the rpc console UI. 37 */ 38 class PeerTableModel : public QAbstractTableModel 39 { 40 Q_OBJECT 41 42 public: 43 explicit PeerTableModel(interfaces::Node& node, QObject* parent); 44 ~PeerTableModel(); 45 void startAutoRefresh(); 46 void stopAutoRefresh(); 47 48 enum ColumnIndex { 49 NetNodeId = 0, 50 Age, 51 Address, 52 Direction, 53 ConnectionType, 54 Network, 55 Ping, 56 Sent, 57 Received, 58 Subversion 59 }; 60 61 enum { 62 StatsRole = Qt::UserRole, 63 }; 64 65 /** @name Methods overridden from QAbstractTableModel 66 @{*/ 67 int rowCount(const QModelIndex& parent = QModelIndex()) const override; 68 int columnCount(const QModelIndex& parent = QModelIndex()) const override; 69 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; 70 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 71 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; 72 Qt::ItemFlags flags(const QModelIndex &index) const override; 73 /*@}*/ 74 75 public Q_SLOTS: 76 void refresh(); 77 78 private: 79 //! Internal peer data structure. 80 QList<CNodeCombinedStats> m_peers_data{}; 81 interfaces::Node& m_node; 82 const QStringList columns{ 83 /*: Title of Peers Table column which contains a 84 unique number used to identify a connection. */ 85 tr("Peer"), 86 /*: Title of Peers Table column which indicates the duration (length of time) 87 since the peer connection started. */ 88 tr("Age"), 89 /*: Title of Peers Table column which contains the 90 IP/Onion/I2P address of the connected peer. */ 91 tr("Address"), 92 /*: Title of Peers Table column which indicates the direction 93 the peer connection was initiated from. */ 94 tr("Direction"), 95 /*: Title of Peers Table column which describes the type of 96 peer connection. The "type" describes why the connection exists. */ 97 tr("Type"), 98 /*: Title of Peers Table column which states the network the peer 99 connected through. */ 100 tr("Network"), 101 /*: Title of Peers Table column which indicates the current latency 102 of the connection with the peer. */ 103 tr("Ping"), 104 /*: Title of Peers Table column which indicates the total amount of 105 network information we have sent to the peer. */ 106 tr("Sent"), 107 /*: Title of Peers Table column which indicates the total amount of 108 network information we have received from the peer. */ 109 tr("Received"), 110 /*: Title of Peers Table column which contains the peer's 111 User Agent string. */ 112 tr("User Agent")}; 113 QTimer* timer{nullptr}; 114 }; 115 116 #endif // BITCOIN_QT_PEERTABLEMODEL_H