aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/stats.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-09-28 23:57:31 +0200
committerGitHub <[email protected]>2023-09-28 23:57:31 +0200
commitbf20e4c8e63638792e69098d4d9810c1136ff627 (patch)
treefee82fc0d15910902a4a3c24a5564867748b6419 /src/zencore/stats.cpp
parentadded more context to http response error message (#430) (diff)
downloadzen-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.cpp72
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