Browse Source

feat(group-event-json): Add support for Snuba event IDs (#12566)

Adds support for Snuba event IDs in the group event json endpoint
if the `snuba.events-queries.enabled` option is turned on
Lyn Nagara 6 years ago
parent
commit
103f33243b
2 changed files with 12 additions and 5 deletions
  1. 10 3
      src/sentry/web/frontend/group_event_json.py
  2. 2 2
      src/sentry/web/urls.py

+ 10 - 3
src/sentry/web/frontend/group_event_json.py

@@ -1,9 +1,9 @@
 from __future__ import absolute_import, division
 
 from django.http import Http404, HttpResponse
-from django.shortcuts import get_object_or_404
 
-from sentry.models import Event, Group, GroupMeta, get_group_with_redirect
+from sentry import options
+from sentry.models import Event, SnubaEvent, Group, GroupMeta, get_group_with_redirect
 from sentry.utils import json
 from sentry.web.frontend.base import OrganizationView
 
@@ -12,6 +12,8 @@ class GroupEventJsonView(OrganizationView):
     required_scope = 'event:read'
 
     def get(self, request, organization, group_id, event_id_or_latest):
+        use_snuba = options.get('snuba.events-queries.enabled')
+
         try:
             # TODO(tkaemming): This should *actually* redirect, see similar
             # comment in ``GroupEndpoint.convert_args``.
@@ -26,9 +28,14 @@ class GroupEventJsonView(OrganizationView):
             # circumstances (such as a post_save signal failing)
             event = group.get_latest_event() or Event(group=group)
         else:
-            event = get_object_or_404(group.event_set, pk=event_id_or_latest)
+            event_cls = SnubaEvent if use_snuba else Event
+            event = event_cls.objects.from_event_id(event_id_or_latest, group.project.id)
+
+        if event is None or (event.group_id != int(group_id)):
+            raise Http404
 
         Event.objects.bind_nodes([event], 'data')
+
         GroupMeta.objects.populate_cache([group])
 
         return HttpResponse(json.dumps(event.as_dict()), content_type='application/json')

+ 2 - 2
src/sentry/web/urls.py

@@ -420,12 +420,12 @@ urlpatterns += patterns(
         name='sentry-organization-issue-detail'
     ),
     url(
-        r'^organizations/(?P<organization_slug>[\w_-]+)/issues/(?P<group_id>\d+)/events/(?P<event_id_or_latest>(\d+|latest))/$',
+        r'^organizations/(?P<organization_slug>[\w_-]+)/issues/(?P<group_id>\d+)/events/(?P<event_id_or_latest>[\w-]+)/$',
         react_page_view,
         name='sentry-organization-event-detail'
     ),
     url(
-        r'^organizations/(?P<organization_slug>[\w_-]+)/issues/(?P<group_id>\d+)/events/(?P<event_id_or_latest>(\d+|latest))/json/$',
+        r'^organizations/(?P<organization_slug>[\w_-]+)/issues/(?P<group_id>\d+)/events/(?P<event_id_or_latest>[\w-]+)/json/$',
         GroupEventJsonView.as_view(),
         name='sentry-group-event-json'
     ),