fix: random_choice -> random.choice
[electrum-nvc.git] / scripts / servers
1 #!/usr/bin/env python
2
3 from electrum import Interface, DEFAULT_SERVERS
4 import time, Queue
5
6 servers = DEFAULT_SERVERS
7 interfaces = map ( lambda server: Interface({'server':server} ), servers )
8 results = []
9
10 for i in interfaces:
11     if i.is_connected:
12         i.start()
13         i.send([('blockchain.numblocks.subscribe',[])])
14     else:
15         servers.remove(i.server)
16         i.status = "unreachable"
17
18 for i in interfaces:
19     while True:
20         try:
21             r = i.responses.get(True,1)
22         except Queue.Empty:
23             break
24
25         if r.get('method') == 'blockchain.numblocks.subscribe':
26             results.append((i.host, r.get('result')))
27             i.status = "ok"
28             servers.remove(i.server)
29             break
30
31 for s in servers:
32     i.status = "timed out"
33
34 from collections import defaultdict
35 d = defaultdict(int)
36 for e in results:
37     d[e[1]] += 1
38 v = d.values()
39 numblocks = d.keys()[v.index(max(v))]
40
41 for i in interfaces:
42     print i.host, i.status
43
44 for s,n in results:
45     print "%30s   %d   "%(s, n), "ok" if abs(n-numblocks)<2 else "lagging"
46