From f30f56e93bcf81072b7f8d93da97dcd45ac96475 Mon Sep 17 00:00:00 2001 From: Matthew Stratford Date: Thu, 31 Jan 2019 00:19:25 +0000 Subject: [PATCH 1/2] Hopefully fix Slack connection, copied from... https://github.com/rrah/streamcheck/commit/3a22ed8921b3b1ce3ade32ec94dd61bbd5686714 https://github.com/rrah/streamcheck/commit/5834615bab4ed6f0272b9b7c3f6ce6fc77d1a9a5 --- encodesrv/logs/bots/slack.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/encodesrv/logs/bots/slack.py b/encodesrv/logs/bots/slack.py index e9c9d6b..730e26e 100644 --- a/encodesrv/logs/bots/slack.py +++ b/encodesrv/logs/bots/slack.py @@ -13,6 +13,8 @@ from ...config import Config from ..messages import Message_enum +import websocket._exceptions + logger = logging.getLogger(__name__) class Slack_rtm_thread(threading.Thread): @@ -49,7 +51,17 @@ def run(self): msg = self.send_queue.get(block = False) self.slackclient.rtm_send_message(self.get_channel(), Config["servername"] + "> " + msg) except queue.Empty: - responses = self.slackclient.rtm_read() + try: + responses = self.slackclient.rtm_read() + except (ConnectionResetError, websocket._exceptions.WebSocketConnectionClosedException): + connect = self.slackclient.rtm_connect() + retries = 0 + while not connect: + if retries > 8: + retries = 8 + connect = self.slackclient.rtm_connect() + time.sleep(retries*15) + retries += 1 if responses == []: continue for msg in responses: From bc2afee8948dbe8c0f07dc8451606d4c892cd7e2 Mon Sep 17 00:00:00 2001 From: Matthew Stratford Date: Thu, 31 Jan 2019 00:19:45 +0000 Subject: [PATCH 2/2] Whitespace fixes --- encodesrv/logs/bots/slack.py | 52 ++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/encodesrv/logs/bots/slack.py b/encodesrv/logs/bots/slack.py index 730e26e..1a42708 100644 --- a/encodesrv/logs/bots/slack.py +++ b/encodesrv/logs/bots/slack.py @@ -18,28 +18,28 @@ logger = logging.getLogger(__name__) class Slack_rtm_thread(threading.Thread): - + def __init__(self, parent, api_key, send_queue): - + super(Slack_rtm_thread, self).__init__(daemon = True) self.api_key = api_key self.send_queue = send_queue self.channel = None self.parent = parent self.connected = False - + def get_connected(self): - + return self.connected - + def get_channel(self): - + return self.channel - + def set_channel(self, channel): - + self.channel = channel - + def run(self): self.slackclient = slackclient.SlackClient(self.api_key) connect = self.slackclient.rtm_connect() @@ -74,9 +74,9 @@ def run(self): time.sleep(0.1) else: raise Exception("Could not connect to Slack.") - + def _slack_respond(self, msg): - + matches = common.privmsg_re.findall(msg['text']) if len(matches) != 1: return @@ -85,23 +85,23 @@ def _slack_respond(self, msg): daemon = self.parent.parent enum = Message_enum form_msg = common.form_msg - + if cmd == "status": msg = form_msg(enum.status, daemon) else: msg = form_msg(enum.unknown_cmd, daemon) - + self.send_queue.put(msg) - + def __str__(self): - + return str(self.slackclient) - + class Encode_slack(): - + def __init__(self, parent, api_key = None, channel = None, **kwargs): - + assert type(api_key) == str self.send_queue = queue.Queue() self.rtm_thread = Slack_rtm_thread(self, api_key, self.send_queue) @@ -112,19 +112,19 @@ def __init__(self, parent, api_key = None, channel = None, **kwargs): while not self.rtm_thread.get_connected(): time.sleep(0.1) logger.info("Connected to Slack.") - + def get_channel(self): - + return self.rtm_thread.get_channel() - + def set_channel(self, channel): - + self.rtm_thread.set_channel(channel) - + def send_msg(self, msg): - + self.send_queue.put(msg) - + def emit(self, record): - self.send_msg(record.getMessage()) + self.send_msg(record.getMessage())