From 5c2c5a655cab4feb587fbbd4e2e8d6602cb9372c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?poljar=20=28Damir=20Jeli=C4=87=29?= Date: Thu, 8 Feb 2018 10:58:33 +0100 Subject: [PATCH] Improve lag handling. --- main.py | 1 + matrix/bar_items.py | 12 +++++++++--- matrix/server.py | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 51ebeb3..6158a43 100644 --- a/main.py +++ b/main.py @@ -296,6 +296,7 @@ def receive_cb(server_name, file_descriptor): message.response = HttpResponse(status, headers, body) receive_time = time.time() server.lag = (receive_time - message.send_time) * 1000 + server.lag_done = True W.bar_item_update("lag") message.receive_time = receive_time diff --git a/matrix/bar_items.py b/matrix/bar_items.py index 3c46f1f..7613d8e 100644 --- a/matrix/bar_items.py +++ b/matrix/bar_items.py @@ -74,9 +74,15 @@ def matrix_bar_item_lag(data, item, window, buffer, extra_info): if (buffer in server.buffers.values() or buffer == server.server_buffer): if server.lag >= 500: - lag = "{0:.3f}" if server.lag < 1000 else "{0:.0f}" - lag_string = "Lag: {lag}".format( - lag=lag.format(server.lag / 1000) + color = W.color("irc.color.item_lag_counting") + if server.lag_done: + 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 "" diff --git a/matrix/server.py b/matrix/server.py index 19ae9b1..ce34db1 100644 --- a/matrix/server.py +++ b/matrix/server.py @@ -72,6 +72,7 @@ class MatrixServer: self.next_batch = None # type: str self.transaction_id = 0 # type: int self.lag = 0 # type: int + self.lag_done = False # type: bool self.send_fd_hook = None # type: weechat.hook self.send_buffer = b"" # type: bytes @@ -461,6 +462,19 @@ def matrix_timer_cb(server_name, remaining_calls): if not server.connected: 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: message = server.send_queue.popleft() prnt_debug(DebugType.MESSAGING, server,