Calculate port tx duration and send to controller

This commit only includes server side changes plus the .proto changes.

Client side UI changes are still pending.
This commit is contained in:
Srivats P 2022-02-21 22:20:59 +05:30
parent 7374c74b95
commit 329469dd6e
8 changed files with 30 additions and 0 deletions

View File

@ -289,6 +289,8 @@ message StreamStats {
required PortId port_id = 1;
required StreamGuid stream_guid = 2;
optional double tx_duration = 3; // in seconds
optional uint64 rx_pkts = 11;
optional uint64 rx_bytes = 12;
optional uint64 tx_pkts = 13;

View File

@ -705,6 +705,8 @@ void AbstractPort::streamStats(uint guid, OstProto::StreamStatsList *stats)
s->mutable_stream_guid()->set_id(guid);
s->mutable_port_id()->set_id(id());
s->set_tx_duration(lastTransmitDuration());
s->set_tx_pkts(sst.tx_pkts);
s->set_tx_bytes(sst.tx_bytes);
s->set_rx_pkts(sst.rx_pkts);
@ -716,6 +718,7 @@ void AbstractPort::streamStatsAll(OstProto::StreamStatsList *stats)
{
// FIXME: change input param to a non-OstProto type and/or have
// a getFirst/Next like API?
double txDur = lastTransmitDuration();
StreamStatsIterator i(streamStats_);
while (i.hasNext())
{
@ -726,6 +729,8 @@ void AbstractPort::streamStatsAll(OstProto::StreamStatsList *stats)
s->mutable_stream_guid()->set_id(i.key());
s->mutable_port_id()->set_id(id());
s->set_tx_duration(txDur);
s->set_tx_pkts(sst.tx_pkts);
s->set_tx_bytes(sst.tx_bytes);
s->set_rx_pkts(sst.rx_pkts);

View File

@ -110,6 +110,7 @@ public:
virtual void startTransmit() = 0;
virtual void stopTransmit() = 0;
virtual bool isTransmitOn() = 0;
virtual double lastTransmitDuration() = 0;
virtual void startCapture() = 0;
virtual void stopCapture() = 0;

View File

@ -68,6 +68,9 @@ public:
}
virtual void stopTransmit() { transmitter_->stop(); }
virtual bool isTransmitOn() { return transmitter_->isRunning(); }
virtual double lastTransmitDuration() {
return transmitter_->lastTxDuration();
}
virtual void startCapture() { capturer_->start(); }
virtual void stopCapture() { capturer_->stop(); }

View File

@ -107,6 +107,10 @@ bool PcapTransmitter::isRunning()
{
return txThread_.isRunning();
}
double PcapTransmitter::lastTxDuration()
{
return txThread_.lastTxDuration();
}
void PcapTransmitter::updateTxThreadStreamStats()
{

View File

@ -49,6 +49,7 @@ public:
void start();
void stop();
bool isRunning();
double lastTxDuration();
private slots:
void updateTxThreadStreamStats();
private:

View File

@ -243,6 +243,7 @@ void PcapTxThread::run()
const int kSyncTransmit = 1;
int i;
long overHead = 0; // overHead should be negative or zero
TimeStamp startTime, endTime;
qDebug("packetSequenceList_.size = %d", packetSequenceList_.size());
if (packetSequenceList_.size() <= 0)
@ -260,6 +261,7 @@ void PcapTxThread::run()
lastStats_ = *stats_; // used for stream stats
getTimeStamp(&startTime);
state_ = kRunning;
i = 0;
while (i < packetSequenceList_.size())
@ -348,6 +350,10 @@ _restart:
}
_exit:
getTimeStamp(&endTime);
lastTxDuration_ = udiffTimeStamp(&startTime, &endTime)/1e6;
qDebug("Tx duration = %fs", lastTxDuration_);
if (trackStreamStats_)
updateStreamStats();
@ -388,6 +394,11 @@ bool PcapTxThread::isRunning()
return (state_ == kRunning);
}
double PcapTxThread::lastTxDuration()
{
return lastTxDuration_;
}
int PcapTxThread::sendQueueTransmit(pcap_t *p,
pcap_send_queue *queue, long &overHead, int sync)
{

View File

@ -55,6 +55,7 @@ public:
void start();
void stop();
bool isRunning();
double lastTxDuration();
private:
enum State
@ -92,6 +93,8 @@ private:
StatsTuple *stats_;
StatsTuple lastStats_;
StreamStats streamStats_;
double lastTxDuration_{0.0}; // in secs
};
#endif