URI: 
       tsend server height and server lag with daemon - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit af3fd62fd4eaac1365b0b1f3bd5c6dde3e2182c6
   DIR parent 96070246b72acb4c97d8e0726c636cea3adc4fea
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Fri, 25 Jul 2014 16:32:19 +0200
       
       send server height and server lag with daemon
       
       Diffstat:
         M electrum                            |       5 +++--
         M gui/qt/main_window.py               |       7 ++++---
         M lib/daemon.py                       |       2 +-
         M lib/network.py                      |      33 ++++++++++++++++---------------
         M lib/network_proxy.py                |      10 +++++++---
       
       5 files changed, 32 insertions(+), 25 deletions(-)
       ---
   DIR diff --git a/electrum b/electrum
       t@@ -272,8 +272,9 @@ if __name__ == '__main__':
                    network.start()
                    if arg == 'status':
                        print_json({
       -                    'main_server': network.get_parameters()[0],
       -                    'height': network.get_local_height(),
       +                    'server': network.get_parameters()[0],
       +                    'blockchain_height': network.get_local_height(),
       +                    'server_height': network.get_server_height(),
                            'nodes': network.get_interfaces(),
                            'connected': network.is_connected()
                        })
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -467,12 +467,13 @@ class ElectrumWindow(QMainWindow):
                    icon = QIcon(":icons/status_disconnected.png")
        
                elif self.network.is_connected():
       +            server_lag = self.network.get_local_height() - self.network.get_server_height()
                    if not self.wallet.up_to_date:
                        text = _("Synchronizing...")
                        icon = QIcon(":icons/status_waiting.png")
       -            #elif self.network.server_lag > 1:
       -            #    text = _("Server is lagging (%d blocks)"%self.network.server_lag)
       -            #    icon = QIcon(":icons/status_lagging.png")
       +            elif server_lag > 1:
       +                text = _("Server is lagging (%d blocks)"%server_lag)
       +                icon = QIcon(":icons/status_lagging.png")
                    else:
                        c, u = self.wallet.get_account_balance(self.current_account)
                        text =  _( "Balance" ) + ": %s "%( self.format_amount(c) ) + self.base_unit()
   DIR diff --git a/lib/daemon.py b/lib/daemon.py
       t@@ -199,7 +199,7 @@ class NetworkServer:
                elif key == 'banner':
                    value = self.network.banner
                elif key == 'updated':
       -            value = self.network.get_local_height()
       +            value = (self.network.get_local_height(), self.network.get_server_height())
                elif key == 'servers':
                    value = self.network.get_servers()
                elif key == 'interfaces':
   DIR diff --git a/lib/network.py b/lib/network.py
       t@@ -105,7 +105,6 @@ class Network(threading.Thread):
                self.heights = {}
                self.merkle_roots = {}
                self.utxo_roots = {}
       -        self.server_lag = 0
        
                dir_path = os.path.join( self.config.path, 'certs')
                if not os.path.exists(dir_path):
       t@@ -119,6 +118,17 @@ class Network(threading.Thread):
        
                self.connection_status = 'connecting'
        
       +    def get_server_height(self):
       +        return self.heights.get(self.default_server,0)
       +
       +    def server_is_lagging(self):
       +        h = self.get_server_height()
       +        if not h:
       +            print_error('no height for main interface')
       +            return False
       +        lag = self.get_local_height() - self.get_server_height()
       +        return lag > 1
       +
            def set_status(self, status):
                self.connection_status = status
                self.trigger_callback('status')
       t@@ -247,7 +257,7 @@ class Network(threading.Thread):
                    if not self.interface.is_connected:
                        self.switch_to_random_interface()
                    else:
       -                if self.server_lag > 0:
       +                if self.server_is_lagging():
                            self.stop_interface()
                else:
                    self.set_server(server)
       t@@ -262,9 +272,6 @@ class Network(threading.Thread):
                server = interface.server
                print_error("switching to", server)
                self.interface = interface
       -        h =  self.heights.get(server)
       -        if h:
       -            self.server_lag = self.blockchain.height() - h
                self.config.set_key('server', server, False)
                self.default_server = server
                self.send_subscriptions()
       t@@ -310,15 +317,10 @@ class Network(threading.Thread):
        
            def new_blockchain_height(self, blockchain_height, i):
                if self.is_connected():
       -            h = self.heights.get(self.interface.server)
       -            if h:
       -                self.server_lag = blockchain_height - h
       -                if self.server_lag > 1:
       -                    print_error( "Server is lagging", blockchain_height, h)
       -                    if self.config.get('auto_cycle'):
       -                        self.set_server(i.server)
       -            else:
       -                print_error('no height for main interface')
       +            if self.server_is_lagging():
       +                print_error( "Server is lagging", blockchain_height, h)
       +                if self.config.get('auto_cycle'):
       +                    self.set_server(i.server)
                
                self.trigger_callback('updated')
        
       t@@ -377,8 +379,7 @@ class Network(threading.Thread):
                self.blockchain.queue.put((i,result))
        
                if i == self.interface:
       -            self.server_lag = self.blockchain.height() - height
       -            if self.server_lag > 1 and self.config.get('auto_cycle'):
       +            if self.server_is_lagging() and self.config.get('auto_cycle'):
                        print_error( "Server lagging, stopping interface")
                        self.stop_interface()
        
   DIR diff --git a/lib/network_proxy.py b/lib/network_proxy.py
       t@@ -57,7 +57,8 @@ class NetworkProxy(threading.Thread):
                self.status = 'connecting'
                self.servers = {}
                self.banner = ''
       -        self.height = 0
       +        self.blockchain_height = 0
       +        self.server_height = 0
                self.interfaces = []
        
            def is_running(self):
       t@@ -99,7 +100,7 @@ class NetworkProxy(threading.Thread):
                    elif key == 'banner':
                        self.banner = value
                    elif key == 'updated':
       -                self.height = value
       +                self.blockchain_height, self.server_height = value
                    elif key == 'servers':
                        self.servers = value
                    elif key == 'interfaces':
       t@@ -176,7 +177,10 @@ class NetworkProxy(threading.Thread):
                return self.synchronous_get([('network.get_header',[height])])[0]
        
            def get_local_height(self):
       -        return self.height
       +        return self.blockchain_height
       +
       +    def get_server_height(self):
       +        return self.server_height
        
            def is_connected(self):
                return self.status == 'connected'