diff options
| author | Dan Engelbrecht <[email protected]> | 2023-09-28 23:57:31 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-09-28 23:57:31 +0200 |
| commit | bf20e4c8e63638792e69098d4d9810c1136ff627 (patch) | |
| tree | fee82fc0d15910902a4a3c24a5564867748b6419 /src/zencore/stats.cpp | |
| parent | added more context to http response error message (#430) (diff) | |
| download | zen-bf20e4c8e63638792e69098d4d9810c1136ff627.tar.xz zen-bf20e4c8e63638792e69098d4d9810c1136ff627.zip | |
adding more stats (#429)
- Feature: Add detailed stats on requests and data sizes on a per-bucket level, use parameter `cachestorestats=true` on the `/stats/z$` endpoint to enable
- Feature: Add detailed stats on requests and data sizes on cidstore, use parameter `cidstorestats=true` on the `/stats/z$` endpoint to enable
- Feature: Dashboard now accepts parameters in the URL which is passed on to the `/stats/z$` endpoint
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 |