mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
error_notify: Drop any remaining browser-side errors in RabbitMQ queue.
This commit is contained in:
committed by
Tim Abbott
parent
e536a14b61
commit
daba72c116
@@ -40,67 +40,7 @@ def deployment_repr(report: Dict[str, Any]) -> str:
|
||||
return deployment
|
||||
|
||||
|
||||
def notify_browser_error(report: Dict[str, Any]) -> None:
|
||||
report = defaultdict(lambda: None, report)
|
||||
if settings.ERROR_BOT:
|
||||
zulip_browser_error(report, settings.ERROR_BOT)
|
||||
email_browser_error(report)
|
||||
|
||||
|
||||
def email_browser_error(report: Dict[str, Any]) -> None:
|
||||
user_info = user_info_str(report)
|
||||
email_subject = f"Browser error for {user_info}"
|
||||
body = f"User: {user_info}"
|
||||
|
||||
body += """\
|
||||
|
||||
Message:
|
||||
{message}
|
||||
|
||||
Stacktrace:
|
||||
{stacktrace}
|
||||
|
||||
IP address: {ip_address}
|
||||
User agent: {user_agent}
|
||||
href: {href}
|
||||
Server path: {server_path}
|
||||
Deployed server version: {server_version}
|
||||
Web version: {web_version}
|
||||
""".format(
|
||||
**report
|
||||
)
|
||||
|
||||
more_info = report["more_info"]
|
||||
if more_info is not None:
|
||||
body += "\nAdditional information:"
|
||||
for key, value in more_info.items():
|
||||
body += f"\n {key}: {value}"
|
||||
|
||||
body += "\n\nLog:\n{log}".format(**report)
|
||||
|
||||
mail_admins(email_subject, body)
|
||||
|
||||
|
||||
def zulip_browser_error(report: Dict[str, Any], error_bot_email: str) -> None:
|
||||
user_info = user_info_str(report)
|
||||
email_subject = f"JS error: {user_info}"
|
||||
|
||||
body = f"User: {user_info}\n"
|
||||
body += "Message: {message}\n".format(**report)
|
||||
|
||||
error_bot_realm = get_realm(settings.STAFF_SUBDOMAIN)
|
||||
error_bot = get_system_bot(error_bot_email, error_bot_realm.id)
|
||||
errors_stream = get_stream("errors", error_bot_realm)
|
||||
|
||||
internal_send_stream_message(
|
||||
error_bot,
|
||||
errors_stream,
|
||||
format_email_subject(email_subject),
|
||||
body,
|
||||
)
|
||||
|
||||
|
||||
def notify_server_error(report: Dict[str, Any]) -> None:
|
||||
def do_report_error(report: Dict[str, Any]) -> None:
|
||||
report = defaultdict(lambda: None, report)
|
||||
email_server_error(report)
|
||||
if settings.ERROR_BOT:
|
||||
@@ -188,10 +128,3 @@ Error generated by {user_info}
|
||||
{request_repr}"""
|
||||
|
||||
mail_admins(format_email_subject(email_subject), message, fail_silently=True)
|
||||
|
||||
|
||||
def do_report_error(type: str, report: Dict[str, Any]) -> None:
|
||||
if type == "browser":
|
||||
notify_browser_error(report)
|
||||
elif type == "server":
|
||||
notify_server_error(report)
|
||||
|
||||
@@ -118,7 +118,7 @@ class AdminNotifyHandlerTest(ZulipTestCase):
|
||||
return record
|
||||
|
||||
def run_handler(self, record: logging.LogRecord) -> Dict[str, object]:
|
||||
with patch("zerver.lib.error_notify.notify_server_error") as patched_notify:
|
||||
with patch("zerver.worker.queue_processors.do_report_error") as patched_notify:
|
||||
self.handler.emit(record)
|
||||
patched_notify.assert_called_once()
|
||||
return patched_notify.call_args[0][0]
|
||||
@@ -210,7 +210,7 @@ class AdminNotifyHandlerTest(ZulipTestCase):
|
||||
|
||||
# Test the catch-all exception handler doesn't throw
|
||||
with patch(
|
||||
"zerver.lib.error_notify.notify_server_error", side_effect=Exception("queue error")
|
||||
"zerver.worker.queue_processors.do_report_error", side_effect=Exception("queue error")
|
||||
):
|
||||
self.handler.emit(record)
|
||||
with mock_queue_publish(
|
||||
|
||||
@@ -830,11 +830,16 @@ class ErrorReporter(QueueProcessingWorker):
|
||||
error_types = ["browser", "server"]
|
||||
assert event["type"] in error_types
|
||||
|
||||
logging.info(
|
||||
"Processing traceback with type %s for %s", event["type"], event.get("user_email")
|
||||
)
|
||||
if settings.ERROR_REPORTING:
|
||||
do_report_error(event["type"], event["report"])
|
||||
# Drop any old remaining browser-side errors; these now use
|
||||
# Sentry.
|
||||
if event["type"] == "browser":
|
||||
return
|
||||
|
||||
if not settings.ERROR_REPORTING:
|
||||
return
|
||||
|
||||
logging.info("Processing traceback for %s", event.get("user_email"))
|
||||
do_report_error(event["report"])
|
||||
|
||||
|
||||
@assign_queue("digest_emails")
|
||||
|
||||
Reference in New Issue
Block a user