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
Beispiel #2
0
    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"]))
Beispiel #3
0
 def test_dataset_key(self):
     query = {
         "dataset": Dataset.Events,
         "conditions": [["event.type", "=", "transaction"]]
     }
     assert detect_dataset(query) == Dataset.Events
Beispiel #4
0
    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