From fd7fa57de215290f41e15943ebf47ed837c84219 Mon Sep 17 00:00:00 2001 From: Muhamad Juwandi Date: Tue, 23 Dec 2025 17:15:00 +0700 Subject: [PATCH 1/3] feat: implement traffic stats collection for Issue #3088 --- src/pqi/pqipersongrp.cc | 14 ++++++++++++++ src/pqi/pqipersongrp.h | 1 + src/retroshare/rsconfig.h | 8 +++++++- src/services/p3bwctrl.cc | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/pqi/pqipersongrp.cc b/src/pqi/pqipersongrp.cc index 7146be7de6..f7914ffabe 100644 --- a/src/pqi/pqipersongrp.cc +++ b/src/pqi/pqipersongrp.cc @@ -395,6 +395,20 @@ bool pqipersongrp::getCryptoParams(const RsPeerId& id,RsPeerCryptoParams& params //return locked_getCryptoParams(id,params) ; } +bool pqipersongrp::getPeerTotalTraffic(const RsPeerId& id, uint64_t& in, uint64_t& out) +{ + RsStackMutex stack(coreMtx); /******* LOCKED MUTEX **********/ + + std::map::iterator it = mods.find(id) ; + + if(it == mods.end()) + return false ; + + in = it->second->pqi->getTraffic(true); + out = it->second->pqi->getTraffic(false); + return true; + + int pqipersongrp::addPeer(const RsPeerId& id) { pqioutput(PQL_DEBUG_BASIC, pqipersongrpzone, "pqipersongrp::addPeer() PeerId: " + id.toStdString()); diff --git a/src/pqi/pqipersongrp.h b/src/pqi/pqipersongrp.h index 5b57aebb12..f82a987d81 100644 --- a/src/pqi/pqipersongrp.h +++ b/src/pqi/pqipersongrp.h @@ -91,6 +91,7 @@ virtual int tick(); virtual int status(); virtual bool getCryptoParams(const RsPeerId&,RsPeerCryptoParams&) ; + virtual bool getPeerTotalTraffic(const RsPeerId& id, uint64_t& in, uint64_t& out); protected: virtual bool locked_getCryptoParams(const RsPeerId&, RsPeerCryptoParams&) { return false ;} diff --git a/src/retroshare/rsconfig.h b/src/retroshare/rsconfig.h index de304798e7..4ce8a329a5 100644 --- a/src/retroshare/rsconfig.h +++ b/src/retroshare/rsconfig.h @@ -149,7 +149,8 @@ struct RsConfigDataRates : RsSerializable mAllocTs(0), mRateOut(0), mRateMaxOut(0), mAllowedOut(0), mAllowedTs(0), - mQueueIn(0), mQueueOut(0) + mQueueIn(0), mQueueOut(0), + mTotalIn(0), mTotalOut(0) {} /* all in kB/s */ @@ -168,6 +169,9 @@ struct RsConfigDataRates : RsSerializable int mQueueIn; int mQueueOut; + uint64_t mTotalIn; + uint64_t mTotalOut; + // RsSerializable interface void serial_process(RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext &ctx) { RS_SERIAL_PROCESS(mRateIn); @@ -184,6 +188,8 @@ struct RsConfigDataRates : RsSerializable RS_SERIAL_PROCESS(mQueueIn); RS_SERIAL_PROCESS(mQueueOut); + RS_SERIAL_PROCESS(mTotalIn); + RS_SERIAL_PROCESS(mTotalOut); } }; diff --git a/src/services/p3bwctrl.cc b/src/services/p3bwctrl.cc index 65add39354..c459cef90e 100644 --- a/src/services/p3bwctrl.cc +++ b/src/services/p3bwctrl.cc @@ -269,6 +269,8 @@ int p3BandwidthControl::getAllBandwidthRates(std::mapsecond.mRates.mQueueIn; rates.mQueueOut = bit->second.mRates.mQueueOut; + mPg->getPeerTotalTraffic(bit->first, rates.mTotalIn, rates.mTotalOut); + ratemap[bit->first] = rates; } return true ; From 92317978989fb780e2d856dc1b3098aa795e77e0 Mon Sep 17 00:00:00 2001 From: Muhamad Juwandi Date: Wed, 24 Dec 2025 08:37:02 +0700 Subject: [PATCH 2/3] fix: implement total traffic stats logic and include turtle traffic --- src/services/p3bwctrl.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/services/p3bwctrl.cc b/src/services/p3bwctrl.cc index c459cef90e..b2df048fbb 100644 --- a/src/services/p3bwctrl.cc +++ b/src/services/p3bwctrl.cc @@ -27,6 +27,7 @@ #include "services/p3bwctrl.h" #include "rsitems/rsbwctrlitems.h" +#include "retroshare/rsturtle.h" #include @@ -243,6 +244,25 @@ int p3BandwidthControl::getTotalBandwidthRates(RsConfigDataRates &rates) rates.mQueueIn = mTotalRates.mQueueIn; rates.mQueueOut = mTotalRates.mQueueOut; + /* Sum up traffic from all connected peers */ + std::map::iterator bit; + for(bit = mBwMap.begin(); bit != mBwMap.end(); ++bit) + { + uint64_t tin = 0; + uint64_t tout = 0; + mPg->getPeerTotalTraffic(bit->first, tin, tout); + rates.mTotalIn += tin; + rates.mTotalOut += tout; + } + + if (rsTurtle) + { + TurtleTrafficStatisticsInfo tinfo; + rsTurtle->getTrafficStatistics(tinfo); + rates.mRateIn += tinfo.total_dn_Bps / 1024.0f; + rates.mRateOut += tinfo.total_up_Bps / 1024.0f; + } + return 1; } From e539529d98bcc15c4108f347115f51582bdd8529 Mon Sep 17 00:00:00 2001 From: Antigravity AI Date: Wed, 7 Jan 2026 20:31:39 +0700 Subject: [PATCH 3/3] fix: add missing brace in getPeerTotalTraffic --- src/pqi/pqipersongrp.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pqi/pqipersongrp.cc b/src/pqi/pqipersongrp.cc index f7914ffabe..0c12d14f57 100644 --- a/src/pqi/pqipersongrp.cc +++ b/src/pqi/pqipersongrp.cc @@ -407,6 +407,7 @@ bool pqipersongrp::getPeerTotalTraffic(const RsPeerId& id, uint64_t& in, uint64_ in = it->second->pqi->getTraffic(true); out = it->second->pqi->getTraffic(false); return true; +} int pqipersongrp::addPeer(const RsPeerId& id)