|
@@ -12,8 +12,8 @@ from sentry.models.project import Project
|
|
|
from sentry.sentry_metrics.querying.constants import SNUBA_QUERY_LIMIT
|
|
|
from sentry.sentry_metrics.querying.data import (
|
|
|
MetricsAPIQueryResultsTransformer,
|
|
|
- MetricsQueriesPlan,
|
|
|
- run_metrics_queries_plan,
|
|
|
+ MQLQuery,
|
|
|
+ run_queries,
|
|
|
)
|
|
|
from sentry.sentry_metrics.querying.errors import (
|
|
|
InvalidMetricsQueryError,
|
|
@@ -112,7 +112,7 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
def run_query(
|
|
|
self,
|
|
|
- metrics_queries_plan: MetricsQueriesPlan,
|
|
|
+ mql_queries: Sequence[MQLQuery],
|
|
|
start: datetime,
|
|
|
end: datetime,
|
|
|
interval: int,
|
|
@@ -122,8 +122,8 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
referrer: str,
|
|
|
query_type: QueryType = QueryType.TOTALS_AND_SERIES,
|
|
|
) -> Mapping[str, Any]:
|
|
|
- return run_metrics_queries_plan(
|
|
|
- metrics_queries_plan,
|
|
|
+ return run_queries(
|
|
|
+ mql_queries,
|
|
|
start,
|
|
|
end,
|
|
|
interval,
|
|
@@ -136,11 +136,8 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_no_formulas(self) -> None:
|
|
|
- query_1 = self.mql("sum", TransactionMRI.DURATION.value, "transaction:/bar")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1)
|
|
|
-
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -164,10 +161,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
("min", None, 0.0),
|
|
|
):
|
|
|
query_1 = self.mql(aggregate, TransactionMRI.DURATION.value, "transaction:/bar")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -189,10 +185,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_infinite_value(self) -> None:
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1 / 0")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery("$query_1 / 0", query_1=MQLQuery(query_1))],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -214,10 +209,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_one_aggregation(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -244,10 +238,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_one_aggregation_and_only_totals(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -272,10 +265,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_one_aggregation_and_unitless_aggregate(self) -> None:
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -302,10 +294,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_one_aggregation_and_environment(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -327,10 +318,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_one_aggregation_and_latest_release(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value, "release:latest")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -352,10 +342,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_percentile(self) -> None:
|
|
|
query_1 = self.mql("p90", TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -382,10 +371,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
# We only want to check if these percentiles return results.
|
|
|
for percentile in ("p50", "p75", "p90", "p95", "p99"):
|
|
|
query_1 = self.mql(percentile, TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -402,11 +390,10 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
# We only want to check if these percentiles result in a error.
|
|
|
for percentile in ("p30", "p45"):
|
|
|
query_1 = self.mql(percentile, TransactionMRI.DURATION.value)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
with pytest.raises(MetricsQueryExecutionError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -419,10 +406,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_group_by(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value, group_by="transaction, platform")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -464,14 +450,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_group_by_and_order_by(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value, group_by="transaction")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .apply_formula("$query_1", order=QueryOrder.DESC)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1, order=QueryOrder.DESC)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -501,14 +482,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_group_by_and_order_by_and_only_totals(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value, group_by="transaction")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .apply_formula("$query_1", order=QueryOrder.ASC)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1, order=QueryOrder.ASC)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -549,10 +525,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
)
|
|
|
|
|
|
query_1 = self.mql("sum", TransactionMRI.MEASUREMENTS_FCP.value, group_by="transaction")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now(),
|
|
|
end=self.now() + timedelta(hours=1),
|
|
|
interval=3600,
|
|
@@ -575,10 +550,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
@with_feature("organizations:ddm-metrics-api-unit-normalization")
|
|
|
def test_query_with_parenthesized_filter(self) -> None:
|
|
|
query_1 = self.mql("sum", TransactionMRI.DURATION.value, "(transaction:/hello)", "platform")
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -611,10 +585,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
query_1 = self.mql(
|
|
|
"sum", TransactionMRI.DURATION.value, "platform:ios AND transaction:/hello", "platform"
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -640,10 +613,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
query_1 = self.mql(
|
|
|
"sum", TransactionMRI.DURATION.value, "platform:ios OR platform:android", "platform"
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -676,10 +648,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
query_1 = self.mql(
|
|
|
"sum", TransactionMRI.DURATION.value, "!platform:ios transaction:/hello", "platform"
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -705,10 +676,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
query_1 = self.mql(
|
|
|
"sum", TransactionMRI.DURATION.value, "platform:[android, ios]", "platform"
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -741,10 +711,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
query_1 = self.mql(
|
|
|
"sum", TransactionMRI.DURATION.value, '!platform:["android", "ios"]', "platform"
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -769,16 +738,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_multiple_aggregations(self) -> None:
|
|
|
query_1 = self.mql("min", TransactionMRI.DURATION.value)
|
|
|
query_2 = self.mql("max", TransactionMRI.DURATION.value)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1")
|
|
|
- .apply_formula("$query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1), MQLQuery(query_2)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -808,16 +770,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_multiple_aggregations_and_single_group_by(self) -> None:
|
|
|
query_1 = self.mql("min", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
query_2 = self.mql("max", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1")
|
|
|
- .apply_formula("$query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1), MQLQuery(query_2)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -881,16 +836,12 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
) -> None:
|
|
|
query_1 = self.mql("min", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
query_2 = self.mql("max", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1", QueryOrder.ASC, 2)
|
|
|
- .apply_formula("$query_2", QueryOrder.DESC, 2)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(query_1, order=QueryOrder.ASC, limit=2),
|
|
|
+ MQLQuery(query_2, order=QueryOrder.DESC, limit=2),
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -947,14 +898,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
self,
|
|
|
) -> None:
|
|
|
query_1 = self.mql("min", TransactionMRI.DURATION.value)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .apply_formula("$query_1", limit=SNUBA_QUERY_LIMIT + 10)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1, limit=SNUBA_QUERY_LIMIT + 10)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -984,13 +930,6 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
) -> None:
|
|
|
query_1 = self.mql("min", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
query_2 = self.mql("max", TransactionMRI.DURATION.value, group_by="platform")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1", order=QueryOrder.DESC)
|
|
|
- .apply_formula("$query_2", order=QueryOrder.DESC)
|
|
|
- )
|
|
|
|
|
|
# With a snuba limit of 3 and 3 intervals we expect to only have 1 group returned. Currently,
|
|
|
# the test is failing because totals are correctly queried but series data is returned up to
|
|
@@ -998,7 +937,10 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
# the groups * intervals combinations. Once the bug will be fixed on the snuba side, we should
|
|
|
# expect to get back 3 correct entries from the series query.
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(query_1, order=QueryOrder.DESC),
|
|
|
+ MQLQuery(query_2, order=QueryOrder.DESC),
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1054,10 +996,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
)
|
|
|
|
|
|
query_1 = self.mql("count_unique", mri)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1094,10 +1035,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
)
|
|
|
|
|
|
query_1 = self.mql("sum", mri)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1134,10 +1074,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
)
|
|
|
|
|
|
query_1 = self.mql("sum", mri)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1174,15 +1113,9 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
query_1 = self.mql("sum", mri_1)
|
|
|
query_2 = self.mql("sum", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1")
|
|
|
- .apply_formula("$query_2")
|
|
|
- )
|
|
|
+
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1), MQLQuery(query_2)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1207,11 +1140,10 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
TransactionMRI.DURATION.value,
|
|
|
"transaction:/api/0/organizations/{organization_slug}/",
|
|
|
)
|
|
|
- plan = MetricsQueriesPlan().declare_query("query_1", query_1).apply_formula("$query_1")
|
|
|
|
|
|
with pytest.raises(InvalidMetricsQueryError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[MQLQuery(query_1)],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1228,16 +1160,14 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
TransactionMRI.DURATION.value,
|
|
|
)
|
|
|
query_2 = self.mql("max", "d:custom/app_load@millisecond")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 / $query_2")
|
|
|
- )
|
|
|
|
|
|
with pytest.raises(InvalidMetricsQueryError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 / $query_2", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1251,16 +1181,14 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_different_metric_types(self):
|
|
|
query_1 = self.mql("count", "c:custom/page_click@none")
|
|
|
query_2 = self.mql("max", "d:custom/app_load@millisecond")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 * $query_2")
|
|
|
- )
|
|
|
|
|
|
with pytest.raises(InvalidMetricsQueryError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 * $query_2", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1274,16 +1202,16 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_different_group_bys(self):
|
|
|
query_1 = self.mql("min", "d:custom/page_click@none", group_by="transaction, environment")
|
|
|
query_2 = self.mql("max", "d:custom/app_load@millisecond", group_by="transaction")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 * $query_2 / $query_1")
|
|
|
- )
|
|
|
|
|
|
with pytest.raises(InvalidMetricsQueryError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 * $query_2 / $query_1",
|
|
|
+ query_1=MQLQuery(query_1),
|
|
|
+ query_2=MQLQuery(query_2),
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1297,16 +1225,16 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_complex_group_by(self):
|
|
|
query_1 = self.mql("min", "d:custom/page_click@none", group_by="environment")
|
|
|
query_2 = self.mql("max", "d:custom/app_load@millisecond", group_by="transaction")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("((($query_1 * $query_2) by (release)) / $query_1) by (browser)")
|
|
|
- )
|
|
|
|
|
|
with pytest.raises(InvalidMetricsQueryError):
|
|
|
self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "((($query_1 * $query_2) by (release)) / $query_1) by (browser)",
|
|
|
+ query_1=MQLQuery(query_1),
|
|
|
+ query_2=MQLQuery(query_2),
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1320,15 +1248,13 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_basic_formula(self):
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value)
|
|
|
query_2 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_2 / $query_1")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_2 / $query_1", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1347,17 +1273,17 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_complex_formula(self):
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value)
|
|
|
query_2 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_2 * $query_1 + 100")
|
|
|
- .apply_formula("$query_1")
|
|
|
- .apply_formula("$query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_2 * $query_1 + 100",
|
|
|
+ query_1=MQLQuery(query_1),
|
|
|
+ query_2=MQLQuery(query_2),
|
|
|
+ ),
|
|
|
+ MQLQuery("$query_1", query_1=MQLQuery(query_1)),
|
|
|
+ MQLQuery("$query_2", query_2=MQLQuery(query_2)),
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1377,15 +1303,15 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_formula_and_group_by(self):
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value)
|
|
|
query_2 = self.mql("sum", TransactionMRI.DURATION.value)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("($query_2 * $query_1) by (platform, transaction)")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "($query_2 * $query_1) by (platform, transaction)",
|
|
|
+ query_1=MQLQuery(query_1),
|
|
|
+ query_2=MQLQuery(query_2),
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1412,17 +1338,16 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
def test_query_with_formula_and_filter(self):
|
|
|
query_1 = self.mql("count", TransactionMRI.DURATION.value, filters="platform:android")
|
|
|
query_2 = self.mql("sum", TransactionMRI.DURATION.value, filters="platform:ios")
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula(
|
|
|
- "($query_2 + $query_1) by (platform, transaction)", order=QueryOrder.DESC
|
|
|
- )
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "($query_2 + $query_1) by (platform, transaction)",
|
|
|
+ order=QueryOrder.DESC,
|
|
|
+ query_1=MQLQuery(query_1),
|
|
|
+ query_2=MQLQuery(query_2),
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1477,15 +1402,11 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
):
|
|
|
query_1 = self.mql("avg", mri_1)
|
|
|
query_2 = self.mql("sum", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula(formula)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(formula, query_1=MQLQuery(query_1), query_2=MQLQuery(query_2))
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1523,15 +1444,13 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
query_1 = self.mql("avg", mri_1)
|
|
|
query_2 = self.mql("sum", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 + $query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 + $query_2", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1569,15 +1488,13 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
query_1 = self.mql("avg", mri_1)
|
|
|
query_2 = self.mql("count", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 + $query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 + $query_2", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1615,15 +1532,13 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
|
|
|
query_1 = self.mql("avg", mri_1)
|
|
|
query_2 = self.mql("sum", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula("$query_1 + $query_2")
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(
|
|
|
+ "$query_1 + $query_2", query_1=MQLQuery(query_1), query_2=MQLQuery(query_2)
|
|
|
+ )
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|
|
@@ -1671,15 +1586,11 @@ class MetricsAPITestCase(TestCase, BaseMetricsTestCase):
|
|
|
):
|
|
|
query_1 = self.mql("avg", mri_1)
|
|
|
query_2 = self.mql("sum", mri_2)
|
|
|
- plan = (
|
|
|
- MetricsQueriesPlan()
|
|
|
- .declare_query("query_1", query_1)
|
|
|
- .declare_query("query_2", query_2)
|
|
|
- .apply_formula(formula)
|
|
|
- )
|
|
|
|
|
|
results = self.run_query(
|
|
|
- metrics_queries_plan=plan,
|
|
|
+ mql_queries=[
|
|
|
+ MQLQuery(formula, query_1=MQLQuery(query_1), query_2=MQLQuery(query_2))
|
|
|
+ ],
|
|
|
start=self.now() - timedelta(minutes=30),
|
|
|
end=self.now() + timedelta(hours=1, minutes=30),
|
|
|
interval=3600,
|