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 }, )
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
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
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)
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
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