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
|