Skip to content

Commit 32b2ee9

Browse files
constantiniusandrewshie-sentry
authored andcommitted
ref(analytics): Transform analytics events for issue-detection-backend (#95217)
- Transform event classes to use @analytics.eventclass decorator - Transform analytics.record calls to use event class instances - Update imports as needed Closes TET-838
1 parent 2cd7c60 commit 32b2ee9

File tree

9 files changed

+61
-44
lines changed

9 files changed

+61
-44
lines changed
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
from sentry import analytics
22

33

4+
@analytics.eventclass("eventuser_endpoint.request")
45
class EventUserEndpointRequest(analytics.Event):
5-
type = "eventuser_endpoint.request"
6-
7-
attributes = (
8-
analytics.Attribute("endpoint", required=True),
9-
analytics.Attribute("project_id", required=False),
10-
)
6+
endpoint: str
7+
project_id: int | None = None
118

129

1310
analytics.register(EventUserEndpointRequest)
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
from sentry import analytics
22

33

4+
@analytics.eventclass("first_profile.sent")
45
class FirstProfileSentEvent(analytics.Event):
5-
type = "first_profile.sent"
6-
7-
attributes = (
8-
analytics.Attribute("organization_id"),
9-
analytics.Attribute("project_id"),
10-
analytics.Attribute("platform", required=False),
11-
analytics.Attribute("user_id", required=False),
12-
)
6+
organization_id: int
7+
project_id: int
8+
platform: str | None = None
9+
user_id: int | None = None
1310

1411

1512
analytics.register(FirstProfileSentEvent)

src/sentry/api/endpoints/group_tagkey_values.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from rest_framework.response import Response
44

55
from sentry import analytics, tagstore
6+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
67
from sentry.api.api_owners import ApiOwner
78
from sentry.api.api_publish_status import ApiPublishStatus
89
from sentry.api.base import region_silo_endpoint
@@ -68,9 +69,10 @@ def get(self, request: Request, group, key) -> Response:
6869
List a Tag's Values
6970
"""
7071
analytics.record(
71-
"eventuser_endpoint.request",
72-
project_id=group.project_id,
73-
endpoint="sentry.api.endpoints.group_tagkey_values.get",
72+
EventUserEndpointRequest(
73+
project_id=group.project_id,
74+
endpoint="sentry.api.endpoints.group_tagkey_values.get",
75+
)
7476
)
7577
lookup_key = tagstore.backend.prefix_reserved_key(key)
7678

src/sentry/api/endpoints/project_users.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from rest_framework.response import Response
33

44
from sentry import analytics
5+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
56
from sentry.api.api_publish_status import ApiPublishStatus
67
from sentry.api.base import region_silo_endpoint
78
from sentry.api.bases.project import ProjectAndStaffPermission, ProjectEndpoint
@@ -41,9 +42,10 @@ def get(self, request: Request, project) -> Response:
4142
For example, ``query=email:[email protected]``
4243
"""
4344
analytics.record(
44-
"eventuser_endpoint.request",
45-
project_id=project.id,
46-
endpoint="sentry.api.endpoints.project_users.get",
45+
EventUserEndpointRequest(
46+
project_id=project.id,
47+
endpoint="sentry.api.endpoints.project_users.get",
48+
)
4749
)
4850
field, identifier = None, None
4951
if request.GET.get("query"):

src/sentry/receivers/onboarding.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.db.models import F
88

99
from sentry import analytics
10+
from sentry.analytics.events.first_profile_sent import FirstProfileSentEvent
1011
from sentry.integrations.base import IntegrationDomain, get_integration_types
1112
from sentry.integrations.services.integration import RpcIntegration, integration_service
1213
from sentry.models.organization import Organization
@@ -182,11 +183,12 @@ def record_first_transaction(project, event, **kwargs):
182183
@first_profile_received.connect(weak=False, dispatch_uid="onboarding.record_first_profile")
183184
def record_first_profile(project, **kwargs):
184185
analytics.record(
185-
"first_profile.sent",
186-
user_id=get_owner_id(project),
187-
organization_id=project.organization_id,
188-
project_id=project.id,
189-
platform=project.platform,
186+
FirstProfileSentEvent(
187+
user_id=get_owner_id(project),
188+
organization_id=project.organization_id,
189+
project_id=project.id,
190+
platform=project.platform,
191+
)
190192
)
191193

192194

src/sentry/tasks/unmerge.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from django.db.models.base import Model
1212

1313
from sentry import analytics, eventstore, features, similarity, tsdb
14+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
1415
from sentry.constants import DEFAULT_LOGGER_NAME, LOG_LEVELS_MAP
1516
from sentry.culprit import generate_culprit
1617
from sentry.eventstore.models import BaseEvent
@@ -380,9 +381,10 @@ def repair_group_release_data(caches, project, events):
380381

381382
def get_event_user_from_interface(value, project):
382383
analytics.record(
383-
"eventuser_endpoint.request",
384-
project_id=project.id,
385-
endpoint="sentry.tasks.unmerge.get_event_user_from_interface",
384+
EventUserEndpointRequest(
385+
project_id=project.id,
386+
endpoint="sentry.tasks.unmerge.get_event_user_from_interface",
387+
)
386388
)
387389
return EventUser(
388390
user_ident=value.get("id"),

tests/sentry/api/endpoints/test_group_tagkey_values.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from django.test import override_settings
66
from django.utils import timezone
77

8+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
89
from sentry.testutils.cases import APITestCase, PerformanceIssueTestCase, SnubaTestCase
10+
from sentry.testutils.helpers.analytics import assert_last_analytics_event
911
from sentry.testutils.helpers.datetime import before_now, freeze_time
1012

1113

@@ -33,10 +35,12 @@ def test_simple(self, mock_record):
3335

3436
assert response.data[0]["value"] == "bar"
3537

36-
mock_record.assert_called_with(
37-
"eventuser_endpoint.request",
38-
project_id=project.id,
39-
endpoint="sentry.api.endpoints.group_tagkey_values.get",
38+
assert_last_analytics_event(
39+
mock_record,
40+
EventUserEndpointRequest(
41+
project_id=project.id,
42+
endpoint="sentry.api.endpoints.group_tagkey_values.get",
43+
),
4044
)
4145

4246
def test_simple_perf(self):
@@ -208,8 +212,10 @@ def test_ratelimit(self, mock_record) -> None:
208212
response = self.client.get(url)
209213
assert response.status_code == 429
210214

211-
mock_record.assert_called_with(
212-
"eventuser_endpoint.request",
213-
project_id=project.id,
214-
endpoint="sentry.api.endpoints.group_tagkey_values.get",
215+
assert_last_analytics_event(
216+
mock_record,
217+
EventUserEndpointRequest(
218+
project_id=project.id,
219+
endpoint="sentry.api.endpoints.group_tagkey_values.get",
220+
),
215221
)

tests/sentry/api/endpoints/test_project_users.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
from django.utils import timezone
55

6+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
67
from sentry.testutils.cases import APITestCase, SnubaTestCase
8+
from sentry.testutils.helpers.analytics import assert_any_analytics_event
79
from sentry.utils.eventuser import EventUser
810

911

@@ -55,10 +57,13 @@ def _assert_simple_response(self, response, mock_record):
5557
assert sorted(map(lambda x: x["id"], response.data)) == sorted(
5658
[str(self.euser1.id), str(self.euser2.id)]
5759
)
58-
mock_record.assert_any_call(
59-
"eventuser_endpoint.request",
60-
project_id=self.project.id,
61-
endpoint="sentry.api.endpoints.project_users.get",
60+
61+
assert_any_analytics_event(
62+
mock_record,
63+
EventUserEndpointRequest(
64+
project_id=self.project.id,
65+
endpoint="sentry.api.endpoints.project_users.get",
66+
),
6267
)
6368

6469
@mock.patch("sentry.analytics.record")

tests/snuba/tasks/test_unmerge.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from django.utils import timezone
1313

1414
from sentry import eventstream, tsdb
15+
from sentry.analytics.events.eventuser_endpoint_request import EventUserEndpointRequest
1516
from sentry.eventstore.models import Event
1617
from sentry.models.environment import Environment
1718
from sentry.models.group import Group
@@ -31,6 +32,7 @@
3132
unmerge,
3233
)
3334
from sentry.testutils.cases import SnubaTestCase, TestCase
35+
from sentry.testutils.helpers.analytics import assert_last_analytics_event
3436
from sentry.testutils.helpers.datetime import before_now
3537
from sentry.testutils.helpers.features import with_feature
3638
from sentry.tsdb.base import TSDBModel
@@ -452,10 +454,12 @@ def collect_by_user_tag(aggregate, event):
452454
aggregate.add(
453455
get_event_user_from_interface(event.data["user"], event.group.project).tag_value
454456
)
455-
mock_record.assert_called_with(
456-
"eventuser_endpoint.request",
457-
project_id=event.group.project.id,
458-
endpoint="sentry.tasks.unmerge.get_event_user_from_interface",
457+
assert_last_analytics_event(
458+
mock_record,
459+
EventUserEndpointRequest(
460+
project_id=event.group.project.id,
461+
endpoint="sentry.tasks.unmerge.get_event_user_from_interface",
462+
),
459463
)
460464
return aggregate
461465

0 commit comments

Comments
 (0)