def get_snuba_query_args_legacy(self, request, organization): params = self.get_filter_params(request, organization) group_ids = request.GET.getlist("group") if group_ids: # TODO(mark) This parameter should be removed in the long term. # Instead of using this parameter clients should use `issue.id` # in their query string. try: group_ids = set(map(int, filter(None, group_ids))) except ValueError: raise OrganizationEventsError("Invalid group parameter. Values must be numbers") projects = Project.objects.filter( organization=organization, group__id__in=group_ids ).distinct() if any(p for p in projects if not request.access.has_project_access(p)): raise PermissionDenied params["issue.id"] = list(group_ids) params["project_id"] = list(set([p.id for p in projects] + params["project_id"])) query = request.GET.get("query") try: _filter = get_filter(query, params) except InvalidSearchQuery as exc: raise OrganizationEventsError(exc.message) snuba_args = { "start": _filter.start, "end": _filter.end, "conditions": _filter.conditions, "filter_keys": _filter.filter_keys, } # 'legacy' endpoints cannot access transactions dataset. # as they often have assumptions about which columns are returned. dataset = snuba.detect_dataset(snuba_args) if dataset != snuba.Dataset.Events: raise OrganizationEventsError( "Invalid query. You cannot reference non-events data in this endpoint." ) return snuba_args
def __get_event_id_from_filter(self, filter=None, orderby=None): columns = ["event_id", "project_id"] result = snuba.dataset_query( selected_columns=columns, conditions=filter.conditions, filter_keys=filter.filter_keys, start=filter.start, end=filter.end, limit=1, referrer="eventstore.get_next_or_prev_event_id", orderby=orderby, dataset=snuba.detect_dataset({"conditions": filter.conditions}), ) if "error" in result or len(result["data"]) == 0: return None row = result["data"][0] return (six.text_type(row["project_id"]), six.text_type(row["event_id"]))
def test_dataset_key(self): query = { "dataset": Dataset.Events, "conditions": [["event.type", "=", "transaction"]] } assert detect_dataset(query) == Dataset.Events
def test_selected_columns(self): query = {"selected_columns": ["id", "message"]} assert detect_dataset(query) == Dataset.Events query = {"selected_columns": ["id", "transaction", "transaction.duration"]} assert detect_dataset(query) == Dataset.Transactions