Skip to content

Commit c72fc6b

Browse files
evanhNisanthan Nanthakumar
authored and
Nisanthan Nanthakumar
committed
fix(tasks) Add event data to user report asynchronously
If an event hasn't been propagated when the user report is created, then queue a task to sync the event data once it's stored fully.
1 parent aa55a91 commit c72fc6b

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

src/sentry/conf/server.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ def SOCIAL_AUTH_DEFAULT_USERNAME():
523523
CELERY_IMPORTS = (
524524
"sentry.discover.tasks",
525525
"sentry.incidents.tasks",
526+
"sentry.tasks.assemble",
526527
"sentry.tasks.auth",
527528
"sentry.tasks.auto_resolve_issues",
528529
"sentry.tasks.beacon",
@@ -534,6 +535,8 @@ def SOCIAL_AUTH_DEFAULT_USERNAME():
534535
"sentry.tasks.deletion",
535536
"sentry.tasks.digests",
536537
"sentry.tasks.email",
538+
"sentry.tasks.files",
539+
"sentry.tasks.integrations",
537540
"sentry.tasks.members",
538541
"sentry.tasks.merge",
539542
"sentry.tasks.options",
@@ -543,14 +546,12 @@ def SOCIAL_AUTH_DEFAULT_USERNAME():
543546
"sentry.tasks.reports",
544547
"sentry.tasks.reprocessing",
545548
"sentry.tasks.scheduler",
549+
"sentry.tasks.sentry_apps",
550+
"sentry.tasks.servicehooks",
546551
"sentry.tasks.signals",
547552
"sentry.tasks.store",
548553
"sentry.tasks.unmerge",
549-
"sentry.tasks.servicehooks",
550-
"sentry.tasks.assemble",
551-
"sentry.tasks.integrations",
552-
"sentry.tasks.files",
553-
"sentry.tasks.sentry_apps",
554+
"sentry.tasks.update_user_reports",
554555
)
555556
CELERY_QUEUES = [
556557
Queue("activity.notify", routing_key="activity.notify"),
@@ -662,6 +663,11 @@ def create_partitioned_queues(name):
662663
"schedule": timedelta(days=1),
663664
"options": {"expires": 3600 * 24},
664665
},
666+
"update-user-reports": {
667+
"task": "sentry.tasks.update_user_reports",
668+
"schedule": timedelta(minutes=15),
669+
"options": {"expires": 300},
670+
},
665671
"schedule-auto-resolution": {
666672
"task": "sentry.tasks.schedule_auto_resolution",
667673
"schedule": timedelta(minutes=15),
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from __future__ import absolute_import
2+
3+
from datetime import timedelta
4+
5+
from django.utils import timezone
6+
7+
from sentry import eventstore
8+
from sentry.models import UserReport
9+
from sentry.tasks.base import instrumented_task
10+
11+
12+
@instrumented_task(name="sentry.tasks.update_user_reports", queue="update")
13+
def update_user_reports(**kwargs):
14+
now = timezone.now()
15+
user_reports = UserReport.objects.filter(
16+
group__isnull=True, environment__isnull=True, date_added__gte=now - timedelta(days=1)
17+
)
18+
19+
for report in user_reports:
20+
event = eventstore.get_event_by_id(report.project_id, report.event_id)
21+
if event:
22+
report.update(group_id=event.group_id, environment=event.get_environment())
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from __future__ import absolute_import
2+
3+
from datetime import timedelta
4+
5+
from django.utils import timezone
6+
7+
from sentry.models import UserReport
8+
from sentry.tasks.update_user_reports import update_user_reports
9+
from sentry.testutils import TestCase
10+
11+
12+
class UpdateUserReportTest(TestCase):
13+
def test_simple(self):
14+
now = timezone.now()
15+
project = self.create_project()
16+
event1 = self.store_event(data={}, project_id=project.id)
17+
report1 = UserReport.objects.create(project=project, event_id=event1.event_id)
18+
event2 = self.store_event(data={}, project_id=project.id)
19+
report2 = UserReport.objects.create(
20+
project=project, event_id=event2.event_id, date_added=now - timedelta(days=2)
21+
)
22+
23+
with self.tasks():
24+
update_user_reports()
25+
26+
report1 = UserReport.objects.get(project=project, event_id=event1.id)
27+
report2 = UserReport.objects.get(project=project, event_id=event2.id)
28+
assert report1.group_id == event1.group_id
29+
assert report1.environment == event1.get_environment()
30+
assert report2.group is None
31+
assert report2.environment is None

0 commit comments

Comments
 (0)