From a70ac7e1cb170baef0cef88f70798f4b3cc9436b Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Mon, 8 Apr 2024 14:39:14 +0200 Subject: [PATCH] Factor out the idea (exception -> type_, value) what we have --- issues/utils.py | 13 ++++++++++++- sentry/eventtypes/base.py | 6 +++--- sentry/eventtypes/error.py | 20 ++++++-------------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/issues/utils.py b/issues/utils.py index 2a1491c..8187ec1 100644 --- a/issues/utils.py +++ b/issues/utils.py @@ -14,7 +14,8 @@ def get_issue_grouper_for_data(data): else: eventtype = DefaultEvent() - title = eventtype.get_title(data) + type_, value = eventtype.get_exception_type_and_value(data) + title = get_title_for_exception_type_and_value(type_, value) transaction = force_str(data.get("transaction") or "") fingerprint = data.get("fingerprint") event_type_name = type(eventtype).__name__ @@ -28,6 +29,16 @@ def get_issue_grouper_for_data(data): return default_issue_grouper(title, transaction, event_type_name) +def get_title_for_exception_type_and_value(type_, value): + if not value: + return type_ + + if not isinstance(value, str): + value = str(value) + + return "{}: {}".format(type_, value.splitlines()[0]) + + # utilities related to storing and retrieving release-versions; we use the fact that sentry (and we've adopted their # limitation) disallows the use of newlines in release-versions, so we can use newlines as a separator diff --git a/sentry/eventtypes/base.py b/sentry/eventtypes/base.py index 7ff7226..e5309c7 100644 --- a/sentry/eventtypes/base.py +++ b/sentry/eventtypes/base.py @@ -8,13 +8,13 @@ class DefaultEvent: actually say that this is basically the LogMessageEvent. """ - def get_title(self, data): + def get_exception_type_and_value(self, data): message = strip( get_path(data, "logentry", "message") or get_path(data, "logentry", "formatted") ) if message: - return truncatechars(message.splitlines()[0], 100) + return truncatechars(message.splitlines()[0], 100), "" - return "" + return "", "" diff --git a/sentry/eventtypes/error.py b/sentry/eventtypes/error.py index 5335add..fa89138 100644 --- a/sentry/eventtypes/error.py +++ b/sentry/eventtypes/error.py @@ -1,5 +1,3 @@ -from django.template.defaultfilters import truncatechars - from sentry.stacktraces.functions import get_function_name_for_frame from sentry.stacktraces.processing import get_crash_frame_from_event_data from sentry.utils.safe import get_path, trim @@ -18,14 +16,14 @@ def get_crash_location(data): class ErrorEvent: - def get_title(self, data): + def get_exception_type_and_value(self, data): if isinstance(data.get("exception"), list): if len(data["exception"]) == 0: - return "" + return "", "" exception = get_path(data, "exception", "values", -1) if not exception: - return "" + return "", "" value = trim(get_path(exception, "value", default=""), 1024) @@ -36,15 +34,9 @@ class ErrorEvent: if get_path(exception, "mechanism", "synthetic"): _, function = get_crash_location(data) if function: - return function - return "" + return function, "" + return "", "" type_ = trim(get_path(exception, "type", default="Error"), 128) - if not value: - return type_ - - if not isinstance(value, str): - value = str(value) - - return "{}: {}".format(type_, truncatechars(value.splitlines()[0])) + return type_, value