send server height and server lag with daemon
This commit is contained in:
5
electrum
5
electrum
@@ -272,8 +272,9 @@ if __name__ == '__main__':
|
|||||||
network.start()
|
network.start()
|
||||||
if arg == 'status':
|
if arg == 'status':
|
||||||
print_json({
|
print_json({
|
||||||
'main_server': network.get_parameters()[0],
|
'server': network.get_parameters()[0],
|
||||||
'height': network.get_local_height(),
|
'blockchain_height': network.get_local_height(),
|
||||||
|
'server_height': network.get_server_height(),
|
||||||
'nodes': network.get_interfaces(),
|
'nodes': network.get_interfaces(),
|
||||||
'connected': network.is_connected()
|
'connected': network.is_connected()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -467,12 +467,13 @@ class ElectrumWindow(QMainWindow):
|
|||||||
icon = QIcon(":icons/status_disconnected.png")
|
icon = QIcon(":icons/status_disconnected.png")
|
||||||
|
|
||||||
elif self.network.is_connected():
|
elif self.network.is_connected():
|
||||||
|
server_lag = self.network.get_local_height() - self.network.get_server_height()
|
||||||
if not self.wallet.up_to_date:
|
if not self.wallet.up_to_date:
|
||||||
text = _("Synchronizing...")
|
text = _("Synchronizing...")
|
||||||
icon = QIcon(":icons/status_waiting.png")
|
icon = QIcon(":icons/status_waiting.png")
|
||||||
#elif self.network.server_lag > 1:
|
elif server_lag > 1:
|
||||||
# text = _("Server is lagging (%d blocks)"%self.network.server_lag)
|
text = _("Server is lagging (%d blocks)"%server_lag)
|
||||||
# icon = QIcon(":icons/status_lagging.png")
|
icon = QIcon(":icons/status_lagging.png")
|
||||||
else:
|
else:
|
||||||
c, u = self.wallet.get_account_balance(self.current_account)
|
c, u = self.wallet.get_account_balance(self.current_account)
|
||||||
text = _( "Balance" ) + ": %s "%( self.format_amount(c) ) + self.base_unit()
|
text = _( "Balance" ) + ": %s "%( self.format_amount(c) ) + self.base_unit()
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ class NetworkServer:
|
|||||||
elif key == 'banner':
|
elif key == 'banner':
|
||||||
value = self.network.banner
|
value = self.network.banner
|
||||||
elif key == 'updated':
|
elif key == 'updated':
|
||||||
value = self.network.get_local_height()
|
value = (self.network.get_local_height(), self.network.get_server_height())
|
||||||
elif key == 'servers':
|
elif key == 'servers':
|
||||||
value = self.network.get_servers()
|
value = self.network.get_servers()
|
||||||
elif key == 'interfaces':
|
elif key == 'interfaces':
|
||||||
|
|||||||
@@ -105,7 +105,6 @@ class Network(threading.Thread):
|
|||||||
self.heights = {}
|
self.heights = {}
|
||||||
self.merkle_roots = {}
|
self.merkle_roots = {}
|
||||||
self.utxo_roots = {}
|
self.utxo_roots = {}
|
||||||
self.server_lag = 0
|
|
||||||
|
|
||||||
dir_path = os.path.join( self.config.path, 'certs')
|
dir_path = os.path.join( self.config.path, 'certs')
|
||||||
if not os.path.exists(dir_path):
|
if not os.path.exists(dir_path):
|
||||||
@@ -119,6 +118,17 @@ class Network(threading.Thread):
|
|||||||
|
|
||||||
self.connection_status = 'connecting'
|
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):
|
def set_status(self, status):
|
||||||
self.connection_status = status
|
self.connection_status = status
|
||||||
self.trigger_callback('status')
|
self.trigger_callback('status')
|
||||||
@@ -247,7 +257,7 @@ class Network(threading.Thread):
|
|||||||
if not self.interface.is_connected:
|
if not self.interface.is_connected:
|
||||||
self.switch_to_random_interface()
|
self.switch_to_random_interface()
|
||||||
else:
|
else:
|
||||||
if self.server_lag > 0:
|
if self.server_is_lagging():
|
||||||
self.stop_interface()
|
self.stop_interface()
|
||||||
else:
|
else:
|
||||||
self.set_server(server)
|
self.set_server(server)
|
||||||
@@ -262,9 +272,6 @@ class Network(threading.Thread):
|
|||||||
server = interface.server
|
server = interface.server
|
||||||
print_error("switching to", server)
|
print_error("switching to", server)
|
||||||
self.interface = interface
|
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.config.set_key('server', server, False)
|
||||||
self.default_server = server
|
self.default_server = server
|
||||||
self.send_subscriptions()
|
self.send_subscriptions()
|
||||||
@@ -310,15 +317,10 @@ class Network(threading.Thread):
|
|||||||
|
|
||||||
def new_blockchain_height(self, blockchain_height, i):
|
def new_blockchain_height(self, blockchain_height, i):
|
||||||
if self.is_connected():
|
if self.is_connected():
|
||||||
h = self.heights.get(self.interface.server)
|
if self.server_is_lagging():
|
||||||
if h:
|
print_error( "Server is lagging", blockchain_height, h)
|
||||||
self.server_lag = blockchain_height - h
|
if self.config.get('auto_cycle'):
|
||||||
if self.server_lag > 1:
|
self.set_server(i.server)
|
||||||
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')
|
|
||||||
|
|
||||||
self.trigger_callback('updated')
|
self.trigger_callback('updated')
|
||||||
|
|
||||||
@@ -377,8 +379,7 @@ class Network(threading.Thread):
|
|||||||
self.blockchain.queue.put((i,result))
|
self.blockchain.queue.put((i,result))
|
||||||
|
|
||||||
if i == self.interface:
|
if i == self.interface:
|
||||||
self.server_lag = self.blockchain.height() - height
|
if self.server_is_lagging() and self.config.get('auto_cycle'):
|
||||||
if self.server_lag > 1 and self.config.get('auto_cycle'):
|
|
||||||
print_error( "Server lagging, stopping interface")
|
print_error( "Server lagging, stopping interface")
|
||||||
self.stop_interface()
|
self.stop_interface()
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ class NetworkProxy(threading.Thread):
|
|||||||
self.status = 'connecting'
|
self.status = 'connecting'
|
||||||
self.servers = {}
|
self.servers = {}
|
||||||
self.banner = ''
|
self.banner = ''
|
||||||
self.height = 0
|
self.blockchain_height = 0
|
||||||
|
self.server_height = 0
|
||||||
self.interfaces = []
|
self.interfaces = []
|
||||||
|
|
||||||
def is_running(self):
|
def is_running(self):
|
||||||
@@ -99,7 +100,7 @@ class NetworkProxy(threading.Thread):
|
|||||||
elif key == 'banner':
|
elif key == 'banner':
|
||||||
self.banner = value
|
self.banner = value
|
||||||
elif key == 'updated':
|
elif key == 'updated':
|
||||||
self.height = value
|
self.blockchain_height, self.server_height = value
|
||||||
elif key == 'servers':
|
elif key == 'servers':
|
||||||
self.servers = value
|
self.servers = value
|
||||||
elif key == 'interfaces':
|
elif key == 'interfaces':
|
||||||
@@ -176,7 +177,10 @@ class NetworkProxy(threading.Thread):
|
|||||||
return self.synchronous_get([('network.get_header',[height])])[0]
|
return self.synchronous_get([('network.get_header',[height])])[0]
|
||||||
|
|
||||||
def get_local_height(self):
|
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):
|
def is_connected(self):
|
||||||
return self.status == 'connected'
|
return self.status == 'connected'
|
||||||
|
|||||||
Reference in New Issue
Block a user