You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.1 KiB
46 lines
1.1 KiB
#!/usr/bin/env python |
|
|
|
from electrum import Interface, DEFAULT_SERVERS |
|
import time, Queue |
|
|
|
servers = DEFAULT_SERVERS |
|
interfaces = map ( lambda server: Interface({'server':server} ), servers ) |
|
results = [] |
|
|
|
for i in interfaces: |
|
if i.is_connected: |
|
i.start() |
|
i.send([('blockchain.numblocks.subscribe',[])]) |
|
else: |
|
servers.remove(i.server) |
|
i.status = "unreachable" |
|
|
|
for i in interfaces: |
|
while True: |
|
try: |
|
r = i.responses.get(True,1) |
|
except Queue.Empty: |
|
break |
|
|
|
if r.get('method') == 'blockchain.numblocks.subscribe': |
|
results.append((i.host, r.get('result'))) |
|
i.status = "ok" |
|
servers.remove(i.server) |
|
break |
|
|
|
for s in servers: |
|
i.status = "timed out" |
|
|
|
from collections import defaultdict |
|
d = defaultdict(int) |
|
for e in results: |
|
d[e[1]] += 1 |
|
v = d.values() |
|
numblocks = d.keys()[v.index(max(v))] |
|
|
|
for i in interfaces: |
|
print i.host, i.status |
|
|
|
for s,n in results: |
|
print "%30s %d "%(s, n), "ok" if abs(n-numblocks)<2 else "lagging" |
|
|
|
|