Ejemplo n.º 1
0
 def test_invalid_conditions(self):
     with pytest.raises(InvalidSearchQuery):
         discover.get_pagination_ids(
             self.event,
             "foo:(11",
             {
                 "project_id": [self.project.id],
                 "end": self.min_ago,
                 "start": self.day_ago
             },
         )
Ejemplo n.º 2
0
 def test_date_params_included(self):
     # Create an event that is outside the date range
     self.store_event(
         data={
             "event_id": "d" * 32,
             "message": "very bad",
             "type": "default",
             "platform": "python",
             "timestamp": iso_format(before_now(days=2)),
             "tags": {
                 "foo": "1"
             },
         },
         project_id=self.project.id,
     )
     result = discover.get_pagination_ids(
         self.event,
         "foo:1",
         {
             "project_id": [self.project.id],
             "end": self.min_ago,
             "start": self.day_ago
         },
     )
     assert result.previous == "a" * 32
     assert result.next == "c" * 32
     assert result.oldest == "a" * 32
     assert result.latest == "c" * 32
Ejemplo n.º 3
0
 def test_reference_event_matching(self):
     # Create an event that won't match the reference
     self.store_event(
         data={
             "event_id": "d" * 32,
             "message": "completely bad",
             "type": "default",
             "platform": "python",
             "timestamp": iso_format(before_now(minutes=2)),
             "tags": {
                 "foo": "1"
             },
         },
         project_id=self.project.id,
     )
     reference = discover.ReferenceEvent(
         self.organization, "{}:{}".format(self.project.slug,
                                           self.event.id), ["message"])
     result = discover.get_pagination_ids(
         self.event,
         "foo:1",
         {
             "project_id": [self.project.id],
             "end": self.min_ago,
             "start": self.day_ago
         },
         reference_event=reference,
     )
     assert result.previous == "a" * 32
     assert result.next == "c" * 32
     assert result.oldest == "a" * 32
     assert result.latest == "c" * 32
Ejemplo n.º 4
0
    def get(self, request, organization, project_slug, event_id):
        if not features.has("organizations:discover-basic",
                            organization,
                            actor=request.user):
            return Response(status=404)

        try:
            params = self.get_filter_params(request, organization)
        except NoProjects:
            return Response(status=404)

        try:
            project = Project.objects.get(slug=project_slug,
                                          organization_id=organization.id,
                                          status=ProjectStatus.VISIBLE)
        except Project.DoesNotExist:
            return Response(status=404)
        # Check access to the project as this endpoint doesn't use membership checks done
        # get_filter_params().
        if not request.access.has_project_access(project):
            return Response(status=404)

        # We return the requested event if we find a match regardless of whether
        # it occurred within the range specified
        event = eventstore.get_event_by_id(project.id, event_id)

        if event is None:
            return Response({"detail": "Event not found"}, status=404)

        reference = None
        fields = [
            field for field in request.query_params.getlist("field")
            if not field.strip() == ""
        ]
        if fields:
            event_slug = u"{}:{}".format(project.slug, event_id)
            reference = discover.ReferenceEvent(organization, event_slug,
                                                fields, event.datetime,
                                                event.datetime)
        try:
            pagination = discover.get_pagination_ids(
                event=event,
                query=request.query_params.get("query"),
                params=params,
                organization=organization,
                reference_event=reference,
                referrer="api.organization-event-details",
            )
        except discover.InvalidSearchQuery as err:
            raise ParseError(detail=six.text_type(err))

        data = serialize(event)
        data["nextEventID"] = pagination.next
        data["previousEventID"] = pagination.previous
        data["oldestEventID"] = pagination.oldest
        data["latestEventID"] = pagination.latest
        data["projectSlug"] = project_slug

        return Response(data)
Ejemplo n.º 5
0
 def test_matching_conditions(self):
     result = discover.get_pagination_ids(
         self.event,
         "foo:1",
         {
             "project_id": [self.project.id],
             "end": self.min_ago,
             "start": self.day_ago
         },
     )
     assert result.previous == "a" * 32
     assert result.next == "c" * 32
     assert result.oldest == "a" * 32
     assert result.latest == "c" * 32
Ejemplo n.º 6
0
 def test_no_related_events(self):
     result = discover.get_pagination_ids(
         self.event,
         "foo:bar",
         {
             "project_id": [self.project.id],
             "start": self.min_ago,
             "end": self.day_ago
         },
     )
     assert result.previous is None
     assert result.next is None
     assert result.oldest is None
     assert result.latest is None