diff --git a/light9/metrics.py b/light9/metrics.py --- a/light9/metrics.py +++ b/light9/metrics.py @@ -99,35 +99,6 @@ class PmfStat(Stat): -metrics consumer side can do this with the changing counts: - -class RecentFps: - def __init__(self, window=20): - self.window = window - self.recentTimes = [] - - def mark(self): - now = time.time() - self.recentTimes.append(now) - self.recentTimes = self.recentTimes[-self.window:] - - def rate(self): - def dec(innerFunc): - def f(*a, **kw): - self.mark() - return innerFunc(*a, **kw) - return f - return dec - - def __call__(self): - if len(self.recentTimes) < 2: - return {} - recents = sorted(round(1 / (b - a), 3) - for a, b in zip(self.recentTimes[:-1], - self.recentTimes[1:])) - avg = (len(self.recentTimes) - 1) / ( - self.recentTimes[-1] - self.recentTimes[0]) - return {'average': round(avg, 5), 'recents': recents} i think prometheus covers this one: diff --git a/light9/recentfps.py b/light9/recentfps.py new file mode 100644 --- /dev/null +++ b/light9/recentfps.py @@ -0,0 +1,30 @@ +# server side version of what the metrics consumer does with changing counts +import time + +class RecentFps: + def __init__(self, window=20): + self.window = window + self.recentTimes = [] + + def mark(self): + now = time.time() + self.recentTimes.append(now) + self.recentTimes = self.recentTimes[-self.window:] + + def rate(self): + def dec(innerFunc): + def f(*a, **kw): + self.mark() + return innerFunc(*a, **kw) + return f + return dec + + def __call__(self): + if len(self.recentTimes) < 2: + return {} + recents = sorted(round(1 / (b - a), 3) + for a, b in zip(self.recentTimes[:-1], + self.recentTimes[1:])) + avg = (len(self.recentTimes) - 1) / ( + self.recentTimes[-1] - self.recentTimes[0]) + return {'average': round(avg, 5), 'recents': recents}