chainlib/chainlib/stat.py

46 lines
1.2 KiB
Python
Raw Normal View History

2021-08-21 09:31:59 +02:00
# standard imports
2021-04-08 17:39:32 +02:00
import datetime
2021-08-21 09:31:59 +02:00
2021-04-08 17:39:32 +02:00
class ChainStat:
2021-08-21 09:31:59 +02:00
"""Block time aggregator.
"""
2021-04-08 17:39:32 +02:00
def __init__(self):
self.block_timestamp_last = None
self.block_avg_aggregate = None
self.block_avg_count = -1
def block_apply(self, block):
2021-08-21 09:31:59 +02:00
"""Add data from block to aggregate.
:param block: Block to add
:type block: chainlib.block.Block
"""
2021-04-08 17:39:32 +02:00
if self.block_timestamp_last == None:
self.block_timestamp_last = block.timestamp
aggregate = block.timestamp - self.block_timestamp_last
if self.block_avg_aggregate == None:
self.block_avg_aggregate = float(aggregate)
else:
self.block_avg_aggregate *= self.block_avg_count
self.block_avg_aggregate += block.timestamp - self.block_timestamp_last
self.block_avg_aggregate /= (self.block_avg_count + 1)
self.block_avg_count += 1
self.block_timestamp_last = block.timestamp
2021-08-21 09:31:59 +02:00
2021-04-08 17:39:32 +02:00
def block_average(self):
2021-08-21 09:31:59 +02:00
"""Get current aggregated average.
:rtype: float
:returns: Aggregate average block time, in seconds
"""
2021-04-08 17:39:32 +02:00
return self.block_avg_aggregate