fix servers script
[electrum-nvc.git] / scripts / servers
1 #!/usr/bin/env python
2
3 from electrum import interface, Interface, DEFAULT_SERVERS
4 import time, Queue
5
6 servers = interface.filter_protocol(DEFAULT_SERVERS,'s')
7 interfaces = map ( lambda server: Interface({'server':server} ), servers )
8 for i in interfaces: i.start()
9
10 for i in interfaces:
11     if i.is_connected:
12         i.send([('blockchain.numblocks.subscribe',[])])
13         i.status = "timed out"
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.get_response(timeout=1)
22         except Queue.Empty:
23             break
24
25         if r.get('method') == 'blockchain.numblocks.subscribe':
26             servers.remove(i.server)
27             i.status = "ok"
28             i.blocks = r.get('result')
29             break
30
31
32 from collections import defaultdict
33 d = defaultdict(int)
34 for i in interfaces:
35     if i.status == 'ok':
36         d[i.blocks] += 1
37 v = d.values()
38 numblocks = d.keys()[v.index(max(v))]
39
40 for i in interfaces:
41     if i.status == 'ok':
42         if abs(i.blocks-numblocks)>1: i.status = "lagging" 
43     else:
44         i.blocks = 0
45     print "%30s   %d   %s   "%(i.host, i.blocks, i.status)
46