29 lines
795 B
Python
29 lines
795 B
Python
from datetime import datetime, timedelta
|
|
|
|
|
|
class RateCalc:
|
|
def __init__(self, interval: timedelta, max_stat: int):
|
|
self.interval = interval
|
|
self.max_stat = max(max_stat, 10)
|
|
self.reset()
|
|
|
|
def reset(self):
|
|
self.start = datetime.now()
|
|
self.updated = self.start
|
|
self.total = 0
|
|
self.current = 0
|
|
self.stats = [0] * self.max_stat
|
|
|
|
@property
|
|
def last(self):
|
|
return self.stats[-1]
|
|
|
|
def push(self, ts: datetime, value: int):
|
|
while self.updated + self.interval < ts:
|
|
self.stats.append(self.current)
|
|
self.stats = self.stats[-self.max_stat :]
|
|
self.total += self.current
|
|
self.current = 0
|
|
self.updated += self.interval
|
|
self.current += value
|