From 2868806f3fe0c18eef626515a6cf8cb992392310 Mon Sep 17 00:00:00 2001 From: Srivats P Date: Thu, 24 Feb 2022 22:46:26 +0530 Subject: [PATCH] GUI side changes for displaying stream rates At the moment, the Tx duration for a GUID is taken to be the largest of all tx duration for that GUID across all ports. In the future, we may consider changing it to average instead of largest. --- client/streamstatsmodel.cpp | 41 ++++++++++++++++++++++++++++++++++++- client/streamstatsmodel.h | 3 +++ 2 files changed, 43 insertions(+), 1 deletion(-) 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_;