/ src / qt / peertablemodel.h
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