sign: Add Aggregate Stats to Stream Stats Model
This commit is contained in:
parent
cfa7d80f7b
commit
ff01ef9682
@ -35,9 +35,23 @@ static QStringList statTitles = QStringList()
|
|||||||
<< "Tx Bytes"
|
<< "Tx Bytes"
|
||||||
<< "Rx Bytes";
|
<< "Rx Bytes";
|
||||||
|
|
||||||
|
// XXX: Keep the enum in sync with it's string
|
||||||
|
enum {
|
||||||
|
kAggrTxPkts,
|
||||||
|
kAggrRxPkts,
|
||||||
|
kAggrPktLoss,
|
||||||
|
kMaxAggrStreamStats
|
||||||
|
};
|
||||||
|
static QStringList aggrStatTitles = QStringList()
|
||||||
|
<< "Aggregate\nTx Pkts"
|
||||||
|
<< "Aggregate\nRx Pkts"
|
||||||
|
<< "Aggregate\nPkt Loss";
|
||||||
|
|
||||||
|
|
||||||
StreamStatsModel::StreamStatsModel(QObject *parent)
|
StreamStatsModel::StreamStatsModel(QObject *parent)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
|
clearStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
int StreamStatsModel::rowCount(const QModelIndex &parent) const
|
int StreamStatsModel::rowCount(const QModelIndex &parent) const
|
||||||
@ -47,7 +61,10 @@ int StreamStatsModel::rowCount(const QModelIndex &parent) const
|
|||||||
|
|
||||||
int StreamStatsModel::columnCount(const QModelIndex &parent) const
|
int StreamStatsModel::columnCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
return portList_.size() * kMaxStreamStats;
|
if (!portList_.size())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return kMaxAggrStreamStats + portList_.size() * kMaxStreamStats;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant StreamStatsModel::headerData(
|
QVariant StreamStatsModel::headerData(
|
||||||
@ -58,6 +75,10 @@ QVariant StreamStatsModel::headerData(
|
|||||||
|
|
||||||
switch (orientation) {
|
switch (orientation) {
|
||||||
case Qt::Horizontal: // Column Header
|
case Qt::Horizontal: // Column Header
|
||||||
|
if (section < kMaxAggrStreamStats)
|
||||||
|
return aggrStatTitles.at(section % kMaxAggrStreamStats);
|
||||||
|
|
||||||
|
section -= kMaxAggrStreamStats;
|
||||||
return QString("Port %1-%2\n%3")
|
return QString("Port %1-%2\n%3")
|
||||||
.arg(portList_.at(section/kMaxStreamStats).first)
|
.arg(portList_.at(section/kMaxStreamStats).first)
|
||||||
.arg(portList_.at(section/kMaxStreamStats).second)
|
.arg(portList_.at(section/kMaxStreamStats).second)
|
||||||
@ -80,8 +101,24 @@ QVariant StreamStatsModel::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
Guid guid = guidList_.at(index.row());
|
Guid guid = guidList_.at(index.row());
|
||||||
PortGroupPort pgp = portList_.at(index.column()/kMaxStreamStats);
|
if (index.column() < kMaxAggrStreamStats) {
|
||||||
int stat = index.column() % kMaxStreamStats;
|
int stat = index.column() % kMaxAggrStreamStats;
|
||||||
|
switch (stat) {
|
||||||
|
case kAggrRxPkts:
|
||||||
|
return QString("%L1").arg(aggrStreamStats_.value(guid).rxPkts);
|
||||||
|
case kAggrTxPkts:
|
||||||
|
return QString("%L1").arg(aggrStreamStats_.value(guid).txPkts);
|
||||||
|
case kAggrPktLoss:
|
||||||
|
return QString("%L1").arg(aggrStreamStats_.value(guid).pktLoss);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
int portColumn = index.column() - kMaxAggrStreamStats;
|
||||||
|
PortGroupPort pgp = portList_.at(portColumn/kMaxStreamStats);
|
||||||
|
int stat = portColumn % kMaxStreamStats;
|
||||||
|
|
||||||
switch (stat) {
|
switch (stat) {
|
||||||
case kRxPkts:
|
case kRxPkts:
|
||||||
@ -111,6 +148,7 @@ void StreamStatsModel::clearStats()
|
|||||||
guidList_.clear();
|
guidList_.clear();
|
||||||
portList_.clear();
|
portList_.clear();
|
||||||
streamStats_.clear();
|
streamStats_.clear();
|
||||||
|
aggrStreamStats_.clear();
|
||||||
|
|
||||||
#if QT_VERSION >= 0x040600
|
#if QT_VERSION >= 0x040600
|
||||||
endResetModel();
|
endResetModel();
|
||||||
@ -134,12 +172,17 @@ void StreamStatsModel::appendStreamStatsList(
|
|||||||
PortGroupPort pgp = PortGroupPort(portGroupId, s.port_id().id());
|
PortGroupPort pgp = PortGroupPort(portGroupId, s.port_id().id());
|
||||||
Guid guid = s.stream_guid().id();
|
Guid guid = s.stream_guid().id();
|
||||||
StreamStats &ss = streamStats_[guid][pgp];
|
StreamStats &ss = streamStats_[guid][pgp];
|
||||||
|
AggrStreamStats &aggrStats = aggrStreamStats_[guid];
|
||||||
|
|
||||||
ss.rxPkts = s.rx_pkts();
|
ss.rxPkts = s.rx_pkts();
|
||||||
ss.txPkts = s.tx_pkts();
|
ss.txPkts = s.tx_pkts();
|
||||||
ss.rxBytes = s.rx_bytes();
|
ss.rxBytes = s.rx_bytes();
|
||||||
ss.txBytes = s.tx_bytes();
|
ss.txBytes = s.tx_bytes();
|
||||||
|
|
||||||
|
aggrStats.rxPkts += ss.rxPkts;
|
||||||
|
aggrStats.txPkts += ss.txPkts;
|
||||||
|
aggrStats.pktLoss += ss.txPkts - ss.rxPkts;
|
||||||
|
|
||||||
if (!portList_.contains(pgp))
|
if (!portList_.contains(pgp))
|
||||||
portList_.append(pgp);
|
portList_.append(pgp);
|
||||||
if (!guidList_.contains(guid))
|
if (!guidList_.contains(guid))
|
||||||
|
@ -56,9 +56,15 @@ private:
|
|||||||
quint64 rxBytes;
|
quint64 rxBytes;
|
||||||
quint64 txBytes;
|
quint64 txBytes;
|
||||||
};
|
};
|
||||||
|
struct AggrStreamStats {
|
||||||
|
quint64 rxPkts;
|
||||||
|
quint64 txPkts;
|
||||||
|
qint64 pktLoss;
|
||||||
|
};
|
||||||
QList<Guid> guidList_;
|
QList<Guid> guidList_;
|
||||||
QList<PortGroupPort> portList_;
|
QList<PortGroupPort> portList_;
|
||||||
QHash<Guid, QHash<PortGroupPort, StreamStats> > streamStats_;
|
QHash<Guid, QHash<PortGroupPort, StreamStats> > streamStats_;
|
||||||
|
QHash<Guid, AggrStreamStats> aggrStreamStats_;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user