From 55e5c17e1588653e5b8d820d42518a52e7d7180c Mon Sep 17 00:00:00 2001 From: Riya Chakraborty Date: Tue, 2 Jul 2024 16:18:56 -0700 Subject: [PATCH] random hacks using deprecated metrics query --- src/sentry/search/events/builder/metrics.py | 37 +++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/sentry/search/events/builder/metrics.py b/src/sentry/search/events/builder/metrics.py index c232dc562b3a53..1bf6f9b008762c 100644 --- a/src/sentry/search/events/builder/metrics.py +++ b/src/sentry/search/events/builder/metrics.py @@ -19,12 +19,14 @@ Function, Granularity, Limit, + Metric, Offset, Op, Or, OrderBy, Query, Request, + Timeseries, ) from sentry import features @@ -67,6 +69,7 @@ should_use_on_demand_metrics_for_querying, ) from sentry.snuba.metrics.fields import histogram as metrics_histogram +from sentry.snuba.metrics.mqb_query_transformer import transform_mqb_query_to_metrics_query from sentry.snuba.metrics.naming_layer.mri import extract_use_case_id, is_mri from sentry.snuba.metrics.query import ( DeprecatingMetricsQuery, @@ -1453,9 +1456,6 @@ def get_snql_query(self) -> Request: """ if self.use_metrics_layer or self.use_on_demand: from sentry.snuba.metrics import SnubaQueryBuilder - from sentry.snuba.metrics.mqb_query_transformer import ( - transform_mqb_query_to_metrics_query, - ) if self.use_on_demand: spec = self._on_demand_metric_spec_map[self.selected_columns[0]] @@ -1496,6 +1496,37 @@ def get_snql_query(self) -> Request: return super().get_snql_query() + def get_metrics_query(self) -> Timeseries | None: + + intermediate_query = self.get_metrics_layer_snql_query() + metrics_query: DeprecatingMetricsQuery = transform_mqb_query_to_metrics_query( + intermediate_query, is_alerts_query=isinstance(self, AlertMetricsQueryBuilder) + ) + + mris = [] + for s in metrics_query.select: + mris.append(s.metric_mri) + + for mri in mris: + if "transaction.duration" in mri: + + # somehow we have a mismatch between what MetricsQuery + # expects (with one aggregate) vs. what DeprecatingMetricsQuery + # exposes (possibly multiple aggregates) + + where = metrics_query.where + groupby_set = metrics_query.action_by_str_fields() + + groupby_cols = [] + for field_name in groupby_set: + groupby_cols.append(Column(field_name)) + + metric = Metric(mris[0]) + + return Timeseries(metric=metric, filters=where, groupby=groupby_cols) + + return None + def resolve_split_granularity(self) -> tuple[list[Condition], Granularity | None]: """Don't do this for anything but table queries""" return [], self.granularity