2121from django .utils .translation import ugettext_lazy as _
2222
2323from sentry import eventtypes , tagstore , options
24- from sentry .constants import (
25- DEFAULT_LOGGER_NAME , EVENT_ORDERING_KEY , LOG_LEVELS , MAX_CULPRIT_LENGTH
26- )
24+ from sentry .constants import DEFAULT_LOGGER_NAME , LOG_LEVELS , MAX_CULPRIT_LENGTH
2725from sentry .db .models import (
2826 BaseManager , BoundedBigIntegerField , BoundedIntegerField , BoundedPositiveIntegerField ,
2927 FlexibleForeignKey , GzippedDictField , Model , sane_repr
@@ -158,24 +156,13 @@ def from_event_id(self, project, event_id):
158156 Resolves the 32 character event_id string into
159157 a Group for which it is found.
160158 """
161- from sentry .models import EventMapping , Event
159+ from sentry .models import SnubaEvent
162160 group_id = None
163161
164- # Look up event_id in both Event and EventMapping,
165- # and bail when it matches one of them, prioritizing
166- # Event since it contains more history.
167- for model in Event , EventMapping :
168- try :
169- group_id = model .objects .filter (
170- project_id = project .id ,
171- event_id = event_id ,
172- ).values_list ('group_id' , flat = True )[0 ]
173-
174- # It's possible that group_id is NULL
175- if group_id is not None :
176- break
177- except IndexError :
178- pass
162+ event = SnubaEvent .objects .from_event_id (event_id , project .id )
163+
164+ if event :
165+ group_id = event .group_id
179166
180167 if group_id is None :
181168 # Raise a Group.DoesNotExist here since it makes
@@ -186,18 +173,22 @@ def from_event_id(self, project, event_id):
186173 return Group .objects .get (id = group_id )
187174
188175 def filter_by_event_id (self , project_ids , event_id ):
189- from sentry .models import EventMapping , Event
176+ from sentry .utils import snuba
177+
190178 group_ids = set ()
191- # see above for explanation as to why we're
192- # looking at both Event and EventMapping
193- for model in Event , EventMapping :
194- group_ids .update (
195- model .objects .filter (
196- project_id__in = project_ids ,
197- event_id = event_id ,
198- group_id__isnull = False ,
199- ).values_list ('group_id' , flat = True )
200- )
179+
180+ group_ids = set ([evt ['issue' ] for evt in snuba .raw_query (
181+ start = datetime .utcfromtimestamp (0 ),
182+ end = datetime .utcnow (),
183+ selected_columns = ['issue' ],
184+ conditions = [['issue' , 'IS NOT NULL' , None ]],
185+ filter_keys = {
186+ 'event_id' : [event_id ],
187+ 'project_id' : project_ids ,
188+ },
189+ limit = 1 ,
190+ referrer = "Group.filter_by_event_id" ,
191+ )['data' ]])
201192
202193 return Group .objects .filter (id__in = group_ids )
203194
@@ -325,11 +316,6 @@ def qualified_short_id(self):
325316 if self .short_id is not None :
326317 return '%s-%s' % (self .project .slug .upper (), base32_encode (self .short_id ), )
327318
328- @property
329- def event_set (self ):
330- from sentry .models import Event
331- return Event .objects .filter (group_id = self .id )
332-
333319 def is_over_resolve_age (self ):
334320 resolve_age = self .project .get_option ('sentry:resolve_age' , None )
335321 if not resolve_age :
@@ -390,21 +376,7 @@ def get_score(self):
390376 return type (self ).calculate_score (self .times_seen , self .last_seen )
391377
392378 def get_latest_event (self ):
393- from sentry .models import Event
394-
395- if not hasattr (self , '_latest_event' ):
396- latest_events = sorted (
397- Event .objects .filter (
398- group_id = self .id ,
399- ).order_by ('-datetime' )[0 :5 ],
400- key = EVENT_ORDERING_KEY ,
401- reverse = True ,
402- )
403- try :
404- self ._latest_event = latest_events [0 ]
405- except IndexError :
406- self ._latest_event = None
407- return self ._latest_event
379+ return self .get_latest_event_for_environments ()
408380
409381 def get_latest_event_for_environments (self , environments = ()):
410382 use_snuba = options .get ('snuba.events-queries.enabled' )
@@ -419,22 +391,6 @@ def get_latest_event_for_environments(self, environments=()):
419391 issue_id = self .id ,
420392 project_id = self .project_id )
421393
422- def get_oldest_event (self ):
423- from sentry .models import Event
424-
425- if not hasattr (self , '_oldest_event' ):
426- oldest_events = sorted (
427- Event .objects .filter (
428- group_id = self .id ,
429- ).order_by ('datetime' )[0 :5 ],
430- key = EVENT_ORDERING_KEY ,
431- )
432- try :
433- self ._oldest_event = oldest_events [0 ]
434- except IndexError :
435- self ._oldest_event = None
436- return self ._oldest_event
437-
438394 def get_oldest_event_for_environments (self , environments = ()):
439395 use_snuba = options .get ('snuba.events-queries.enabled' )
440396
0 commit comments