Format traffic stats to not show bytes, but stuff like KiB and MiB etc

This adds CString::ToByteStr() for such jobs!


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1038 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
psychon
2008-05-05 21:33:34 +00:00
parent 7d0314f416
commit 4ada00f542
3 changed files with 32 additions and 12 deletions
+12 -12
View File
@@ -1507,29 +1507,29 @@ void CClient::UserCommand(const CString& sLine) {
for (map<CString, CUser*>::const_iterator it = msUsers.begin(); it != msUsers.end(); it++) {
Table.AddRow();
Table.SetCell("Username", it->first);
Table.SetCell("In", CString(it->second->BytesRead()));
Table.SetCell("Out", CString(it->second->BytesWritten()));
Table.SetCell("Total", CString(it->second->BytesRead() + it->second->BytesWritten()));
Table.SetCell("In", CString::ToByteStr(it->second->BytesRead()));
Table.SetCell("Out", CString::ToByteStr(it->second->BytesWritten()));
Table.SetCell("Total", CString::ToByteStr(it->second->BytesRead() + it->second->BytesWritten()));
users_total_in += it->second->BytesRead();
users_total_out += it->second->BytesWritten();
}
Table.AddRow();
Table.SetCell("Username", "<Users>");
Table.SetCell("In", CString(users_total_in));
Table.SetCell("Out", CString(users_total_out));
Table.SetCell("Total", CString(users_total_in + users_total_out));
Table.SetCell("In", CString::ToByteStr(users_total_in));
Table.SetCell("Out", CString::ToByteStr(users_total_out));
Table.SetCell("Total", CString::ToByteStr(users_total_in + users_total_out));
Table.AddRow();
Table.SetCell("Username", "<ZNC>");
Table.SetCell("In", CString(CZNC::Get().BytesRead()));
Table.SetCell("Out", CString(CZNC::Get().BytesWritten()));
Table.SetCell("Total", CString(CZNC::Get().BytesRead() + CZNC::Get().BytesWritten()));
Table.SetCell("In", CString::ToByteStr(CZNC::Get().BytesRead()));
Table.SetCell("Out", CString::ToByteStr(CZNC::Get().BytesWritten()));
Table.SetCell("Total", CString::ToByteStr(CZNC::Get().BytesRead() + CZNC::Get().BytesWritten()));
Table.AddRow();
Table.SetCell("Username", "<Total>");
Table.SetCell("In", CString(users_total_in + CZNC::Get().BytesRead()));
Table.SetCell("Out", CString(users_total_out + CZNC::Get().BytesWritten()));
Table.SetCell("Total", CString(users_total_in + CZNC::Get().BytesRead() + users_total_out + CZNC::Get().BytesWritten()));
Table.SetCell("In", CString::ToByteStr(users_total_in + CZNC::Get().BytesRead()));
Table.SetCell("Out", CString::ToByteStr(users_total_out + CZNC::Get().BytesWritten()));
Table.SetCell("Total", CString::ToByteStr(users_total_in + CZNC::Get().BytesRead() + users_total_out + CZNC::Get().BytesWritten()));
if (Table.size()) {
unsigned int uTableIdx = 0;
+19
View File
@@ -852,6 +852,25 @@ CString CString::ToKBytes(double d) {
return szRet;
}
CString CString::ToByteStr(unsigned long long d) {
const unsigned long long KiB = 1024;
const unsigned long long MiB = KiB * 1024;
const unsigned long long GiB = MiB * 1024;
const unsigned long long TiB = GiB * 1024;
if (d > TiB) {
return CString(d / (double) TiB) + " TiB";
} else if (d > GiB) {
return CString(d / (double) GiB) + " GiB";
} else if (d > MiB) {
return CString(d / (double) MiB) + " MiB";
} else if (d > KiB) {
return CString(d / (double) KiB) + " KiB";
}
return CString(d) + " B";
}
bool CString::ToBool() const { return (!Trim_n().Trim_n("0").empty() && Trim_n().CaseCmp("false") != 0); }
short CString::ToShort() const { return strtoul(this->c_str(), (char**) NULL, 10); }
unsigned short CString::ToUShort() const { return strtoul(this->c_str(), (char**) NULL, 10); }
+1
View File
@@ -129,6 +129,7 @@ public:
static CString ToPercent(double d);
static CString ToKBytes(double d);
static CString ToByteStr(unsigned long long d);
bool ToBool() const;
short ToShort() const;