-
Notifications
You must be signed in to change notification settings - Fork 7
/
metrics.py
66 lines (53 loc) · 2.34 KB
/
metrics.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import sys
import time
from datetime import datetime, timedelta
from selfupdate import *
from userconfig import INTERVAL
from knownstates import NUM_OF_STATES
from knownstates import NUM_OF_STATES_AS_OF
known_states = 0
web3 = Web3(Web3.HTTPProvider(NODE_ADDRESS)) # your node
# NUM_OF_STATES = 446266045 # Actual for Feb, 15 2020
def signal_handler(signal, frame):
print('Stopping...')
updater(known_states, NUM_OF_STATES)
##TODO: PUSH STATE TOTAL FILE TO SERVER MAYBE?
sys.exit(3)
signal.signal(signal.SIGINT, signal_handler)
def measure(interval=INTERVAL):
if web3.eth.syncing == False:
print('NOT SYNCING')
sys.exit(1)
if isinstance(web3.eth.syncing, object):
remain = 1
period = interval
known_states = web3.eth.syncing['knownStates']
max_speed = min_speed = 0
print('Calculating...')
while remain:
remain = NUM_OF_STATES - web3.eth.syncing['knownStates']
pulled = web3.eth.syncing['pulledStates']
time.sleep(interval)
if web3.eth.syncing != False:
speed = (web3.eth.syncing['knownStates'] - known_states) / period
if speed > max_speed:
max_speed = speed
if speed < min_speed or not min_speed:
min_speed = speed
period += interval
if NUM_OF_STATES > known_states:
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'avg:', round(speed), 'max:', round(max_speed), 'min:', round(min_speed), 'states/s',
'\tremain:', remain, 'states\t', web3.net.peerCount, 'peers',
'\teta@', timedelta(seconds=remain / speed))
if NUM_OF_STATES < known_states:
updater(known_states, NUM_OF_STATES)
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'avg:', round(speed), 'max:', round(max_speed), 'min:', round(min_speed), 'states/s',
'\tremaining best guess:', (NUM_OF_STATES_AS_OF - pulled), 'states\t', web3.net.peerCount,
'peers',
'\teta@', timedelta(seconds=(NUM_OF_STATES_AS_OF - pulled) / speed))
measure(INTERVAL)