aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
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/include
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/include')
-rw-r--r--src/zencore/include/zencore/stats.h64
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 {