removed unused method for OutQueue statistics; improved BW curve display; fixed a few display bugs

This commit is contained in:
csoler 2015-07-17 22:13:31 +02:00 committed by cave beat
parent bdad800509
commit 2a47095599
18 changed files with 153 additions and 109 deletions

View File

@ -94,7 +94,6 @@ virtual void getRates(RsBwRates &rates)
return; return;
} }
virtual int gatherOutQueueStatistics(std::vector<uint32_t>& /*per_service_count*/,std::vector<uint32_t>& /*per_priority_count*/) { return 0;}
virtual int gatherStatistics(std::list<RSTrafficClue>& /* outqueue_lst */,std::list<RSTrafficClue>& /* inqueue_lst */) { return 0;} virtual int gatherStatistics(std::list<RSTrafficClue>& /* outqueue_lst */,std::list<RSTrafficClue>& /* inqueue_lst */) { return 0;}
virtual int getQueueSize(bool /* in */) { return 0;} virtual int getQueueSize(bool /* in */) { return 0;}

View File

@ -387,33 +387,20 @@ RsRawItem *pqihandler::GetRsRawItem()
static const float MIN_RATE = 0.01; // 10 B/s static const float MIN_RATE = 0.01; // 10 B/s
int pqihandler::ExtractOutQueueStatistics(OutQueueStatistics& stats)
{
stats.per_service_item_count.clear() ;
std::vector<uint32_t> item_counts(65536,0) ;
stats.per_priority_item_count.clear() ;
stats.per_priority_item_count.resize(10,0) ;
std::map<RsPeerId, SearchModule *>::iterator it;
for(it = mods.begin(); it != mods.end(); ++it)
(it -> second)->pqi->gatherOutQueueStatistics(item_counts,stats.per_priority_item_count) ;
for(int i=0;i<65536;++i)
if(item_counts[i] > 0)
stats.per_service_item_count[i] = item_counts[i] ;
return 1 ;
}
int pqihandler::ExtractTrafficInfo(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst) int pqihandler::ExtractTrafficInfo(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst)
{ {
in_lst.clear() ; in_lst.clear() ;
out_lst.clear() ; out_lst.clear() ;
for( std::map<RsPeerId, SearchModule *>::iterator it = mods.begin(); it != mods.end(); ++it) for( std::map<RsPeerId, SearchModule *>::iterator it = mods.begin(); it != mods.end(); ++it)
(it -> second)->pqi->gatherStatistics(out_lst,in_lst) ; {
std::list<RSTrafficClue> ilst,olst ;
(it -> second)->pqi->gatherStatistics(olst,ilst) ;
for(std::list<RSTrafficClue>::const_iterator it(ilst.begin());it!=ilst.end();++it) in_lst.push_back(*it) ;
for(std::list<RSTrafficClue>::const_iterator it(olst.begin());it!=olst.end();++it) out_lst.push_back(*it) ;
}
return 1 ; return 1 ;
} }

View File

@ -78,7 +78,6 @@ class pqihandler: public P3Interface, public pqiPublisher
// TESTING INTERFACE. // TESTING INTERFACE.
int ExtractRates(std::map<RsPeerId, RsBwRates> &ratemap, RsBwRates &totals); int ExtractRates(std::map<RsPeerId, RsBwRates> &ratemap, RsBwRates &totals);
int ExtractOutQueueStatistics(OutQueueStatistics& stats) ;
int ExtractTrafficInfo(std::list<RSTrafficClue> &out_lst, std::list<RSTrafficClue> &in_lst); int ExtractTrafficInfo(std::list<RSTrafficClue> &out_lst, std::list<RSTrafficClue> &in_lst);
protected: protected:

View File

@ -592,16 +592,6 @@ void pqiperson::getRates(RsBwRates &rates)
return; return;
activepqi -> getRates(rates); activepqi -> getRates(rates);
} }
int pqiperson::gatherOutQueueStatistics(std::vector<uint32_t>& per_service,std::vector<uint32_t>& per_priority)
{
RsStackMutex stack(mPersonMtx); /**** LOCK MUTEX ****/
// get the rate from the active one.
if ((!active) || (activepqi == NULL))
return 0;
return activepqi -> gatherOutQueueStatistics(per_service,per_priority);
}
int pqiperson::gatherStatistics(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst) int pqiperson::gatherStatistics(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst)
{ {
RsStackMutex stack(mPersonMtx); /**** LOCK MUTEX ****/ RsStackMutex stack(mPersonMtx); /**** LOCK MUTEX ****/

View File

@ -170,7 +170,6 @@ virtual void getRates(RsBwRates &rates);
virtual float getRate(bool in); virtual float getRate(bool in);
virtual void setMaxRate(bool in, float val); virtual void setMaxRate(bool in, float val);
virtual void setRateCap(float val_in, float val_out); virtual void setRateCap(float val_in, float val_out);
virtual int gatherOutQueueStatistics(std::vector<uint32_t>& per_service,std::vector<uint32_t>& per_priority);
virtual int gatherStatistics(std::list<RSTrafficClue>& outqueue_lst,std::list<RSTrafficClue>& inqueue_lst) ; virtual int gatherStatistics(std::list<RSTrafficClue>& outqueue_lst,std::list<RSTrafficClue>& inqueue_lst) ;

View File

@ -1024,15 +1024,6 @@ void pqistreamer::free_rpend_locked()
mPkt_rpend_size = 0; mPkt_rpend_size = 0;
} }
int pqistreamer::gatherOutQueueStatistics(std::vector<uint32_t>& per_service_count,std::vector<uint32_t>& per_priority_count)
{
#ifdef TO_REMOVE
RsStackMutex stack(mStreamerMtx); /**** LOCKED MUTEX ****/
return locked_gatherStatistics(per_service_count,per_priority_count);
#endif
}
int pqistreamer::gatherStatistics(std::list<RSTrafficClue>& outqueue_lst,std::list<RSTrafficClue>& inqueue_lst) int pqistreamer::gatherStatistics(std::list<RSTrafficClue>& outqueue_lst,std::list<RSTrafficClue>& inqueue_lst)
{ {
RsStackMutex stack(mStreamerMtx); /**** LOCKED MUTEX ****/ RsStackMutex stack(mStreamerMtx); /**** LOCKED MUTEX ****/

View File

@ -62,7 +62,6 @@ class pqistreamer: public PQInterface
time_t getLastIncomingTS(); // Time of last data packet, for checking a connection is alive. time_t getLastIncomingTS(); // Time of last data packet, for checking a connection is alive.
virtual void getRates(RsBwRates &rates); virtual void getRates(RsBwRates &rates);
virtual int getQueueSize(bool in); // extracting data. virtual int getQueueSize(bool in); // extracting data.
virtual int gatherOutQueueStatistics(std::vector<uint32_t>& per_service_count,std::vector<uint32_t>& per_priority_count); // extracting data.
virtual int gatherStatistics(std::list<RSTrafficClue>& outqueue_stats,std::list<RSTrafficClue>& inqueue_stats); // extracting data. virtual int gatherStatistics(std::list<RSTrafficClue>& outqueue_stats,std::list<RSTrafficClue>& inqueue_stats); // extracting data.
protected: protected:

View File

@ -186,13 +186,6 @@ public:
RSTrafficClue& operator+=(const RSTrafficClue& tc) { size += tc.size; count += tc.count ; return *this ;} RSTrafficClue& operator+=(const RSTrafficClue& tc) { size += tc.size; count += tc.count ; return *this ;}
}; };
class OutQueueStatistics
{
public:
std::map<uint16_t,uint32_t> per_service_item_count ;
std::vector<uint32_t> per_priority_item_count ;
};
class RsConfigNetStatus class RsConfigNetStatus
{ {
public: public:
@ -261,7 +254,6 @@ public:
virtual int getTotalBandwidthRates(RsConfigDataRates &rates) = 0; virtual int getTotalBandwidthRates(RsConfigDataRates &rates) = 0;
virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap) = 0; virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap) = 0;
virtual int getOutQueueStatistics(OutQueueStatistics& stats) = 0 ;
virtual int getTrafficInfo(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst) = 0 ; virtual int getTrafficInfo(std::list<RSTrafficClue>& out_lst,std::list<RSTrafficClue>& in_lst) = 0 ;
/* From RsInit */ /* From RsInit */

View File

@ -207,13 +207,6 @@ int p3ServerConfig::getTotalBandwidthRates(RsConfigDataRates &rates)
return 0; return 0;
} }
int p3ServerConfig::getOutQueueStatistics(OutQueueStatistics& stats)
{
if (rsBandwidthControl)
return rsBandwidthControl->ExtractOutQueueStatistics(stats);
else
return 0;
}
int p3ServerConfig::getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap) int p3ServerConfig::getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap)
{ {
if (rsBandwidthControl) if (rsBandwidthControl)

View File

@ -58,7 +58,6 @@ virtual int getConfigStartup(RsConfigStartup &params);
virtual int getTotalBandwidthRates(RsConfigDataRates &rates); virtual int getTotalBandwidthRates(RsConfigDataRates &rates);
virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap); virtual int getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRates> &ratemap);
virtual int getOutQueueStatistics(OutQueueStatistics& stats) ;
virtual int getTrafficInfo(std::list<RSTrafficClue>& out_lst, std::list<RSTrafficClue> &in_lst) ; virtual int getTrafficInfo(std::list<RSTrafficClue>& out_lst, std::list<RSTrafficClue> &in_lst) ;
/* From RsInit */ /* From RsInit */

View File

@ -280,11 +280,6 @@ int p3BandwidthControl::getAllBandwidthRates(std::map<RsPeerId, RsConfigDataRate
} }
int p3BandwidthControl::ExtractOutQueueStatistics(OutQueueStatistics& stats)
{
return mPg->ExtractOutQueueStatistics(stats) ;
}
int p3BandwidthControl::ExtractTrafficInfo(std::list<RSTrafficClue>& in_stats,std::list<RSTrafficClue>& out_stats) int p3BandwidthControl::ExtractTrafficInfo(std::list<RSTrafficClue>& in_stats,std::list<RSTrafficClue>& out_stats)
{ {
return mPg->ExtractTrafficInfo(out_stats,in_stats) ; return mPg->ExtractTrafficInfo(out_stats,in_stats) ;

View File

@ -414,6 +414,8 @@ void RSGraphWidget::pointsFromData(const std::vector<QPointF>& values,QVector<QP
float last_px = SCALE_WIDTH*fact ; float last_px = SCALE_WIDTH*fact ;
float last_py = 0.0f ; float last_py = 0.0f ;
// float min_x_no_data_threshold = 1.5 ; // 1.5 sec.
for (uint i = 0; i < values.size(); ++i) for (uint i = 0; i < values.size(); ++i)
{ {
//std::cerr << "Value: (" << values[i].x() << " , " << values[i].y() << ")" << std::endl; //std::cerr << "Value: (" << values[i].x() << " , " << values[i].y() << ")" << std::endl;
@ -423,7 +425,7 @@ void RSGraphWidget::pointsFromData(const std::vector<QPointF>& values,QVector<QP
qreal px = x - (values[i].x()-last)*_time_scale ; qreal px = x - (values[i].x()-last)*_time_scale ;
qreal py = y - valueToPixels(values[i].y()) ; qreal py = y - valueToPixels(values[i].y()) ;
if(px >= SCALE_WIDTH *fact&& last_px < SCALE_WIDTH*fact) if(px >= SCALE_WIDTH*fact && last_px < SCALE_WIDTH*fact)
{ {
float alpha = (SCALE_WIDTH*fact - last_px)/(px - last_px) ; float alpha = (SCALE_WIDTH*fact - last_px)/(px - last_px) ;
float ipx = SCALE_WIDTH*fact ; float ipx = SCALE_WIDTH*fact ;
@ -433,10 +435,12 @@ void RSGraphWidget::pointsFromData(const std::vector<QPointF>& values,QVector<QP
points << QPointF(ipx,ipy) ; points << QPointF(ipx,ipy) ;
} }
else if(i==0) else if(i==0)
{
if(px < SCALE_WIDTH*fact)
points << QPointF(SCALE_WIDTH*fact,py) ;
else
points << QPointF(px,y) ; points << QPointF(px,y) ;
}
last_px = px ;
last_py = py ;
if(px < SCALE_WIDTH*fact) if(px < SCALE_WIDTH*fact)
continue ; continue ;
@ -448,10 +452,20 @@ void RSGraphWidget::pointsFromData(const std::vector<QPointF>& values,QVector<QP
if(points.size() > 1 && points[points.size()-2].y() == points.back().y() && points.back().y() == py) if(points.size() > 1 && points[points.size()-2].y() == points.back().y() && points.back().y() == py)
points.pop_back() ; points.pop_back() ;
// if(fabs(px - last_px)/_time_scale > min_x_no_data_threshold)
// {
// points << QPointF(last_px,y) ;
// points << QPointF(px,y) ;
// }
points << QPointF(px,py) ; points << QPointF(px,py) ;
if(i==values.size()-1) if(i==values.size()-1)
points << QPointF(px,y) ; points << QPointF(px,y) ;
last_px = px ;
last_py = py ;
} }
} }

View File

@ -1,6 +1,9 @@
#include "BWGraph.h" #include "BWGraph.h"
#include <time.h> #include <time.h>
#include <math.h>
#include "retroshare/rsservicecontrol.h"
#include "retroshare/rspeers.h"
//#define BWGRAPH_DEBUG 1 //#define BWGRAPH_DEBUG 1
@ -23,20 +26,35 @@ void BWGraphSource::update()
thc.time_stamp = getTime() ; thc.time_stamp = getTime() ;
mTrafficHistory.push_back(thc) ; mTrafficHistory.push_back(thc) ;
std::set<RsPeerId> fds ;
// add visible friends/services // add visible friends/services
for(std::list<RSTrafficClue>::const_iterator it(thc.out_rstcl.begin());it!=thc.out_rstcl.end();++it) for(std::list<RSTrafficClue>::const_iterator it(thc.out_rstcl.begin());it!=thc.out_rstcl.end();++it)
{ {
mVisibleFriends.insert(it->peer_id) ; fds.insert(it->peer_id) ;
mVisibleServices.insert(it->service_id) ; mVisibleServices.insert(it->service_id) ;
} }
for(std::list<RSTrafficClue>::const_iterator it(thc.in_rstcl.begin());it!=thc.in_rstcl.end();++it) for(std::list<RSTrafficClue>::const_iterator it(thc.in_rstcl.begin());it!=thc.in_rstcl.end();++it)
{ {
mVisibleFriends.insert(it->peer_id) ; fds.insert(it->peer_id) ;
mVisibleServices.insert(it->service_id) ; mVisibleServices.insert(it->service_id) ;
} }
for(std::set<RsPeerId>::const_iterator it(fds.begin());it!=fds.end();++it)
{
std::string& s(mVisibleFriends[*it]) ;
if(s.empty())
{
RsPeerDetails pd ;
rsPeers->getPeerDetails(*it,pd) ;
s = pd.name + " (" + pd.location + ")" ;
}
}
#ifdef BWGRAPH_DEBUG #ifdef BWGRAPH_DEBUG
std::cerr << " visible friends: " << std::dec << mVisibleFriends.size() << std::endl; std::cerr << " visible friends: " << std::dec << mVisibleFriends.size() << std::endl;
std::cerr << " visible service: " << std::dec << mVisibleServices.size() << std::endl; std::cerr << " visible service: " << std::dec << mVisibleServices.size() << std::endl;
@ -49,12 +67,25 @@ void BWGraphSource::update()
qint64 ms = getTime() ; qint64 ms = getTime() ;
std::set<std::string> unused_vals ;
for(std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it=_points.begin();it!=_points.end();++it)
unused_vals.insert(it->first) ;
for(std::map<std::string,float>::iterator it=vals.begin();it!=vals.end();++it) for(std::map<std::string,float>::iterator it=vals.begin();it!=vals.end();++it)
{ {
std::list<std::pair<qint64,float> >& lst(_points[it->first]) ; std::list<std::pair<qint64,float> >& lst(_points[it->first]) ;
if(!lst.empty() && fabsf(lst.back().first - ms) > _update_period_msecs*1.2 )
{
lst.push_back(std::make_pair(lst.back().first,0)) ;
lst.push_back(std::make_pair( ms,0)) ;
}
lst.push_back(std::make_pair(ms,it->second)) ; lst.push_back(std::make_pair(ms,it->second)) ;
unused_vals.erase(it->first) ;
for(std::list<std::pair<qint64,float> >::iterator it2=lst.begin();it2!=lst.end();) for(std::list<std::pair<qint64,float> >::iterator it2=lst.begin();it2!=lst.end();)
if( ms - (*it2).first > _time_limit_msecs) if( ms - (*it2).first > _time_limit_msecs)
{ {
@ -65,6 +96,11 @@ void BWGraphSource::update()
break ; break ;
} }
// make sure that all values are fed.
for(std::set<std::string>::const_iterator it(unused_vals.begin());it!=unused_vals.end();++it)
_points[*it].push_back(std::make_pair(ms,0)) ;
// remove empty lists // remove empty lists
for(std::map<std::string,std::list<std::pair<qint64,float> > >::iterator it=_points.begin();it!=_points.end();) for(std::map<std::string,std::list<std::pair<qint64,float> > >::iterator it=_points.begin();it!=_points.end();)
@ -122,7 +158,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
for(uint32_t i=0;i<256;++i) for(uint32_t i=0;i<256;++i)
if(clue_per_sub_id[i].count > 0) if(clue_per_sub_id[i].count > 0)
vals[QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size/1000.0f):(clue_per_sub_id[i].count) ; vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
} }
break ; break ;
@ -135,7 +171,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
clue_per_id[it->service_id] += *it ; clue_per_id[it->service_id] += *it ;
for(std::map<uint16_t,RSTrafficClue>::const_iterator it(clue_per_id.begin());it!=clue_per_id.end();++it) for(std::map<uint16_t,RSTrafficClue>::const_iterator it(clue_per_id.begin());it!=clue_per_id.end();++it)
vals[QString::number(it->first,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(it->second.size/1000.0f):(it->second.count) ; vals[mServiceInfoMap[it->first].mServiceName] = (_current_unit == UNIT_KILOBYTES)?(it->second.size):(it->second.count) ;
} }
break ; break ;
case GRAPH_TYPE_SUM: // single friend, sum services => one curve case GRAPH_TYPE_SUM: // single friend, sum services => one curve
@ -147,7 +183,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
if(it->peer_id == _current_selected_friend) if(it->peer_id == _current_selected_friend)
total += *it ; total += *it ;
vals[_current_selected_friend_name] = (_current_unit == UNIT_KILOBYTES)?(total.size/1000.0f):(total.count) ; vals[visibleFriendName(_current_selected_friend)] = (_current_unit == UNIT_KILOBYTES)?(total.size):(total.count) ;
} }
} }
break ; break ;
@ -164,7 +200,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
clue_per_peer_id[it->peer_id] += *it ; clue_per_peer_id[it->peer_id] += *it ;
for(std::map<RsPeerId,RSTrafficClue>::const_iterator it(clue_per_peer_id.begin());it!=clue_per_peer_id.end();++it) for(std::map<RsPeerId,RSTrafficClue>::const_iterator it(clue_per_peer_id.begin());it!=clue_per_peer_id.end();++it)
vals[it->first.toStdString()] = (_current_unit == UNIT_KILOBYTES)?(it->second.size/1000.0f):(it->second.count) ; vals[visibleFriendName(it->first)] = (_current_unit == UNIT_KILOBYTES)?(it->second.size):(it->second.count) ;
} }
break ; break ;
@ -178,7 +214,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
clue_per_peer_id[it->peer_id] += *it; clue_per_peer_id[it->peer_id] += *it;
for(std::map<RsPeerId,RSTrafficClue>::const_iterator it(clue_per_peer_id.begin());it!=clue_per_peer_id.end();++it) for(std::map<RsPeerId,RSTrafficClue>::const_iterator it(clue_per_peer_id.begin());it!=clue_per_peer_id.end();++it)
vals[it->first.toStdString()] = (_current_unit == UNIT_KILOBYTES)?(it->second.size/1000.0f):(it->second.count) ; vals[visibleFriendName(it->first)] = (_current_unit == UNIT_KILOBYTES)?(it->second.size):(it->second.count) ;
} }
break ; break ;
} }
@ -197,7 +233,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
for(uint32_t i=0;i<256;++i) for(uint32_t i=0;i<256;++i)
if(clue_per_sub_id[i].count > 0) if(clue_per_sub_id[i].count > 0)
vals[QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size/1000.0f):(clue_per_sub_id[i].count) ; vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ;
} }
break ; break ;
@ -209,7 +245,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
clue_per_service[it->service_id] += *it; clue_per_service[it->service_id] += *it;
for(std::map<uint16_t,RSTrafficClue>::const_iterator it(clue_per_service.begin());it!=clue_per_service.end();++it) for(std::map<uint16_t,RSTrafficClue>::const_iterator it(clue_per_service.begin());it!=clue_per_service.end();++it)
vals[QString::number(it->first,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(it->second.size/1000.0f):(it->second.count) ; vals[mServiceInfoMap[it->first].mServiceName] = (_current_unit == UNIT_KILOBYTES)?(it->second.size):(it->second.count) ;
} }
break ; break ;
@ -220,7 +256,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
for(std::list<RSTrafficClue>::const_iterator it(lst.begin());it!=lst.end();++it) for(std::list<RSTrafficClue>::const_iterator it(lst.begin());it!=lst.end();++it)
total += *it; total += *it;
vals[QString("Total").toStdString()] = (_current_unit == UNIT_KILOBYTES)?(total.size/1000.0f):(total.count) ; vals[QString("Total").toStdString()] = (_current_unit == UNIT_KILOBYTES)?(total.size):(total.count) ;
} }
break ; break ;
} }
@ -228,6 +264,16 @@ void BWGraphSource::convertTrafficClueToValues(const std::list<RSTrafficClue>& l
} }
} }
std::string BWGraphSource::visibleFriendName(const RsPeerId& pid) const
{
std::map<RsPeerId,std::string>::const_iterator it = mVisibleFriends.find(pid) ;
if(it != mVisibleFriends.end())
return it->second;
else
return std::string("[unknown]") ;
}
BWGraphSource::BWGraphSource() BWGraphSource::BWGraphSource()
: RSGraphSource() : RSGraphSource()
{ {
@ -243,6 +289,11 @@ BWGraphSource::BWGraphSource()
_current_unit = UNIT_KILOBYTES; _current_unit = UNIT_KILOBYTES;
_current_direction = DIRECTION_UP; _current_direction = DIRECTION_UP;
RsPeerServiceInfo rspsi ;
rsServiceControl->getOwnServices(rspsi) ;
for(std::map<uint32_t,RsServiceInfo>::const_iterator it(rspsi.mServiceList.begin());it!=rspsi.mServiceList.end();++it)
mServiceInfoMap[ (it->first >> 8) & 0xffff ] = it->second ;
} }
void BWGraphSource::getValues(std::map<std::string,float>& values) const void BWGraphSource::getValues(std::map<std::string,float>& values) const
@ -259,6 +310,27 @@ void BWGraphSource::getValues(std::map<std::string,float>& values) const
QString BWGraphSource::unitName() const { return (_current_unit == UNIT_KILOBYTES)?tr("KB/s"):QString(); } QString BWGraphSource::unitName() const { return (_current_unit == UNIT_KILOBYTES)?tr("KB/s"):QString(); }
//QString BWGraphSource::displayName(int i) const
//{
// int n=0;
// for(std::map<std::string,std::list<std::pair<qint64,float> > >::const_iterator it = _points.begin();it!=_points.end() ;++it)
// if(n++ == i)
// {
// // find out what is displayed
//
// if(_service_graph_type == GRAPH_TYPE_SINGLE )
// if(_friend_graph_type != GRAPH_TYPE_ALL)
// return QString::fromStdString(it->first) ;// sub item
// else
// return QString::fromStdString(mVisibleFriends[RsPeerId(it->first)]) ;// peer id item
// else
//
//
// }
//
// return QString("[error]");
//}
QString BWGraphSource::displayValue(float v) const QString BWGraphSource::displayValue(float v) const
{ {
if(_current_unit == UNIT_KILOBYTES) if(_current_unit == UNIT_KILOBYTES)
@ -285,10 +357,7 @@ QString BWGraphSource::displayValue(float v) const
QString BWGraphSource::legend(int i,float v) const QString BWGraphSource::legend(int i,float v) const
{ {
if(i==0) return RSGraphSource::legend(i,v) ;//+ " Total: " + niceNumber(_total_recv) ;
return RSGraphSource::legend(i,v) + " Total: " + niceNumber(_total_recv) ;
else
return RSGraphSource::legend(i,v) + " Total: " + niceNumber(_total_sent) ;
} }
QString BWGraphSource::niceNumber(float v) const QString BWGraphSource::niceNumber(float v) const
{ {
@ -304,7 +373,9 @@ QString BWGraphSource::niceNumber(float v) const
void BWGraphSource::setSelector(int selector_type,int graph_type,const std::string& selector_client_string) void BWGraphSource::setSelector(int selector_type,int graph_type,const std::string& selector_client_string)
{ {
#ifdef BWGRAPH_DEBUG
std::cerr << "Setting Graph Source selector to " << selector_type << " - " << graph_type << " - " << selector_client_string << std::endl; std::cerr << "Setting Graph Source selector to " << selector_type << " - " << graph_type << " - " << selector_client_string << std::endl;
#endif
bool changed = false ; bool changed = false ;
@ -382,27 +453,42 @@ void BWGraphSource::setDirection(int dir)
} }
void BWGraphSource::recomputeCurrentCurves() void BWGraphSource::recomputeCurrentCurves()
{ {
#ifdef BWGRAPH_DEBUG
std::cerr << "BWGraphSource: recomputing current curves." << std::endl; std::cerr << "BWGraphSource: recomputing current curves." << std::endl;
#endif
_points.clear() ; _points.clear() ;
// now, convert data to current curve points. // now, convert data to current curve points.
std::set<std::string> used_values_ref ;
for(std::list<TrafficHistoryChunk>::const_iterator it(mTrafficHistory.begin());it!=mTrafficHistory.end();++it) for(std::list<TrafficHistoryChunk>::const_iterator it(mTrafficHistory.begin());it!=mTrafficHistory.end();++it)
{ {
std::map<std::string,float> vals ; std::map<std::string,float> vals ;
qint64 ms = (*it).time_stamp ; qint64 ms = (*it).time_stamp ;
std::set<std::string> unused_values = used_values_ref ;
if(_current_direction==DIRECTION_UP) if(_current_direction==DIRECTION_UP)
convertTrafficClueToValues((*it).out_rstcl,vals) ; convertTrafficClueToValues((*it).out_rstcl,vals) ;
else else
convertTrafficClueToValues((*it).in_rstcl,vals) ; convertTrafficClueToValues((*it).in_rstcl,vals) ;
for(std::map<std::string,float>::iterator it2=vals.begin();it2!=vals.end();++it2) for(std::map<std::string,float>::iterator it2=vals.begin();it2!=vals.end();++it2)
{
_points[it2->first].push_back(std::make_pair(ms,it2->second)) ; _points[it2->first].push_back(std::make_pair(ms,it2->second)) ;
used_values_ref.insert(it2->first) ;
unused_values.erase(it2->first) ;
}
for(std::set<std::string>::const_iterator it(unused_values.begin());it!=unused_values.end();++it)
_points[*it].push_back(std::make_pair(ms,0)) ;
} }
#ifdef BWGRAPH_DEBUG
std::cerr << " points() contains " << _points.size() << " curves." << std::endl; std::cerr << " points() contains " << _points.size() << " curves." << std::endl;
#endif
} }
BWGraph::BWGraph(QWidget *parent) : RSGraphWidget(parent) BWGraph::BWGraph(QWidget *parent) : RSGraphWidget(parent)

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "retroshare/rsconfig.h" #include "retroshare/rsconfig.h"
#include "retroshare/rsservicecontrol.h"
#include <gui/common/RSGraphWidget.h> #include <gui/common/RSGraphWidget.h>
class BWGraphSource: public RSGraphSource class BWGraphSource: public RSGraphSource
@ -24,6 +25,7 @@ public:
virtual void getValues(std::map<std::string,float>& values) const; virtual void getValues(std::map<std::string,float>& values) const;
virtual QString displayValue(float v) const; virtual QString displayValue(float v) const;
// virtual QString displayName(int i) const;
virtual QString legend(int i,float v) const; virtual QString legend(int i,float v) const;
virtual void update(); virtual void update();
QString unitName() const ; QString unitName() const ;
@ -39,12 +41,13 @@ public:
int friendGraphType() const { return _friend_graph_type ;} int friendGraphType() const { return _friend_graph_type ;}
int serviceGraphType() const { return _service_graph_type ;} int serviceGraphType() const { return _service_graph_type ;}
const std::set<RsPeerId>& visibleFriends() const { return mVisibleFriends; } const std::map<RsPeerId,std::string>& visibleFriends() const { return mVisibleFriends; }
const std::set<uint16_t>& visibleServices() const { return mVisibleServices; } const std::set<uint16_t>& visibleServices() const { return mVisibleServices; }
protected: protected:
void convertTrafficClueToValues(const std::list<RSTrafficClue> &lst, std::map<std::string, float> &vals) const; void convertTrafficClueToValues(const std::list<RSTrafficClue> &lst, std::map<std::string, float> &vals) const;
void recomputeCurrentCurves() ; void recomputeCurrentCurves() ;
std::string visibleFriendName(const RsPeerId &pid) const ;
private: private:
QString niceNumber(float v) const; QString niceNumber(float v) const;
@ -56,15 +59,16 @@ private:
int _service_graph_type ; int _service_graph_type ;
RsPeerId _current_selected_friend ; RsPeerId _current_selected_friend ;
std::string _current_selected_friend_name ;
uint16_t _current_selected_service ; uint16_t _current_selected_service ;
int _current_unit ; int _current_unit ;
int _current_direction ; int _current_direction ;
std::list<TrafficHistoryChunk> mTrafficHistory ; std::list<TrafficHistoryChunk> mTrafficHistory ;
std::set<RsPeerId> mVisibleFriends ; std::map<RsPeerId,std::string> mVisibleFriends ;
std::set<uint16_t> mVisibleServices ; std::set<uint16_t> mVisibleServices ;
mutable std::map<uint16_t,RsServiceInfo> mServiceInfoMap ;
}; };
class BWGraph: public RSGraphWidget class BWGraph: public RSGraphWidget
@ -74,7 +78,7 @@ class BWGraph: public RSGraphWidget
BWGraphSource *source() ; BWGraphSource *source() ;
const std::set<RsPeerId>& visibleFriends() const { return _local_source->visibleFriends(); } const std::map<RsPeerId,std::string>& visibleFriends() const { return _local_source->visibleFriends(); }
const std::set<uint16_t>& visibleServices() const { return _local_source->visibleServices(); } const std::set<uint16_t>& visibleServices() const { return _local_source->visibleServices(); }
protected: protected:
BWGraphSource *_local_source ; BWGraphSource *_local_source ;

View File

@ -2,6 +2,7 @@
#include <QTimer> #include <QTimer>
#include "retroshare/rspeers.h" #include "retroshare/rspeers.h"
#include "retroshare/rsservicecontrol.h"
#include "util/RsProtectedTimer.h" #include "util/RsProtectedTimer.h"
#include "retroshare-gui/RsAutoUpdatePage.h" #include "retroshare-gui/RsAutoUpdatePage.h"
#include "BandwidthStatsWidget.h" #include "BandwidthStatsWidget.h"
@ -52,23 +53,23 @@ void BandwidthStatsWidget::updateComboBoxes()
// Setup button/combobox info // Setup button/combobox info
uint32_t indx = 2 ; uint32_t indx = 2 ;
RsPeerDetails details ; //RsPeerDetails details ;
RsPeerId current_friend_id(ui.friend_CB->itemData(ui.friend_CB->currentIndex()).toString().toStdString()) ; RsPeerId current_friend_id(ui.friend_CB->itemData(ui.friend_CB->currentIndex()).toString().toStdString()) ;
for(std::set<RsPeerId>::const_iterator it(ui.bwgraph_BW->visibleFriends().begin());it!=ui.bwgraph_BW->visibleFriends().end();++it) for(std::map<RsPeerId,std::string>::const_iterator it(ui.bwgraph_BW->visibleFriends().begin());it!=ui.bwgraph_BW->visibleFriends().end();++it)
{ {
if( (*it).toStdString() != ui.friend_CB->itemData(indx).toString().toStdString()) if( it->first.toStdString() != ui.friend_CB->itemData(indx).toString().toStdString())
{ {
std::cerr << " friends: " << *it << " not in combo at place " << indx << ". Adding it." << std::endl; std::cerr << " friends: " << it->first << " not in combo at place " << indx << ". Adding it." << std::endl;
QString name = "[Unknown]" ; QString name = QString::fromUtf8(it->second.c_str()) ;
QVariant data ; QVariant data ;
if(rsPeers->getPeerDetails(*it,details)) //if(rsPeers->getPeerDetails(*it,details))
{ //{
name = QString::fromUtf8(details.name.c_str())+" ("+QString::fromUtf8(details.location.c_str())+")" ; // name = QString::fromUtf8(details.name.c_str())+" ("+QString::fromUtf8(details.location.c_str())+")" ;
data = QVariant(QString::fromStdString( (*it).toStdString())) ; data = QVariant(QString::fromStdString( (it->first).toStdString())) ;
} //}
if(ui.friend_CB->count() <= indx) if(ui.friend_CB->count() <= indx)
ui.friend_CB->addItem(name,data) ; ui.friend_CB->addItem(name,data) ;
@ -78,7 +79,7 @@ void BandwidthStatsWidget::updateComboBoxes()
ui.friend_CB->setItemData(indx,data) ; ui.friend_CB->setItemData(indx,data) ;
} }
if(current_friend_id == *it && ui.friend_CB->currentIndex() != indx) if(current_friend_id == it->first && ui.friend_CB->currentIndex() != indx)
ui.friend_CB->setCurrentIndex(indx) ; ui.friend_CB->setCurrentIndex(indx) ;
} }
++indx ; ++indx ;
@ -92,6 +93,9 @@ void BandwidthStatsWidget::updateComboBoxes()
// now one entry per service // now one entry per service
RsPeerServiceInfo service_info_map ;
rsServiceControl->getOwnServices(service_info_map) ;
indx = 2 ; indx = 2 ;
uint16_t current_service_id = ui.service_CB->itemData(ui.service_CB->currentIndex()).toInt() ; uint16_t current_service_id = ui.service_CB->itemData(ui.service_CB->currentIndex()).toInt() ;
@ -99,13 +103,13 @@ void BandwidthStatsWidget::updateComboBoxes()
{ {
if(*it != ui.service_CB->itemData(indx).toInt()) if(*it != ui.service_CB->itemData(indx).toInt())
{ {
std::cerr << " services: " << std::hex << *it << std::dec << " not in combo at place " << indx << ". Adding it." << std::endl; QString sname = QString::fromUtf8(service_info_map.mServiceList[ ((*it)<<8) + 0x02000000].mServiceName.c_str()) ;
if(ui.service_CB->count() <= indx) if(ui.service_CB->count() <= indx)
ui.service_CB->addItem(QString::number(*it,16),QVariant(*it)) ; ui.service_CB->addItem(sname + " (0x"+QString::number(*it,16)+")",QVariant(*it)) ;
else else
{ {
ui.service_CB->setItemText(indx,QString::number(*it,16)) ; ui.service_CB->setItemText(indx,sname + " (0x"+QString::number(*it,16)+")") ;
ui.service_CB->setItemData(indx,QVariant(*it)) ; ui.service_CB->setItemData(indx,QVariant(*it)) ;
} }

View File

@ -220,11 +220,6 @@ void BwCtrlWindow::updateDisplay()
} }
updateBandwidth(); updateBandwidth();
OutQueueStatistics stats ;
rsConfig->getOutQueueStatistics(stats) ;
//_outqueue_stats_W->updateStatistics(stats) ;
} }
void BwCtrlWindow::updateBandwidth() void BwCtrlWindow::updateBandwidth()

View File

@ -35,7 +35,7 @@ static QString serviceName(uint16_t s)
case /* RS_SERVICE_TYPE_BWCTRL */ 0x0021: return QString("BdwCtrl") ; case /* RS_SERVICE_TYPE_BWCTRL */ 0x0021: return QString("BdwCtrl") ;
case /* RS_SERVICE_TYPE_BANLIST */ 0x0101: return QString("BanList") ; case /* RS_SERVICE_TYPE_BANLIST */ 0x0101: return QString("BanList") ;
case /* RS_SERVICE_TYPE_STATUS */ 0x0102: return QString("Status") ; case /* RS_SERVICE_TYPE_STATUS */ 0x0102: return QString("Status") ;
case /* RS_SERVICE_TYPE_NXS */ 0x0200: return QString("Nxs") ; case /* RS_SERVICE_TYPE_NXS */ 0x0200: return QString("Nxs") ;
case /* RS_SERVICE_GXS_TYPE_GXSID */ 0x0211: return QString("Gxs Ids") ; case /* RS_SERVICE_GXS_TYPE_GXSID */ 0x0211: return QString("Gxs Ids") ;
case /* RS_SERVICE_GXS_TYPE_PHOTO */ 0x0212: return QString("Gxs Photo") ; case /* RS_SERVICE_GXS_TYPE_PHOTO */ 0x0212: return QString("Gxs Photo") ;
case /* RS_SERVICE_GXS_TYPE_WIKI */ 0x0213: return QString("Gxs Wiki") ; case /* RS_SERVICE_GXS_TYPE_WIKI */ 0x0213: return QString("Gxs Wiki") ;

View File

@ -363,7 +363,6 @@ HEADERS += rshare.h \
gui/statistics/StatisticsWindow.h \ gui/statistics/StatisticsWindow.h \
gui/statistics/BwCtrlWindow.h \ gui/statistics/BwCtrlWindow.h \
gui/statistics/RttStatistics.h \ gui/statistics/RttStatistics.h \
gui/statistics/OutQueueStatistics.h \
gui/FileTransfer/TransferUserNotify.h \ gui/FileTransfer/TransferUserNotify.h \
gui/plugins/PluginInterface.h \ gui/plugins/PluginInterface.h \
gui/im_history/ImHistoryBrowser.h \ gui/im_history/ImHistoryBrowser.h \
@ -892,7 +891,6 @@ SOURCES += main.cpp \
gui/statistics/TurtleRouterDialog.cpp \ gui/statistics/TurtleRouterDialog.cpp \
gui/statistics/TurtleRouterStatistics.cpp \ gui/statistics/TurtleRouterStatistics.cpp \
gui/statistics/GlobalRouterStatistics.cpp \ gui/statistics/GlobalRouterStatistics.cpp \
gui/statistics/OutQueueStatistics.cpp \
gui/statistics/StatisticsWindow.cpp \ gui/statistics/StatisticsWindow.cpp \
gui/statistics/BwCtrlWindow.cpp \ gui/statistics/BwCtrlWindow.cpp \
gui/statistics/RttStatistics.cpp \ gui/statistics/RttStatistics.cpp \