Browse Source

ref(replay): capture parse and value errors in search entrypoint (#78523)

Similar to https://github.com/getsentry/sentry/pull/76611/files. The
user.ip bug reported in
https://github.com/getsentry/sentry/issues/78286#issuecomment-2387065115
has no Sentry data, because of our API exception handlers. Sending these
to Sentry gives valuable debugging info for invalid searches.

HTTP response msg (status 400):
![Screenshot 2024-10-02 at 1 56
52 PM](https://github.com/user-attachments/assets/846c66d4-2678-4768-907a-df853ae9c9cf)
Andrew Liu 5 months ago
parent
commit
5b2f28ddbc
1 changed files with 32 additions and 27 deletions
  1. 32 27
      src/sentry/replays/usecases/query/__init__.py

+ 32 - 27
src/sentry/replays/usecases/query/__init__.py

@@ -219,33 +219,38 @@ def query_using_optimized_search(
             SearchFilter(SearchKey("environment"), "IN", SearchValue(environments)),
         ]
 
-    # Translate "viewed_by_me" filters, which are aliases for "viewed_by_id"
-    search_filters = handle_viewed_by_me_filters(search_filters, request_user_id)
-
-    if preferred_source == "materialized-view":
-        query, referrer, source = _query_using_materialized_view_strategy(
-            search_filters,
-            sort,
-            project_ids,
-            period_start,
-            period_stop,
-        )
-    elif preferred_source == "aggregated":
-        query, referrer, source = _query_using_aggregated_strategy(
-            search_filters,
-            sort,
-            project_ids,
-            period_start,
-            period_stop,
-        )
-    else:
-        query, referrer, source = _query_using_scalar_strategy(
-            search_filters,
-            sort,
-            project_ids,
-            period_start,
-            period_stop,
-        )
+    try:
+        # Translate "viewed_by_me" filters, which are aliases for "viewed_by_id"
+        search_filters = handle_viewed_by_me_filters(search_filters, request_user_id)
+
+        if preferred_source == "materialized-view":
+            query, referrer, source = _query_using_materialized_view_strategy(
+                search_filters,
+                sort,
+                project_ids,
+                period_start,
+                period_stop,
+            )
+        elif preferred_source == "aggregated":
+            query, referrer, source = _query_using_aggregated_strategy(
+                search_filters,
+                sort,
+                project_ids,
+                period_start,
+                period_stop,
+            )
+        else:
+            query, referrer, source = _query_using_scalar_strategy(
+                search_filters,
+                sort,
+                project_ids,
+                period_start,
+                period_stop,
+            )
+    except (ParseError, ValueError) as exc:
+        sentry_sdk.set_tag("org_id", organization.id if organization else None)
+        sentry_sdk.capture_exception(exc)
+        raise
 
     query = query.set_limit(pagination.limit)
     query = query.set_offset(pagination.offset)