diff options
| author | Martin Ridgers <[email protected]> | 2022-01-11 08:37:47 +0100 |
|---|---|---|
| committer | Martin Ridgers <[email protected]> | 2022-01-11 08:38:42 +0100 |
| commit | 13d0e8a22b919879216f09c2c891a97b1419c446 (patch) | |
| tree | 9982c4da32b8d73a046db104cd37f90c49932b4c /zenserver/upstream/upstreamcache.cpp | |
| parent | Apple Clang issues fmt::format compile errors for enum class-type args (diff) | |
| download | zen-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.cpp | 27 |
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; |