diff options
Diffstat (limited to 'src/zencore/stats.cpp')
| -rw-r--r-- | src/zencore/stats.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/zencore/stats.cpp b/src/zencore/stats.cpp index 372bc42f8..087319fa4 100644 --- a/src/zencore/stats.cpp +++ b/src/zencore/stats.cpp @@ -461,6 +461,31 @@ RequestStats::Count() const return m_RequestMeter.Count(); } +RequestStats::Scope::Scope(RequestStats& Outer, int64_t Bytes) : m_Outer(Outer), m_StartTick(GetHifreqTimerValue()), m_Bytes(Bytes) +{ +} + +RequestStats::Scope::~Scope() +{ + Stop(); +} + +void +RequestStats::Scope::Stop() +{ + if (m_StartTick != 0) + { + m_Outer.Update(GetHifreqTimerValue() - m_StartTick, m_Bytes); + m_StartTick = 0; + } +} + +void +RequestStats::Scope::Cancel() +{ + m_StartTick = 0; +} + ////////////////////////////////////////////////////////////////////////// void @@ -489,6 +514,15 @@ RequestStats::EmitSnapshot(std::string_view Tag, CbObjectWriter& Cbo) Cbo.EndObject(); } +RequestStatsSnapshot +RequestStats::Snapshot() +{ + const double ToSeconds = GetHifreqTimerToSeconds(); + + return RequestStatsSnapshot{.Requests = GetSnapshot(m_RequestMeter, m_RequestTimeHistogram, ToSeconds), + .Bytes = GetSnapshot(m_BytesMeter, m_BytesHistogram, 1.0)}; +} + void EmitSnapshot(std::string_view Tag, OperationTiming& Stat, CbObjectWriter& Cbo) { @@ -540,6 +574,44 @@ EmitSnapshot(std::string_view Tag, Meter& Stat, CbObjectWriter& Cbo) Cbo.EndObject(); } +void +EmitSnapshot(const MeterSnapshot& Snapshot, CbObjectWriter& Cbo) +{ + Cbo << "count" << Snapshot.Count; + Cbo << "rate_mean" << Snapshot.MeanRate; + Cbo << "rate_1" << Snapshot.Rate1 << "rate_5" << Snapshot.Rate5 << "rate_15" << Snapshot.Rate15; +} + +void +EmitSnapshot(const HistogramSnapshot& Snapshot, CbObjectWriter& Cbo) +{ + Cbo << "t_count" << Snapshot.Count << "t_avg" << Snapshot.Avg; + Cbo << "t_min" << Snapshot.Min << "t_max" << Snapshot.Max; + Cbo << "t_p75" << Snapshot.P75 << "t_p95" << Snapshot.P95 << "t_p99" << Snapshot.P999; +} + +void +EmitSnapshot(std::string_view Tag, const StatsSnapshot& Snapshot, CbObjectWriter& Cbo) +{ + Cbo.BeginObject(Tag); + EmitSnapshot(Snapshot.Meter, Cbo); + EmitSnapshot(Snapshot.Histogram, Cbo); + Cbo.EndObject(); +} + +void +EmitSnapshot(std::string_view Tag, const RequestStatsSnapshot& Snapshot, CbObjectWriter& Cbo) +{ + if (Snapshot.Requests.Meter.Count == 0) + { + return; + } + Cbo.BeginObject(Tag); + EmitSnapshot("request", Snapshot.Requests, Cbo); + EmitSnapshot("bytes", Snapshot.Bytes, Cbo); + Cbo.EndObject(); +} + ////////////////////////////////////////////////////////////////////////// #if ZEN_WITH_TESTS |