electrum-bitcoinprivate/scripts/servers

50 lines
1.2 KiB
Plaintext
Raw Normal View History

2012-10-14 09:31:08 -07:00
#!/usr/bin/env python
2013-10-06 05:13:20 -07:00
from electrum import Interface, SimpleConfig, set_verbosity
from electrum.network import DEFAULT_SERVERS, filter_protocol
2012-10-14 09:31:08 -07:00
import time, Queue
2013-10-06 05:13:20 -07:00
from collections import defaultdict
2012-10-14 09:31:08 -07:00
2013-10-06 05:13:20 -07:00
set_verbosity(False)
2012-10-14 09:31:08 -07:00
2013-10-06 05:13:20 -07:00
config = SimpleConfig()
servers = filter_protocol(DEFAULT_SERVERS,'t')
interfaces = map ( lambda server: Interface(server, config), servers )
q = Queue.Queue()
results_queue = Queue.Queue()
for i in interfaces: i.start(q)
reached_servers = []
while servers:
i = q.get(timeout=1000)
servers.remove(i.server)
2012-10-14 09:31:08 -07:00
if i.is_connected:
2014-02-11 05:08:48 -08:00
i.send([('blockchain.headers.subscribe',[])], lambda i,x: results_queue.put((i,x)))
2013-10-06 05:13:20 -07:00
reached_servers.append(i.server)
i.status = "ok"
2012-10-14 09:31:08 -07:00
else:
2012-10-20 08:21:12 -07:00
i.status = "unreachable"
2012-10-14 09:31:08 -07:00
2013-10-06 05:13:20 -07:00
d = defaultdict(int)
2012-10-17 08:47:48 -07:00
2013-10-06 05:13:20 -07:00
while reached_servers:
i, r = results_queue.get(timeout=1000)
2014-02-11 05:08:48 -08:00
i.blocks = r.get('result').get('block_height')
2013-10-06 05:13:20 -07:00
d[i.blocks] += 1
reached_servers.remove(i.server)
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:
2013-10-06 05:13:20 -07:00
if i.status == "ok":
2012-10-22 02:34:21 -07:00
if abs(i.blocks-numblocks)>1: i.status = "lagging"
else:
i.blocks = 0
2013-10-06 05:13:20 -07:00
2012-10-22 02:34:21 -07:00
print "%30s %d %s "%(i.host, i.blocks, i.status)
2012-10-14 09:31:08 -07:00