nwaku/waku/utils/collector.nim

36 lines
1019 B
Nim

when (NimMajor, NimMinor) < (1, 4):
{.push raises: [Defect].}
else:
{.push raises: [].}
import metrics
proc parseCollectorIntoF64(
collector: SimpleCollector
): float64 {.gcsafe, raises: [Defect].} =
{.gcsafe.}:
var total = 0.float64
for metrics in collector.metrics:
for metric in metrics:
try:
total = total + metric.value
except KeyError:
discard
return total
template parseAndAccumulate*(collector: Collector, cumulativeValue: float64): float64 =
## This template is used to get metrics in a window
## according to a cumulative value passed in
{.gcsafe.}:
let total = parseCollectorIntoF64(collector)
let freshCount = total - cumulativeValue
cumulativeValue = total
freshCount
template collectorAsF64*(collector: Collector): float64 =
## This template is used to get metrics from 0
## Serves as a wrapper for parseCollectorIntoF64 which is gcsafe
{.gcsafe.}:
let total = parseCollectorIntoF64(collector)
total