Browse Source

ref(api): Add support to snuba group serializer for date filtering userCount

Jess MacQueen 6 years ago
parent
commit
55b6849bf8

+ 5 - 1
src/sentry/api/serializers/models/group.py

@@ -544,8 +544,10 @@ class SharedGroupSerializer(GroupSerializer):
 
 
 class GroupSerializerSnuba(GroupSerializerBase):
-    def __init__(self, environment_ids=None):
+    def __init__(self, environment_ids=None, start=None, end=None):
         self.environment_ids = environment_ids
+        self.start = start
+        self.end = end
 
     def _get_seen_stats(self, item_list, user):
         tagstore = SnubaTagStorage()
@@ -555,6 +557,8 @@ class GroupSerializerSnuba(GroupSerializerBase):
             project_ids,
             group_ids,
             environment_ids=self.environment_ids,
+            start=self.start,
+            end=self.end,
         )
 
         first_seen = {}

+ 16 - 6
tests/snuba/api/serializers/test_group.py

@@ -301,17 +301,18 @@ class GroupSerializerSnubaTest(APITestCase, SnubaTestCase):
 
         events = []
 
-        for event_id, env in [
-            ('a' * 32, environment),
-            ('b' * 32, environment),
-            ('c' * 32, environment2),
+        for event_id, env, user_id, timestamp in [
+            ('a' * 32, environment, 1, self.min_ago.isoformat()[:19]),
+            ('b' * 32, environment, 2, self.min_ago.isoformat()[:19]),
+            ('c' * 32, environment2, 3, self.week_ago.isoformat()[:19]),
         ]:
             events.append(self.store_event(
                 data={
                     'event_id': event_id,
                     'fingerprint': ['put-me-in-group1'],
-                    'timestamp': self.min_ago.isoformat()[:19],
-                    'environment': env.name
+                    'timestamp': timestamp,
+                    'environment': env.name,
+                    'user': {'id': user_id},
                 },
                 project_id=self.project.id
             ))
@@ -346,6 +347,15 @@ class GroupSerializerSnubaTest(APITestCase, SnubaTestCase):
         assert result['lastSeen'] == self.min_ago - timedelta(microseconds=self.min_ago.microsecond)
         assert result['firstSeen'] == group_env.first_seen
         assert group_env2.first_seen > group_env.first_seen
+        assert result['userCount'] == 3
+
+        # test userCount filtering correctly by time
+        result = serialize(group, serializer=GroupSerializerSnuba(
+            environment_ids=[environment.id, environment2.id],
+            start=self.week_ago - timedelta(hours=1),
+            end=self.week_ago + timedelta(hours=1),
+        ))
+        assert result['userCount'] == 1
 
 
 class StreamGroupSerializerTestCase(APITestCase, SnubaTestCase):