URI: 
       tfix servers script - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 33db7a0c43fbf17cd1ca34528d2d39a0270f854d
   DIR parent 66f224eab4e2ff4bf630db9cc1355c5b446ae934
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sun,  6 Oct 2013 14:13:20 +0200
       
       fix servers script
       
       Diffstat:
         M scripts/servers                     |      55 ++++++++++++++++---------------
       
       1 file changed, 29 insertions(+), 26 deletions(-)
       ---
   DIR diff --git a/scripts/servers b/scripts/servers
       t@@ -1,46 +1,49 @@
        #!/usr/bin/env python
        
       -from electrum import interface, Interface, DEFAULT_SERVERS
       +from electrum import Interface, SimpleConfig, set_verbosity
       +from electrum.network import DEFAULT_SERVERS, filter_protocol
        import time, Queue
       +from collections import defaultdict
        
       -servers = interface.filter_protocol(DEFAULT_SERVERS,'s')
       -interfaces = map ( lambda server: Interface({'server':server} ), servers )
       -for i in interfaces: i.start()
       +set_verbosity(False)
        
       -for i in interfaces:
       +config = SimpleConfig()
       +servers = filter_protocol(DEFAULT_SERVERS,'t')
       +interfaces = map ( lambda server: Interface(server, config), servers )
       +
       +q = Queue.Queue()
       +results_queue = Queue.Queue()
       +
       +for i in interfaces: i.start(q)
       +
       +reached_servers = []
       +
       +while servers:
       +    i = q.get(timeout=1000)
       +    servers.remove(i.server)
            if i.is_connected:
       -        i.send([('blockchain.numblocks.subscribe',[])])
       -        i.status = "timed out"
       +        i.send([('blockchain.numblocks.subscribe',[])], lambda i,x: results_queue.put((i,x)))
       +        reached_servers.append(i.server)
       +        i.status = "ok"
            else:
       -        servers.remove(i.server)
                i.status = "unreachable"
        
       -for i in interfaces:
       -    while True:
       -        try:
       -            r = i.get_response(timeout=1)
       -        except Queue.Empty:
       -            break
       -
       -        if r.get('method') == 'blockchain.numblocks.subscribe':
       -            servers.remove(i.server)
       -            i.status = "ok"
       -            i.blocks = r.get('result')
       -            break
       +d = defaultdict(int)
        
       +while reached_servers:
       +    i, r = results_queue.get(timeout=1000)
       +    i.blocks = r.get('result')
       +    d[i.blocks] += 1
       +    reached_servers.remove(i.server)
        
       -from collections import defaultdict
       -d = defaultdict(int)
       -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:
       -    if i.status == 'ok':
       +    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)