diff --git a/client/streamstatsmodel.cpp b/client/streamstatsmodel.cpp
index c58044f..ec71e52 100644
--- a/client/streamstatsmodel.cpp
+++ b/client/streamstatsmodel.cpp
@@ -20,6 +20,7 @@ along with this program. If not, see
#include "streamstatsmodel.h"
#include "protocol.pb.h"
+#include "xqlocale.h"
#include
#include
@@ -45,12 +46,22 @@ enum {
kAggrTxPkts,
kAggrRxPkts,
kAggrPktLoss,
+ kTxDuration,
+ kAvgTxFrameRate,
+ kAvgRxFrameRate,
+ kAvgTxBitRate,
+ kAvgRxBitRate,
kMaxAggrStreamStats
};
static QStringList aggrStatTitles = QStringList()
<< "Total\nTx Pkts"
<< "Total\nRx Pkts"
- << "Total\nPkt Loss";
+ << "Total\nPkt Loss"
+ << "Duration\n(secs)"
+ << "Avg\nTx PktRate"
+ << "Avg\nRx PktRate"
+ << "Avg\nTx BitRate"
+ << "Avg\nRx BitRate";
static const uint kAggrGuid = 0xffffffff;
@@ -149,6 +160,26 @@ QVariant StreamStatsModel::data(const QModelIndex &index, int role) const
return QString("%L1").arg(aggrGuidStats_.value(guid).txPkts);
case kAggrPktLoss:
return QString("%L1").arg(aggrGuidStats_.value(guid).pktLoss);
+ case kTxDuration:
+ return QString("%L1").arg(aggrGuidStats_.value(guid).txDuration);
+ case kAvgTxFrameRate:
+ return QString("%L1").arg(
+ aggrGuidStats_.value(guid).txPkts
+ / aggrGuidStats_.value(guid).txDuration);
+ case kAvgRxFrameRate:
+ return QString("%L1").arg(
+ aggrGuidStats_.value(guid).rxPkts
+ / aggrGuidStats_.value(guid).txDuration);
+ case kAvgTxBitRate:
+ return XLocale().toBitRateString(
+ (aggrGuidStats_.value(guid).txBytes
+ + 24 * aggrGuidStats_.value(guid).txPkts) * 8
+ / aggrGuidStats_.value(guid).txDuration);
+ case kAvgRxBitRate:
+ return XLocale().toBitRateString(
+ (aggrGuidStats_.value(guid).rxBytes
+ + 24 * aggrGuidStats_.value(guid).rxPkts) * 8
+ / aggrGuidStats_.value(guid).txDuration);
default:
break;
};
@@ -232,10 +263,18 @@ void StreamStatsModel::appendStreamStatsList(
aggrGuid.rxPkts += ss.rxPkts;
aggrGuid.txPkts += ss.txPkts;
aggrGuid.pktLoss += ss.txPkts - ss.rxPkts;
+ aggrGuid.rxBytes += ss.rxBytes;
+ aggrGuid.txBytes += ss.txBytes;
+ if (s.tx_duration() > aggrGuid.txDuration)
+ aggrGuid.txDuration = s.tx_duration(); // XXX: use largest or avg?
aggrAggr.rxPkts += ss.rxPkts;
aggrAggr.txPkts += ss.txPkts;
aggrAggr.pktLoss += ss.txPkts - ss.rxPkts;
+ aggrAggr.rxBytes += ss.rxBytes;
+ aggrAggr.txBytes += ss.txBytes;
+ if (aggrGuid.txDuration > aggrAggr.txDuration)
+ aggrAggr.txDuration = aggrGuid.txDuration;
if (!portList_.contains(pgp))
portList_.append(pgp);
diff --git a/client/streamstatsmodel.h b/client/streamstatsmodel.h
index 664cd47..6f57e1b 100644
--- a/client/streamstatsmodel.h
+++ b/client/streamstatsmodel.h
@@ -61,7 +61,10 @@ private:
struct AggrGuidStats {
quint64 rxPkts;
quint64 txPkts;
+ quint64 rxBytes;
+ quint64 txBytes;
qint64 pktLoss;
+ double txDuration;
};
QList guidList_;
QList portList_;