aboutsummaryrefslogtreecommitdiff
path: root/zenserver/upstream/upstreamcache.cpp
diff options
context:
space:
mode:
authorMartin Ridgers <[email protected]>2022-01-11 08:37:47 +0100
committerMartin Ridgers <[email protected]>2022-01-11 08:38:42 +0100
commit13d0e8a22b919879216f09c2c891a97b1419c446 (patch)
tree9982c4da32b8d73a046db104cd37f90c49932b4c /zenserver/upstream/upstreamcache.cpp
parentApple Clang issues fmt::format compile errors for enum class-type args (diff)
downloadzen-13d0e8a22b919879216f09c2c891a97b1419c446.tar.xz
zen-13d0e8a22b919879216f09c2c891a97b1419c446.zip
Not all toolchains support C++20's atomic<double>::fetch_add()
Diffstat (limited to 'zenserver/upstream/upstreamcache.cpp')
-rw-r--r--zenserver/upstream/upstreamcache.cpp27
1 files changed, 13 insertions, 14 deletions
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp
index c9ba59780..520833a3c 100644
--- a/zenserver/upstream/upstreamcache.cpp
+++ b/zenserver/upstream/upstreamcache.cpp
@@ -913,8 +913,8 @@ struct UpstreamStats
else if (Result.Success)
{
Stats.HitCount++;
- Stats.DownBytes.fetch_add(double(Result.Bytes) / 1024.0 / 1024.0);
- Stats.SecondsDown.fetch_add(Result.ElapsedSeconds);
+ Stats.DownBytes.fetch_add(Result.Bytes);
+ Stats.TimeDownMs.fetch_add(uint64_t(Result.ElapsedSeconds * 1000.0));
}
else
{
@@ -936,8 +936,8 @@ struct UpstreamStats
if (Result.Success)
{
Stats.UpCount++;
- Stats.UpBytes.fetch_add(double(Result.Bytes) / 1024.0 / 1024.0);
- Stats.SecondsUp.fetch_add(Result.ElapsedSeconds);
+ Stats.UpBytes.fetch_add(Result.Bytes);
+ Stats.TimeUpMs.fetch_add(uint64_t(Result.ElapsedSeconds * 1000.0));
}
else
{
@@ -955,26 +955,25 @@ struct UpstreamStats
for (auto& Ep : Endpoints)
{
// These stats will not be totally correct as the numbers are not captured atomically
-
UpstreamEndpointStats& Stats = Ep->Stats();
const uint64_t HitCount = Stats.HitCount;
const uint64_t MissCount = Stats.MissCount;
- const double DownBytes = Stats.DownBytes;
- const double SecondsDown = Stats.SecondsDown;
- const double UpBytes = Stats.UpBytes;
- const double SecondsUp = Stats.SecondsUp;
+ const double DownMBytes = double(Stats.DownBytes) / 1024.0 / 1024.0;
+ const double SecondsDown = double(Stats.TimeDownMs) / 1000.0;
+ const double UpMBytes = double(Stats.UpBytes) / 1024.0 / 1024.0;
+ const double SecondsUp = double(Stats.TimeUpMs) / 1000.0;
- const double UpSpeed = UpBytes > 0 ? UpBytes / SecondsUp : 0.0;
- const double DownSpeed = DownBytes > 0 ? DownBytes / SecondsDown : 0.0;
+ const double UpSpeed = UpMBytes > 0 ? UpMBytes / SecondsUp : 0.0;
+ const double DownSpeed = DownMBytes > 0 ? DownMBytes / SecondsDown : 0.0;
const uint64_t TotalCount = HitCount + MissCount;
const double HitRate = TotalCount > 0 ? (double(HitCount) / double(TotalCount)) : 0.0;
Logger.debug("STATS - '{}', Hit rate: {:.2f}%, DOWN: '{:.2f} MiB {:.2f} MiB/s', UP: '{:.2f} MiB {:.2f} MiB/s'",
Ep->GetEndpointInfo().Name,
HitRate,
- DownBytes,
+ DownMBytes,
DownSpeed,
- UpBytes,
+ UpMBytes,
UpSpeed);
}
}
@@ -1235,7 +1234,7 @@ public:
const double HitRate = TotalCount > 0 ? (double(HitCount) / double(TotalCount)) : 0.0;
Status << "hit_ratio" << HitRate;
- Status << "downloaded_mb" << Stats.DownBytes;
+ Status << "downloaded_mb" << (double(Stats.DownBytes) / 1024.0 / 1024.0);
Status << "uploaded_mb" << Stats.UpBytes;
Status << "error_count" << Stats.ErrorCount;