|
@@ -1264,6 +1264,55 @@ class MetricQueryBuilderTest(MetricBuilderBaseTest):
|
|
|
"95", "transaction.duration", "test"
|
|
|
)
|
|
|
|
|
|
+ def test_error_if_aggregates_disallowed(self):
|
|
|
+ def run_query(query, use_aggregate_conditions):
|
|
|
+ with self.assertRaises(IncompatibleMetricsQuery):
|
|
|
+ MetricsQueryBuilder(
|
|
|
+ self.params,
|
|
|
+ selected_columns=[
|
|
|
+ "transaction",
|
|
|
+ "p95()",
|
|
|
+ "count_unique(user)",
|
|
|
+ ],
|
|
|
+ query=query,
|
|
|
+ allow_metric_aggregates=False,
|
|
|
+ use_aggregate_conditions=use_aggregate_conditions,
|
|
|
+ )
|
|
|
+
|
|
|
+ queries = [
|
|
|
+ "p95():>5s",
|
|
|
+ "count_unique(user):>0",
|
|
|
+ "transaction:foo_transaction AND (!transaction:bar_transaction OR p95():>5s)",
|
|
|
+ ]
|
|
|
+ for query in queries:
|
|
|
+ for use_aggregate_conditions in [True, False]:
|
|
|
+ run_query(query, use_aggregate_conditions)
|
|
|
+
|
|
|
+ def test_no_error_if_aggregates_disallowed_but_no_aggregates_included(self):
|
|
|
+ MetricsQueryBuilder(
|
|
|
+ self.params,
|
|
|
+ selected_columns=[
|
|
|
+ "transaction",
|
|
|
+ "p95()",
|
|
|
+ "count_unique(user)",
|
|
|
+ ],
|
|
|
+ query="transaction:foo_transaction",
|
|
|
+ allow_metric_aggregates=False,
|
|
|
+ use_aggregate_conditions=True,
|
|
|
+ )
|
|
|
+
|
|
|
+ MetricsQueryBuilder(
|
|
|
+ self.params,
|
|
|
+ selected_columns=[
|
|
|
+ "transaction",
|
|
|
+ "p95()",
|
|
|
+ "count_unique(user)",
|
|
|
+ ],
|
|
|
+ query="transaction:foo_transaction",
|
|
|
+ allow_metric_aggregates=False,
|
|
|
+ use_aggregate_conditions=False,
|
|
|
+ )
|
|
|
+
|
|
|
|
|
|
class TimeseriesMetricQueryBuilderTest(MetricBuilderBaseTest):
|
|
|
def test_get_query(self):
|
|
@@ -1419,6 +1468,7 @@ class TimeseriesMetricQueryBuilderTest(MetricBuilderBaseTest):
|
|
|
interval=900,
|
|
|
query="p50(transaction.duration):>100",
|
|
|
selected_columns=["p50(transaction.duration)", "count_unique(user)"],
|
|
|
+ allow_metric_aggregates=True,
|
|
|
)
|
|
|
# Aggregate conditions should be dropped
|
|
|
assert query.having == []
|
|
@@ -1593,3 +1643,31 @@ class TimeseriesMetricQueryBuilderTest(MetricBuilderBaseTest):
|
|
|
{"name": "p50_transaction_duration", "type": "Float64"},
|
|
|
],
|
|
|
)
|
|
|
+
|
|
|
+ def test_error_if_aggregates_disallowed(self):
|
|
|
+ def run_query(query):
|
|
|
+ with self.assertRaises(IncompatibleMetricsQuery):
|
|
|
+ TimeseriesMetricQueryBuilder(
|
|
|
+ self.params,
|
|
|
+ interval=900,
|
|
|
+ query=query,
|
|
|
+ selected_columns=["p50(transaction.duration)"],
|
|
|
+ allow_metric_aggregates=False,
|
|
|
+ )
|
|
|
+
|
|
|
+ queries = [
|
|
|
+ "p95():>5s",
|
|
|
+ "count_unique(user):>0",
|
|
|
+ "transaction:foo_transaction AND (!transaction:bar_transaction OR p95():>5s)",
|
|
|
+ ]
|
|
|
+ for query in queries:
|
|
|
+ run_query(query)
|
|
|
+
|
|
|
+ def test_no_error_if_aggregates_disallowed_but_no_aggregates_included(self):
|
|
|
+ TimeseriesMetricQueryBuilder(
|
|
|
+ self.params,
|
|
|
+ interval=900,
|
|
|
+ selected_columns=["p50(transaction.duration)"],
|
|
|
+ query="transaction:foo_transaction",
|
|
|
+ allow_metric_aggregates=False,
|
|
|
+ )
|