#!/usr/bin/env python
-from electrum import Interface, DEFAULT_SERVERS
+from electrum import interface, Interface, DEFAULT_SERVERS
import time, Queue
-servers = DEFAULT_SERVERS
+servers = interface.filter_protocol(DEFAULT_SERVERS,'s')
interfaces = map ( lambda server: Interface({'server':server} ), servers )
-results = []
+for i in interfaces: i.start()
for i in interfaces:
if i.is_connected:
- i.start()
i.send([('blockchain.numblocks.subscribe',[])])
+ i.status = "timed out"
else:
servers.remove(i.server)
i.status = "unreachable"
for i in interfaces:
while True:
try:
- r = i.responses.get(True,1)
+ r = i.get_response(timeout=1)
except Queue.Empty:
break
if r.get('method') == 'blockchain.numblocks.subscribe':
- results.append((i.host, r.get('result')))
- i.status = "ok"
servers.remove(i.server)
+ i.status = "ok"
+ i.blocks = r.get('result')
break
-for s in servers:
- i.status = "timed out"
from collections import defaultdict
d = defaultdict(int)
-for e in results:
- d[e[1]] += 1
+for i in interfaces:
+ if i.status == 'ok':
+ d[i.blocks] += 1
v = d.values()
numblocks = d.keys()[v.index(max(v))]
for i in interfaces:
- print i.host, i.status
-
-for s,n in results:
- print "%30s %d "%(s, n), "ok" if abs(n-numblocks)<2 else "lagging"
+ 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)