def add(self, data):
assert isinstance(data, numbers.Number)
if self.last_update is None:
self._avg = data
self.last_update = time.time()
self.last_data_decay = 1
else:
now = time.time()
delta = now - self.last_update
if delta < 0:
# Time is allowed to go a little backwards (NTP update, etc)
logger.warn("Backwards delta value: {}".format(delta))
# Treat this entry as if it happened with 0 delta
delta = 0
if delta != 0:
self.last_data_decay = (1 - self.decay**delta) * 1/delta
self._avg = self.decay**delta * self._avg + self.last_data_decay * data
else:
# Don't divide by zero; just reuse the last delta. Should stack well
self._avg += self.last_data_decay * data
self.last_update = now
评论列表
文章目录