Browse Source

fix(api): Use Filter.start to pass the start date (#30105)

Using start in conditions like we do currently causes extra query clauses in clickhouse.
Just use the Filter.start property so that we have just the one clause for the lower bound.
Dan Fuller 3 years ago
parent
commit
a24ab43def

+ 6 - 7
src/sentry/api/endpoints/project_events.py

@@ -1,6 +1,8 @@
-from datetime import datetime, timedelta
+from datetime import timedelta
 from functools import partial
 
+from django.utils import timezone
+
 from sentry import eventstore, features
 from sentry.api.bases.project import ProjectEndpoint
 from sentry.api.helpers.group_index import rate_limit_endpoint
@@ -34,20 +36,17 @@ class ProjectEventsEndpoint(ProjectEndpoint):
         if query:
             conditions.append([["positionCaseInsensitive", ["message", f"'{query}'"]], "!=", 0])
 
+        event_filter = eventstore.Filter(conditions=conditions, project_ids=[project.id])
         if features.has(
             "organizations:project-event-date-limit", project.organization, actor=request.user
         ):
-            conditions.extend(
-                [
-                    ["timestamp", ">", datetime.now() - timedelta(days=7)],
-                ]
-            )
+            event_filter.start = timezone.now() - timedelta(days=7)
 
         full = request.GET.get("full", False)
 
         data_fn = partial(
             eventstore.get_events,
-            filter=eventstore.Filter(conditions=conditions, project_ids=[project.id]),
+            filter=event_filter,
             referrer="api.project-events",
         )
 

+ 1 - 9
tests/snuba/api/endpoints/test_project_events.py

@@ -82,9 +82,7 @@ class ProjectEventsTest(APITestCase, SnubaTestCase):
         event = self.store_event(
             data={"timestamp": iso_format(before_now(days=2))}, project_id=project.id
         )
-        event_2 = self.store_event(
-            data={"timestamp": iso_format(before_now(days=8))}, project_id=project.id
-        )
+        self.store_event(data={"timestamp": iso_format(before_now(days=8))}, project_id=project.id)
 
         url = reverse(
             "sentry-api-0-project-events",
@@ -94,12 +92,6 @@ class ProjectEventsTest(APITestCase, SnubaTestCase):
             },
         )
 
-        response = self.client.get(url, format="json")
-        assert response.status_code == 200, response.content
-        assert len(response.data) == 2
-        assert response.data[0]["eventID"] == event.event_id
-        assert response.data[1]["eventID"] == event_2.event_id
-
         with self.feature("organizations:project-event-date-limit"):
             response = self.client.get(url, format="json")
             assert response.status_code == 200, response.content