1
1
# -*- coding: utf-8 -*-
2
2
# Generated by Django 1.9.13 on 2019-12-30 20:52
3
- from __future__ import unicode_literals
3
+ from __future__ import unicode_literals , print_function
4
4
5
5
import os
6
6
from datetime import timedelta , datetime
@@ -20,9 +20,9 @@ def backfill_eventstream(apps, schema_editor):
20
20
from sentry import eventstore , eventstream
21
21
from sentry .utils .query import RangeQuerySetWrapper
22
22
23
- Event = apps .get_model (' sentry' , ' Event' )
24
- Group = apps .get_model (' sentry' , ' Group' )
25
- Project = apps .get_model (' sentry' , ' Project' )
23
+ Event = apps .get_model (" sentry" , " Event" )
24
+ Group = apps .get_model (" sentry" , " Group" )
25
+ Project = apps .get_model (" sentry" , " Project" )
26
26
27
27
# Kill switch to skip this migration
28
28
skip_backfill = os .environ .get ("SENTRY_SKIP_EVENTS_BACKFILL_FOR_10" , False )
@@ -34,20 +34,26 @@ def backfill_eventstream(apps, schema_editor):
34
34
def get_events (last_days ):
35
35
to_date = datetime .now ()
36
36
from_date = to_date - timedelta (days = last_days )
37
- return Event .objects .filter (datetime__gte = from_date , datetime__lte = to_date , group_id__isnull = False )
37
+ return Event .objects .filter (
38
+ datetime__gte = from_date , datetime__lte = to_date , group_id__isnull = False
39
+ )
38
40
39
41
def _attach_related (_events ):
40
- project_ids = {event .project_id for event in _events }
42
+ project_ids = set ()
43
+ group_ids = set ()
44
+ for event in _events :
45
+ project_ids .add (event .project_id )
46
+ group_ids .add (event .group_id )
41
47
projects = {p .id : p for p in Project .objects .filter (id__in = project_ids )}
42
- group_ids = {event .group_id for event in _events }
43
48
groups = {g .id : g for g in Group .objects .filter (id__in = group_ids )}
49
+
44
50
for event in _events :
45
- event .project = projects [ event .project_id ]
46
- event .group = groups [ event .group_id ]
51
+ event .project = projects . get ( event .project_id )
52
+ event .group = groups . get ( event .group_id )
47
53
eventstore .bind_nodes (_events , "data" )
48
54
49
55
if skip_backfill :
50
- print ("Skipping backfill\n " )
56
+ print ("Skipping backfill. \n " )
51
57
return
52
58
53
59
events = get_events (retention_days )
@@ -59,8 +65,13 @@ def _attach_related(_events):
59
65
60
66
print ("Events to process: {}\n " .format (count ))
61
67
68
+ processed = 0
62
69
for event in RangeQuerySetWrapper (events , step = 100 , callbacks = (_attach_related ,)):
63
70
primary_hash = event .get_primary_hash ()
71
+ if event .project is None or event .group is None :
72
+ print ("Skipped {} as group or project information is invalid.\n " .format (event ))
73
+ continue
74
+
64
75
eventstream .insert (
65
76
group = event .group ,
66
77
event = event ,
@@ -70,8 +81,9 @@ def _attach_related(_events):
70
81
primary_hash = primary_hash ,
71
82
skip_consume = True ,
72
83
)
84
+ processed += 1
73
85
74
- print ("Done. \n " )
86
+ print ("Event migration done. Processed {} of {} events. \n " . format ( processed , count ) )
75
87
76
88
77
89
class Migration (migrations .Migration ):
@@ -89,9 +101,8 @@ class Migration(migrations.Migration):
89
101
# - Adding columns to highly active tables, even ones that are NULL.
90
102
is_dangerous = True
91
103
92
-
93
104
dependencies = [
94
- (' sentry' , ' 0023_hide_environment_none_20191126' ),
105
+ (" sentry" , " 0023_hide_environment_none_20191126" ),
95
106
]
96
107
97
108
operations = [
0 commit comments