Initial novacoin support
[electrum-nvc.git] / scripts / servers
1 #!/usr/bin/env python
2
3 from electrum_nvc import Interface, SimpleConfig, set_verbosity
4 from electrum_nvc.network import DEFAULT_SERVERS, filter_protocol
5 import time, Queue
6 from collections import defaultdict
7
8 set_verbosity(False)
9
10 config = SimpleConfig()
11 servers = filter_protocol(DEFAULT_SERVERS,'t')
12 interfaces = map ( lambda server: Interface(server, config), servers )
13
14 q = Queue.Queue()
15 results_queue = Queue.Queue()
16
17 for i in interfaces: i.start(q)
18
19 reached_servers = []
20
21 while servers:
22     i = q.get(timeout=1000)
23     servers.remove(i.server)
24     if i.is_connected:
25         i.send([('blockchain.headers.subscribe',[])], lambda i,x: results_queue.put((i,x)))
26         reached_servers.append(i.server)
27         i.status = "ok"
28     else:
29         i.status = "unreachable"
30
31 d = defaultdict(int)
32
33 while reached_servers:
34     i, r = results_queue.get(timeout=1000)
35     i.blocks = r.get('result').get('block_height')
36     d[i.blocks] += 1
37     reached_servers.remove(i.server)
38
39 v = d.values()
40 numblocks = d.keys()[v.index(max(v))]
41
42 for i in interfaces:
43     if i.status == "ok":
44         if abs(i.blocks-numblocks)>1: i.status = "lagging" 
45     else:
46         i.blocks = 0
47
48     print "%30s   %d   %s   "%(i.host, i.blocks, i.status)
49