📄 statisticsdlg.cpp
字号:
// current upload without overhead included
m_UploadOMeter.SetPlotColor( thePrefs.GetStatsColor(14) ,3) ;
m_Statistics.SetBackgroundColor(thePrefs.GetStatsColor(0)) ;
m_Statistics.SetGridColor(thePrefs.GetStatsColor(1)) ;
m_Statistics.SetPlotColor( thePrefs.GetStatsColor(8),0) ;
m_Statistics.SetPlotColor( thePrefs.GetStatsColor(10),1) ;
m_Statistics.SetPlotColor( thePrefs.GetStatsColor(9),2) ;
m_Statistics.SetPlotColor( thePrefs.GetStatsColor(12),3) ;
m_DownloadOMeter.SetYUnits(GetResString(IDS_ST_DOWNLOAD));
m_DownloadOMeter.SetLegendLabel(GetResString(IDS_ST_SESSION),0);
Buffer.Format(_T(" (%u %s)"),thePrefs.GetStatsAverageMinutes(),GetResString(IDS_MINS));
m_DownloadOMeter.SetLegendLabel(GetResString(IDS_AVG)+Buffer,1);
m_DownloadOMeter.SetLegendLabel(GetResString(IDS_ST_CURRENT),2);
m_UploadOMeter.SetYUnits(GetResString(IDS_ST_UPLOAD));
m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_SESSION),0);
Buffer.Format(_T(" (%u %s)"),thePrefs.GetStatsAverageMinutes(),GetResString(IDS_MINS));
m_UploadOMeter.SetLegendLabel(GetResString(IDS_AVG)+Buffer,1);
m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULCURRENT),2);
m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULSLOTSNOOVERHEAD),3);
m_UploadOMeter.SetLegendLabel(GetResString(IDS_ST_ULFRIEND),4);
m_Statistics.SetYUnits(GetResString(IDS_FSTAT_CONNECTION));
Buffer.Format(_T("%s (1:%u)"), GetResString(IDS_ST_ACTIVEC), thePrefs.GetStatsConnectionsGraphRatio());
m_Statistics.SetLegendLabel(Buffer,0);
m_Statistics.SetLegendLabel(GetResString(IDS_ST_ACTIVEU_ZZ),1);
m_Statistics.SetLegendLabel(GetResString(IDS_SP_TOTALUL),2);
m_Statistics.SetLegendLabel(GetResString(IDS_ST_ACTIVED),3);
}
void CStatisticsDlg::SetCurrentRate(float uploadrate, float downloadrate)
{
double m_dPlotDataUp[ 5 ];
double m_dPlotDataDown[ 3 ];
if (!theApp.emuledlg->IsRunning())
return;
// current rate
m_dPlotDataDown[2]=downloadrate;
// current rate to network (standardPackets+controlPackets)
m_dPlotDataUp[2]=uploadrate;
//float uploadtonetworkrate, float uploadrateControlPackets
// current rate (overhead excluded)
m_dPlotDataUp[3]=uploadrate-(float)(theStats.GetUpDatarateOverhead())/1024;
//TODO: TESTING!
// current rate to friends
m_dPlotDataUp[4]=uploadrate-(float)(theApp.uploadqueue->GetToNetworkDatarate())/1024;
// Websever
UpDown updown;
updown.upload = uploadrate;
updown.download = downloadrate;
updown.connections=theApp.listensocket->GetActiveConnections();
theApp.webserver->AddStatsLine(updown);
// averages
m_dPlotDataDown[0]= theStats.GetAvgDownloadRate(AVG_SESSION);
m_dPlotDataUp[0]= theStats.GetAvgUploadRate(AVG_SESSION);
m_dPlotDataDown[1]= theStats.GetAvgDownloadRate(AVG_TIME);
m_dPlotDataUp[1]= theStats.GetAvgUploadRate(AVG_TIME);
// show
m_DownloadOMeter.AppendPoints(m_dPlotDataDown);
m_UploadOMeter.AppendPoints(m_dPlotDataUp);
// get Partialfiles summary
CDownloadQueue::SDownloadStats myStats;
theApp.downloadqueue->GetDownloadStats(myStats);
// Ratio is now handled in the scope itself
m_dPlotDataMore[0]=theApp.listensocket->GetActiveConnections();
m_dPlotDataMore[1]=theApp.uploadqueue->GetActiveUploadsCount();
m_dPlotDataMore[2]=theApp.uploadqueue->GetUploadQueueLength();
m_dPlotDataMore[3]=myStats.a[1];
m_Statistics.AppendPoints(m_dPlotDataMore);
}
void CStatisticsDlg::ShowStatistics(bool forceUpdate)
{
stattree.SetRedraw(false);
CString cbuffer;
// Set Tree Values
// TRANSFER SECTION
// If a section is not expanded, don't waste CPU cycles updating it.
if (forceUpdate || stattree.IsExpanded(h_transfer))
{
uint32 statGoodSessions = 0;
uint32 statBadSessions = 0;
double percentSessions = 0;
// Transfer Ratios
if ( theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0 )
{
// Session
if (theStats.sessionReceivedBytes<theStats.sessionSentBytes)
{
cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_SRATIO),(float)theStats.sessionSentBytes/theStats.sessionReceivedBytes);
stattree.SetItemText(trans[0], cbuffer);
}
else
{
cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_SRATIO),(float)theStats.sessionReceivedBytes/theStats.sessionSentBytes);
stattree.SetItemText(trans[0], cbuffer);
}
}
else
{
cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_SRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
stattree.SetItemText(trans[0], cbuffer);
}
if ( theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0)
{
// Session
if (theStats.sessionSentBytes > theStats.sessionSentBytesToFriend && theStats.sessionReceivedBytes<theStats.sessionSentBytes-theStats.sessionSentBytesToFriend)
{
cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_FRATIO),(float)(theStats.sessionSentBytes-theStats.sessionSentBytesToFriend)/theStats.sessionReceivedBytes);
stattree.SetItemText(trans[1], cbuffer);
}
else
{
cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_FRATIO),(float)theStats.sessionReceivedBytes/(theStats.sessionSentBytes-theStats.sessionSentBytesToFriend));
stattree.SetItemText(trans[1], cbuffer);
}
}
else
{
cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_FRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
stattree.SetItemText(trans[1], cbuffer);
}
if ( (thePrefs.GetTotalDownloaded()>0 && thePrefs.GetTotalUploaded()>0) || (theStats.sessionReceivedBytes>0 && theStats.sessionSentBytes>0) )
{
// Cumulative
if ((theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded())<(theStats.sessionSentBytes+thePrefs.GetTotalUploaded()))
{
cbuffer.Format(_T("%s %.2f : 1"),GetResString(IDS_STATS_CRATIO),(float)(theStats.sessionSentBytes+thePrefs.GetTotalUploaded())/(theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded()));
stattree.SetItemText(trans[2], cbuffer);
}
else
{
cbuffer.Format(_T("%s 1 : %.2f"),GetResString(IDS_STATS_CRATIO),(float)(theStats.sessionReceivedBytes+thePrefs.GetTotalDownloaded())/(theStats.sessionSentBytes+thePrefs.GetTotalUploaded()));
stattree.SetItemText(trans[2], cbuffer);
}
}
else
{
cbuffer.Format(_T("%s %s"), GetResString(IDS_STATS_CRATIO), GetResString(IDS_FSTAT_WAITING)); // Localize
stattree.SetItemText(trans[2], cbuffer);
}
// TRANSFER -> DOWNLOADS SECTION
if (forceUpdate || stattree.IsExpanded(h_download))
{
uint64 DownOHTotal = 0;
uint64 DownOHTotalPackets = 0;
CDownloadQueue::SDownloadStats myStats;
theApp.downloadqueue->GetDownloadStats(myStats);
// TRANSFER -> DOWNLOADS -> SESSION SECTION
if (forceUpdate || stattree.IsExpanded(h_down_session))
{
// Downloaded Data
cbuffer.Format( GetResString( IDS_STATS_DDATA ) , CastItoXBytes( theStats.sessionReceivedBytes, false, false ) );
stattree.SetItemText( down_S[0] , cbuffer );
if (forceUpdate || stattree.IsExpanded(down_S[0]))
{
// Downloaded Data By Client
if (forceUpdate || stattree.IsExpanded(hdown_scb))
{
int i = 0;
uint64 DownDataTotal = thePrefs.GetDownSessionClientData();
uint64 DownDataClient = thePrefs.GetDownData_EMULE();
double percentClientTransferred = 0;
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
cbuffer.Format( _T("eMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred);
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_EDONKEYHYBRID();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("eD Hybrid: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ) , percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_EDONKEY();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("eDonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_AMULE();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("aMule: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_MLDONKEY();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("MLdonkey: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_SHAREAZA();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("Shareaza: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_EMULECOMPAT();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("eM Compat: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
DownDataClient = thePrefs.GetDownData_URL();
if ( DownDataTotal!=0 && DownDataClient!=0 )
percentClientTransferred = (double) 100 * DownDataClient / DownDataTotal;
else
percentClientTransferred = 0;
cbuffer.Format( _T("URL: %s (%1.1f%%)") , CastItoXBytes( DownDataClient, false, false ), percentClientTransferred );
stattree.SetItemText( down_scb[i] , cbuffer );
i++;
}
// Downloaded Data By Port
if (forceUpdate || stattree.IsExpanded(hdown_spb))
{
int i = 0;
uint64 PortDataDefault = thePrefs.GetDownDataPort_4662();
uint64 PortDataOther = thePrefs.GetDownDataPort_OTHER();
uint64 PortDataTotal = thePrefs.GetDownSessionDataPort();
double percentPortTransferred = 0;
if ( PortDataTotal!=0 && PortDataDefault!=0 )
percentPortTransferred = (double) 100 * PortDataDefault / PortDataTotal;
cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTDEF) , CastItoXBytes( PortDataDefault, false, false ) , percentPortTransferred);
stattree.SetItemText( down_spb[i] , cbuffer );
i++;
if ( PortDataTotal!=0 && PortDataOther!=0 )
percentPortTransferred = (double) 100 * PortDataOther / PortDataTotal;
else
percentPortTransferred = 0;
cbuffer.Format( _T("%s: %s (%1.1f%%)") , GetResString(IDS_STATS_PRTOTHER) , CastItoXBytes( PortDataOther, false, false ) , percentPortTransferred);
stattree.SetItemText( down_spb[i] , cbuffer );
i++;
}
}
// Completed Downloads
cbuffer.Format( _T("%s: %u") , GetResString( IDS_STATS_COMPDL ) , thePrefs.GetDownSessionCompletedFiles() );
stattree.SetItemText( down_S[1] , cbuffer );
// Active Downloads
cbuffer.Format( GetResString( IDS_STATS_ACTDL ) , myStats.a[1] );
stattree.SetItemText( down_S[2] , cbuffer );
// Found Sources
cbuffer.Format( GetResString( IDS_STATS_FOUNDSRC ) , myStats.a[0] );
stattree.SetItemText( down_S[3] , cbuffer );
if (forceUpdate || stattree.IsExpanded(down_S[3]))
{
int i = 0;
// Sources By Status
cbuffer.Format( _T("%s: %u") , GetResString( IDS_ONQUEUE ) , myStats.a[2] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString( IDS_QUEUEFULL ) , myStats.a[3] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString( IDS_NONEEDEDPARTS ) , myStats.a[4] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString( IDS_ASKING ) , myStats.a[5] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString( IDS_RECHASHSET ) , myStats.a[6] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString( IDS_CONNECTING ) , myStats.a[7] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString(IDS_CONNVIASERVER) , myStats.a[8] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString(IDS_TOOMANYCONNS) , myStats.a[9] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
cbuffer.Format( _T("%s: %u") , GetResString(IDS_NOCONNECTLOW2LOW) , myStats.a[10] );
stattree.SetItemText( down_sources[i] , cbuffer );
i++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -