X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=scripts%2Fservers;h=9e0ce15dc43133590850cd20d0819179ec51ca47;hb=3cbe11a42473af52e7c5e002c36aaaf32646f627;hp=82971350e3840a0e812c75cbfdf6f526f9444eac;hpb=11a8e04dd07f39988a278f907d2d9dd8a9e12949;p=electrum-nvc.git diff --git a/scripts/servers b/scripts/servers index 8297135..9e0ce15 100755 --- a/scripts/servers +++ b/scripts/servers @@ -1,41 +1,49 @@ #!/usr/bin/env python -from electrum import Interface, DEFAULT_SERVERS +from electrum_nvc import Interface, SimpleConfig, set_verbosity +from electrum_nvc.network import DEFAULT_SERVERS, filter_protocol import time, Queue +from collections import defaultdict -servers = DEFAULT_SERVERS -interfaces = map ( lambda server: Interface({'server':server} ), servers ) -results = [] +set_verbosity(False) -for i in interfaces: - if i.is_connected: - i.start() - i.send([('blockchain.numblocks.subscribe',[])]) - else: - servers.remove(i.server) +config = SimpleConfig() +servers = filter_protocol(DEFAULT_SERVERS,'t') +interfaces = map ( lambda server: Interface(server, config), servers ) -for i in interfaces: - while True: - try: - r = i.responses.get(True,1) - except Queue.Empty: - break +q = Queue.Queue() +results_queue = Queue.Queue() - if r.get('method') == 'blockchain.numblocks.subscribe': - results.append((i.host, r.get('result'))) - servers.remove(i.server) - break +for i in interfaces: i.start(q) -for s in servers: - print "%30s "%s, "timed out" +reached_servers = [] + +while servers: + i = q.get(timeout=1000) + servers.remove(i.server) + if i.is_connected: + i.send([('blockchain.headers.subscribe',[])], lambda i,x: results_queue.put((i,x))) + reached_servers.append(i.server) + i.status = "ok" + else: + i.status = "unreachable" -from collections import defaultdict d = defaultdict(int) -for e in results: - d[e[1]] += 1 + +while reached_servers: + i, r = results_queue.get(timeout=1000) + i.blocks = r.get('result').get('block_height') + d[i.blocks] += 1 + reached_servers.remove(i.server) + v = d.values() numblocks = d.keys()[v.index(max(v))] -for s,n in results: - print "%30s %d "%(s, n), "ok" if abs(n-numblocks)<2 else "lagging" +for i in interfaces: + 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)