From d50a81dd35f50eeb1547af2ec1add4a04b4bb5eb Mon Sep 17 00:00:00 2001 From: David Lougheed Date: Sat, 7 Sep 2024 19:01:43 -0400 Subject: [PATCH] chore: truncate webhook error max size + log webhook send exceptions (#621) --- canary/bot.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/canary/bot.py b/canary/bot.py index 9a0a028f..933e89c7 100644 --- a/canary/bot.py +++ b/canary/bot.py @@ -18,6 +18,7 @@ import aiosqlite import contextlib import logging +import sys import traceback from canary.config import Config @@ -71,10 +72,22 @@ def __init__(self, webhook_id, webhook_token, username=None): self.username = username or "Bot Logs" logging.Handler.__init__(self) self.webhook = Webhook.partial(webhook_id, webhook_token, adapter=RequestsWebhookAdapter()) + self.max_webhook_payload_size: int = 1800 def emit(self, record): msg = self.format(record) - self.webhook.send(f"```\n{msg}```", username=self.username) + try: + self.webhook.send( + f"```\n{msg[:self.max_webhook_payload_size]}" + f"{'[...]' if len(msg) > self.max_webhook_payload_size else ''}```", + username=self.username, + ) + except Exception as e: + logger.critical( + "An exception (%s) was encountered while trying to send a log message to a webhook:", str(e) + ) + logger.critical(traceback.format_exc()) + logger.critical("The attempted log message was: %s", msg) if config.dev_log_webhook_id and config.dev_log_webhook_token: