From f30f56e93bcf81072b7f8d93da97dcd45ac96475 Mon Sep 17 00:00:00 2001 From: Matthew Stratford Date: Thu, 31 Jan 2019 00:19:25 +0000 Subject: [PATCH 1/3] 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/3] 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()) From 5c6fc5f427e4de83bc8528d9c2bcc55efc20d768 Mon Sep 17 00:00:00 2001 From: Matthew Stratford Date: Thu, 31 Jan 2019 00:40:35 +0000 Subject: [PATCH 3/3] Change message regex https://github.com/rrah/streamcheck/commit/812dd92111a915ec3d244fd5ede6eb6b0f08ed30 --- encodesrv/logs/bots/common.py | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/encodesrv/logs/bots/common.py b/encodesrv/logs/bots/common.py index f57c521..4686f63 100644 --- a/encodesrv/logs/bots/common.py +++ b/encodesrv/logs/bots/common.py @@ -8,22 +8,22 @@ from ...config import Config from ..messages import Message_enum, message_dict -privmsg_re = re.compile(r"^]*)>?: *(.*)") +privmsg_re = re.compile(r"^]*)>?:? *(.*)$") """Regex to pull the user and message from Slack/IRC strings.""" def form_msg(enum_value, encodesrv_daemon = None): - + """Form whatever message is required. - + Arguments: enum_value (Message_enum): The enum value related to the requested message. encodesrv_daemon (EncodeSrvDaemon): Main encodesrv instance. - + Returns: Message (string). """ - + if enum_value == Message_enum.status: assert encodesrv_daemon != None return form_status_msg(encodesrv_daemon) @@ -32,49 +32,49 @@ def form_msg(enum_value, encodesrv_daemon = None): def form_help_msg(): - + """Form a nice, human readable, help message for the bot. - + Arguments: None. - + Returns: Help message (string). """ - + return message_dict[Message_enum.unknown_cmd] def form_status_msg(encodesrv_daemon): - + """Form a nice, human readable message for the status of the server. - + Arguments: None. - + Returns: Status message (string). """ - + encoding = encodesrv_daemon.get_current_jobs() - + if encoding == []: encoding = 'no jobs' else: encoding = ', '.join(encoding).rstrip(', ') - + dbconn = psycopg2.connect(**Config["database"]) cur = dbconn.cursor() - cur.execute("""SELECT COUNT(*) - FROM encode_jobs - WHERE status ='Not Encoding' + cur.execute("""SELECT COUNT(*) + FROM encode_jobs + WHERE status ='Not Encoding' or status = 'Waiting' """) waiting = cur.fetchone()[0] cur.close() dbconn.close() - - return message_dict[Message_enum.status].format(enc_jobs = encoding, - wait_jobs = waiting, - pl = "" if int(waiting) == 1 else "s" + + return message_dict[Message_enum.status].format(enc_jobs = encoding, + wait_jobs = waiting, + pl = "" if int(waiting) == 1 else "s" )