diff options
Diffstat (limited to 'src/zencore/include')
| -rw-r--r-- | src/zencore/include/zencore/stats.h | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/src/zencore/include/zencore/stats.h b/src/zencore/include/zencore/stats.h index 1a0817b99..e8e08f96a 100644 --- a/src/zencore/include/zencore/stats.h +++ b/src/zencore/include/zencore/stats.h @@ -222,6 +222,39 @@ private: Histogram m_Histogram; }; +struct MeterSnapshot +{ + uint64_t Count; + double MeanRate; + double Rate1; + double Rate5; + double Rate15; +}; + +struct HistogramSnapshot +{ + double Count; + double Avg; + double Min; + double Max; + double P75; + double P95; + double P99; + double P999; +}; + +struct StatsSnapshot +{ + MeterSnapshot Meter; + HistogramSnapshot Histogram; +}; + +struct RequestStatsSnapshot +{ + StatsSnapshot Requests; + StatsSnapshot Bytes; +}; + /** Metrics for network requests Aggregates tracking of duration, payload sizes into a single @@ -261,19 +294,39 @@ public: struct Scope { - Scope(OperationTiming& Outer); + Scope(RequestStats& Outer, int64_t Bytes); ~Scope(); + void SetBytes(int64_t Bytes) { m_Bytes = Bytes; } + void Stop(); void Cancel(); private: - OperationTiming& m_Outer; - uint64_t m_StartTick; + RequestStats& m_Outer; + uint64_t m_StartTick; + int64_t m_Bytes; }; void EmitSnapshot(std::string_view Tag, CbObjectWriter& Cbo); + RequestStatsSnapshot Snapshot(); + private: + static StatsSnapshot GetSnapshot(Meter& M, Histogram& H, double ConversionFactor) + { + SampleSnapshot Snap = H.Snapshot(); + return StatsSnapshot{ + .Meter = {.Count = M.Count(), .MeanRate = M.MeanRate(), .Rate1 = M.Rate1(), .Rate5 = M.Rate5(), .Rate15 = M.Rate15()}, + .Histogram = {.Count = H.Count() * ConversionFactor, + .Avg = H.Mean() * ConversionFactor, + .Min = H.Min() * ConversionFactor, + .Max = H.Max() * ConversionFactor, + .P75 = Snap.Get75Percentile() * ConversionFactor, + .P95 = Snap.Get95Percentile() * ConversionFactor, + .P99 = Snap.Get99Percentile() * ConversionFactor, + .P999 = Snap.Get999Percentile() * ConversionFactor}}; + } + Meter m_RequestMeter; Meter m_BytesMeter; Histogram m_RequestTimeHistogram; @@ -286,6 +339,11 @@ void EmitSnapshot(std::string_view Tag, Meter& Stat, CbObjectWriter& Cbo); void EmitSnapshot(const Histogram& Stat, CbObjectWriter& Cbo, double ConversionFactor); +void EmitSnapshot(std::string_view Tag, const MeterSnapshot& Snapshot, CbObjectWriter& Cbo); +void EmitSnapshot(std::string_view Tag, const HistogramSnapshot& Snapshot, CbObjectWriter& Cbo); +void EmitSnapshot(std::string_view Tag, const StatsSnapshot& Snapshot, CbObjectWriter& Cbo); +void EmitSnapshot(std::string_view Tag, const RequestStatsSnapshot& Snapshot, CbObjectWriter& Cbo); + } // namespace zen::metrics namespace zen { |