electrum-bitcoinprivate/scripts/servers

47 lines
1.2 KiB
Plaintext
Raw Normal View History

2012-10-14 09:31:08 -07:00
#!/usr/bin/env python
2013-04-29 01:21:27 -07:00
from electrum import interface, Interface, DEFAULT_SERVERS
2012-10-14 09:31:08 -07:00
import time, Queue
2013-04-29 01:21:27 -07:00
servers = interface.filter_protocol(DEFAULT_SERVERS,'s')
2012-10-14 09:31:08 -07:00
interfaces = map ( lambda server: Interface({'server':server} ), servers )
for i in interfaces: i.start()
2012-10-14 09:31:08 -07:00
for i in interfaces:
if i.is_connected:
i.send([('blockchain.numblocks.subscribe',[])])
i.status = "timed out"
2012-10-14 09:31:08 -07:00
else:
servers.remove(i.server)
2012-10-20 08:21:12 -07:00
i.status = "unreachable"
2012-10-14 09:31:08 -07:00
2012-10-17 08:47:48 -07:00
for i in interfaces:
while True:
2012-10-14 09:31:08 -07:00
try:
r = i.get_response(timeout=1)
2012-10-14 09:31:08 -07:00
except Queue.Empty:
2012-10-17 08:47:48 -07:00
break
2012-10-14 09:31:08 -07:00
if r.get('method') == 'blockchain.numblocks.subscribe':
servers.remove(i.server)
i.status = "ok"
i.blocks = r.get('result')
2012-10-17 08:47:48 -07:00
break
2012-10-14 09:31:08 -07:00
from collections import defaultdict
d = defaultdict(int)
for i in interfaces:
if i.status == 'ok':
d[i.blocks] += 1
2012-10-14 09:31:08 -07:00
v = d.values()
numblocks = d.keys()[v.index(max(v))]
2012-10-20 08:21:12 -07:00
for i in interfaces:
2012-10-22 02:34:21 -07:00
if i.status == 'ok':
if abs(i.blocks-numblocks)>1: i.status = "lagging"
else:
i.blocks = 0
print "%30s %d %s "%(i.host, i.blocks, i.status)
2012-10-14 09:31:08 -07:00