winamp/Src/Plugins/DSP/sc_serv3/bandwidth.cpp
2024-09-24 14:54:57 +02:00

117 lines
3 KiB
C++

#include "bandwidth.h"
#include "global.h"
#include "services/stdServiceImpl.h"
using namespace std;
using namespace uniString;
using namespace stringUtil;
#define DEBUG_LOG(...) do { if (gOptions.statsDebug()) DLOG(__VA_ARGS__); } while (0)
#define LOGNAME "[BANDWIDTH] "
static __uint64 g_bandWidthTable[bandWidth::ALL_OTHER];
static AOL_namespace::rwLock g_bandwidthLock;
const __uint64 bandWidth::getAmount(const bandWidth::usageType_t type)
{
stackRWLock sl (g_bandwidthLock);
if (type < ALL_SENT)
{
return g_bandWidthTable[type];
}
switch (type)
{
case bandWidth::ALL_SENT:
{
return g_bandWidthTable[CLIENT_V1_SENT] +
g_bandWidthTable[CLIENT_V2_SENT] +
g_bandWidthTable[CLIENT_HTTP_SENT] +
g_bandWidthTable[CLIENT_FLV_SENT] +
g_bandWidthTable[CLIENT_M4A_SENT] +
g_bandWidthTable[SOURCE_V1_SENT] +
g_bandWidthTable[SOURCE_V2_SENT] +
g_bandWidthTable[PUBLIC_WEB] +
g_bandWidthTable[PRIVATE_WEB] +
g_bandWidthTable[FLASH_POLICY] +
g_bandWidthTable[RELAY_V2_SENT]+
g_bandWidthTable[YP_SENT] +
g_bandWidthTable[AUTH_AND_METRICS];
}
case bandWidth::ALL_RECV:
{
return g_bandWidthTable[SOURCE_V1_RECV] +
g_bandWidthTable[SOURCE_V2_RECV] +
g_bandWidthTable[RELAY_MISC_RECV] +
g_bandWidthTable[RELAY_V1_RECV] +
g_bandWidthTable[RELAY_V2_RECV] +
g_bandWidthTable[YP_RECV] +
g_bandWidthTable[ADVERTS];
}
case bandWidth::ALL_WEB:
{
return g_bandWidthTable[PUBLIC_WEB] +
g_bandWidthTable[PRIVATE_WEB];
}
case bandWidth::ALL_SOURCE_SENT:
{
return g_bandWidthTable[SOURCE_V1_SENT] +
g_bandWidthTable[SOURCE_V2_SENT];
}
case bandWidth::ALL_SOURCE_RECV:
{
return g_bandWidthTable[SOURCE_V1_RECV] +
g_bandWidthTable[SOURCE_V2_RECV];
}
case bandWidth::ALL_CLIENT_SENT:
{
return g_bandWidthTable[CLIENT_V1_SENT] +
g_bandWidthTable[CLIENT_V2_SENT] +
g_bandWidthTable[CLIENT_HTTP_SENT] +
g_bandWidthTable[CLIENT_FLV_SENT] +
g_bandWidthTable[CLIENT_M4A_SENT];
}
case bandWidth::ALL_RELAY_RECV:
{
return g_bandWidthTable[RELAY_MISC_RECV] +
g_bandWidthTable[RELAY_V1_RECV] +
g_bandWidthTable[RELAY_V2_RECV];
}
case bandWidth::ALL_OTHER:
{
return g_bandWidthTable[FLASH_POLICY] +
g_bandWidthTable[RELAY_V2_SENT] +
g_bandWidthTable[YP_SENT] +
g_bandWidthTable[YP_RECV] +
g_bandWidthTable[AUTH_AND_METRICS] +
g_bandWidthTable[ADVERTS];
}
default:
{
return 0;
}
}
}
void bandWidth::updateAmount(const bandWidth::usageType_t type, const __uint64 amount)
{
if (amount > 0)
{
stackRWLock sl (g_bandwidthLock, false);
g_bandWidthTable[type] += amount;
g_bandWidthTable[bandWidth::ALL] += amount;
}
}
void bandWidth::getFinalAmounts()
{
__uint64 all = getAmount(bandWidth::ALL);
if (all > 0)
{
ILOG(LOGNAME "Total: " + tos(all) +
", Sent: " + tos(getAmount(bandWidth::ALL_SENT)) +
", Recv: " + tos(getAmount(bandWidth::ALL_RECV)));
}
}