From 64f92716a03de6df5f4dac59258f31aa24f02821 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 14 Jan 2025 16:07:16 +0100 Subject: [PATCH] Sets up statistics summary metric collector --- codex/utils/statsummary.nim | 45 +++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 codex/utils/statsummary.nim diff --git a/codex/utils/statsummary.nim b/codex/utils/statsummary.nim new file mode 100644 index 00000000..df4729bd --- /dev/null +++ b/codex/utils/statsummary.nim @@ -0,0 +1,45 @@ +import pkg/metrics + +when defined(metrics): + type StatSummary* = ref object of Collector + min: float64 + max: float64 + ravg: float64 + + method collect(st: StatSummary, output: MetricHandler) = + let timestamp = st.now() + output( + name = st.name & "_min", + value = st.min, + timestamp = timestamp + ) + output( + name = st.name & "_max", + value = st.max, + timestamp = timestamp + ) + output( + name = st.name & "_ravg", + value = st.ravg, + timestamp = timestamp + ) + +proc declareStatSummary*(name: string, help: string = ""): StatSummary = + when defined(metrics): + result = StatSummary.newCollector(name, help) + result.min = high(float64) + result.max = low(float64) + else: + return IgnoredCollector + +proc observeStatSummary(st: StatSummary, value: float64) = + if value < st.min: + st.min = value + if value > st.max: + st.max = value + st.ravg = (st.ravg + value) / 2.0 + +template observe*(statSummary: StatSummary | type IgnoredCollector, amount: int64 | float64 = 1) = + when defined(metrics) and statSummary is not IgnoredCollector: + {.gcsafe.}: + observeStatSummary(statSummary, amount.float64)