Improve lag handling.

This commit is contained in:
poljar (Damir Jelić) 2018-02-08 10:58:33 +01:00
parent e39fa57f83
commit 5c2c5a655c
3 changed files with 24 additions and 3 deletions

View file

@ -296,6 +296,7 @@ def receive_cb(server_name, file_descriptor):
message.response = HttpResponse(status, headers, body) message.response = HttpResponse(status, headers, body)
receive_time = time.time() receive_time = time.time()
server.lag = (receive_time - message.send_time) * 1000 server.lag = (receive_time - message.send_time) * 1000
server.lag_done = True
W.bar_item_update("lag") W.bar_item_update("lag")
message.receive_time = receive_time message.receive_time = receive_time

View file

@ -74,9 +74,15 @@ def matrix_bar_item_lag(data, item, window, buffer, extra_info):
if (buffer in server.buffers.values() or if (buffer in server.buffers.values() or
buffer == server.server_buffer): buffer == server.server_buffer):
if server.lag >= 500: if server.lag >= 500:
lag = "{0:.3f}" if server.lag < 1000 else "{0:.0f}" color = W.color("irc.color.item_lag_counting")
lag_string = "Lag: {lag}".format( if server.lag_done:
lag=lag.format(server.lag / 1000) color = W.color("irc.color.item_lag_finished")
lag = "{0:.3f}" if round(server.lag) < 1000 else "{0:.0f}"
lag_string = "Lag: {color}{lag}{ncolor}".format(
lag=lag.format((server.lag / 1000)),
color=color,
ncolor=W.color("reset")
) )
return lag_string return lag_string
return "" return ""

View file

@ -72,6 +72,7 @@ class MatrixServer:
self.next_batch = None # type: str self.next_batch = None # type: str
self.transaction_id = 0 # type: int self.transaction_id = 0 # type: int
self.lag = 0 # type: int self.lag = 0 # type: int
self.lag_done = False # type: bool
self.send_fd_hook = None # type: weechat.hook self.send_fd_hook = None # type: weechat.hook
self.send_buffer = b"" # type: bytes self.send_buffer = b"" # type: bytes
@ -461,6 +462,19 @@ def matrix_timer_cb(server_name, remaining_calls):
if not server.connected: if not server.connected:
return W.WEECHAT_RC_OK return W.WEECHAT_RC_OK
# check lag, disconnect if it's too big
if server.receive_queue:
message = server.receive_queue.popleft()
server.lag = (current_time - message.send_time) * 1000
server.receive_queue.appendleft(message)
server.lag_done = False
W.bar_item_update("lag")
# TODO print out message, make timeout configurable
if server.lag > 300000:
server.disconnect()
server.schedule_reconnect()
while server.send_queue: while server.send_queue:
message = server.send_queue.popleft() message = server.send_queue.popleft()
prnt_debug(DebugType.MESSAGING, server, prnt_debug(DebugType.MESSAGING, server,