show lag in status line
This commit is contained in:
parent
a38298c5ee
commit
c0abd3c34e
|
@ -538,8 +538,8 @@ class ElectrumWindow(QMainWindow):
|
||||||
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.is_lagging:
|
elif self.network.server_lag > 1:
|
||||||
text = _("Server is lagging")
|
text = _("Server is lagging (%d blocks)"%self.network.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)
|
||||||
|
|
|
@ -36,8 +36,6 @@ class Blockchain(threading.Thread):
|
||||||
self.headers_url = 'http://headers.electrum.org/blockchain_headers'
|
self.headers_url = 'http://headers.electrum.org/blockchain_headers'
|
||||||
self.set_local_height()
|
self.set_local_height()
|
||||||
self.queue = Queue.Queue()
|
self.queue = Queue.Queue()
|
||||||
self.servers_height = {}
|
|
||||||
self.is_lagging = False
|
|
||||||
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
@ -69,11 +67,13 @@ class Blockchain(threading.Thread):
|
||||||
if not header: continue
|
if not header: continue
|
||||||
|
|
||||||
height = header.get('block_height')
|
height = header.get('block_height')
|
||||||
self.servers_height[i.server] = height
|
|
||||||
|
if height <= self.local_height:
|
||||||
|
continue
|
||||||
|
|
||||||
if height > self.local_height + 50:
|
if height > self.local_height + 50:
|
||||||
self.get_chunks(i, header, height)
|
if not self.get_and_verify_chunks(i, header, height):
|
||||||
self.network.trigger_callback('updated')
|
continue
|
||||||
|
|
||||||
if height > self.local_height:
|
if height > self.local_height:
|
||||||
# get missing parts from interface (until it connects to my chain)
|
# get missing parts from interface (until it connects to my chain)
|
||||||
|
@ -91,22 +91,9 @@ class Blockchain(threading.Thread):
|
||||||
else:
|
else:
|
||||||
print_error("error", i.server)
|
print_error("error", i.server)
|
||||||
# todo: dismiss that server
|
# todo: dismiss that server
|
||||||
|
continue
|
||||||
|
|
||||||
if self.network.is_connected():
|
self.network.new_blockchain_height(height, i)
|
||||||
h = self.servers_height.get(self.network.interface.server)
|
|
||||||
else:
|
|
||||||
h = None
|
|
||||||
|
|
||||||
if h is not None and h < height - 1:
|
|
||||||
print_error( "Server is lagging", height, h)
|
|
||||||
if self.config.get('auto_cycle'):
|
|
||||||
self.network.set_server(i.server)
|
|
||||||
else:
|
|
||||||
self.network.is_lagging = True
|
|
||||||
else:
|
|
||||||
self.network.is_lagging = False
|
|
||||||
|
|
||||||
self.network.trigger_callback('updated')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -385,7 +372,7 @@ class Blockchain(threading.Thread):
|
||||||
return chain
|
return chain
|
||||||
|
|
||||||
|
|
||||||
def get_chunks(self, i, header, height):
|
def get_and_verify_chunks(self, i, header, height):
|
||||||
requested_chunks = []
|
requested_chunks = []
|
||||||
queue = Queue.Queue()
|
queue = Queue.Queue()
|
||||||
min_index = (self.local_height + 1)/2016
|
min_index = (self.local_height + 1)/2016
|
||||||
|
@ -412,9 +399,14 @@ class Blockchain(threading.Thread):
|
||||||
result = r['result']
|
result = r['result']
|
||||||
|
|
||||||
index = params[0]
|
index = params[0]
|
||||||
self.verify_chunk(index, result)
|
try:
|
||||||
|
self.verify_chunk(index, result)
|
||||||
|
except:
|
||||||
|
return False
|
||||||
requested_chunks.remove(index)
|
requested_chunks.remove(index)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ class Network(threading.Thread):
|
||||||
self.interface = None
|
self.interface = None
|
||||||
self.proxy = self.config.get('proxy')
|
self.proxy = self.config.get('proxy')
|
||||||
self.heights = {}
|
self.heights = {}
|
||||||
|
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):
|
||||||
|
@ -206,6 +207,18 @@ class Network(threading.Thread):
|
||||||
self.config.set_key('recent_servers', self.recent_servers)
|
self.config.set_key('recent_servers', self.recent_servers)
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
self.trigger_callback('updated')
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.blockchain.start()
|
self.blockchain.start()
|
||||||
|
@ -231,6 +244,8 @@ class Network(threading.Thread):
|
||||||
else:
|
else:
|
||||||
self.disconnected_servers.append(i.server)
|
self.disconnected_servers.append(i.server)
|
||||||
self.interfaces.pop(i.server)
|
self.interfaces.pop(i.server)
|
||||||
|
if i.server in self.heights:
|
||||||
|
self.heights.pop(i.server)
|
||||||
if i == self.interface:
|
if i == self.interface:
|
||||||
self.interface = None
|
self.interface = None
|
||||||
self.trigger_callback('disconnected')
|
self.trigger_callback('disconnected')
|
||||||
|
|
Loading…
Reference in New Issue