Browse Source

ref(metrics): Rename `failure_rate` -> `division` (#33410)

`failure_rate` is a metric resulting from a division. Making the
function more generalized allows its reusability in other places.

The function name is specifically `division_float`, to avoid confusion
with integer division.
Iker Barriocanal 2 years ago
parent
commit
9ff078a6e5

+ 3 - 3
src/sentry/snuba/metrics/fields/base.py

@@ -40,10 +40,10 @@ from sentry.snuba.metrics.fields.snql import (
     all_users,
     crashed_sessions,
     crashed_users,
+    division_float,
     errored_all_users,
     errored_preaggr_sessions,
     failure_count_transaction,
-    failure_rate_transaction,
     percentage,
     session_duration_filters,
     sessions_errored_set,
@@ -906,8 +906,8 @@ DERIVED_METRICS: Mapping[str, DerivedMetricExpression] = {
                 TransactionMRI.ALL.value,
             ],
             unit="transactions",
-            snql=lambda *args, org_id, metric_ids, alias=None: failure_rate_transaction(
-                *args, alias=alias
+            snql=lambda failure_count, tx_count, org_id, metric_ids, alias=None: division_float(
+                failure_count, tx_count, alias=alias
             ),
         ),
     ]

+ 10 - 10
src/sentry/snuba/metrics/fields/snql.py

@@ -181,16 +181,6 @@ def failure_count_transaction(org_id, metric_ids, alias=None):
     )
 
 
-def failure_rate_transaction(failure_count_snql, tx_count_snql, alias=None):
-    return Function(
-        "divide",
-        # Clickhouse can manage divisions by 0, see:
-        # https://clickhouse.com/docs/en/sql-reference/functions/arithmetic-functions/#dividea-b-a-b-operator
-        [failure_count_snql, tx_count_snql],
-        alias=alias,
-    )
-
-
 def percentage(arg1_snql, arg2_snql, alias=None):
     return Function("minus", [1, Function("divide", [arg1_snql, arg2_snql])], alias)
 
@@ -203,6 +193,16 @@ def addition(arg1_snql, arg2_snql, alias=None):
     return Function("plus", [arg1_snql, arg2_snql], alias)
 
 
+def division_float(arg1_snql, arg2_snql, alias=None):
+    return Function(
+        "divide",
+        # Clickhouse can manage divisions by 0, see:
+        # https://clickhouse.com/docs/en/sql-reference/functions/arithmetic-functions/#dividea-b-a-b-operator
+        [arg1_snql, arg2_snql],
+        alias=alias,
+    )
+
+
 def session_duration_filters(org_id):
     return [
         Function(

+ 13 - 14
tests/sentry/snuba/metrics/test_snql.py

@@ -19,7 +19,7 @@ from sentry.snuba.metrics import (
     sessions_errored_set,
     subtraction,
 )
-from sentry.snuba.metrics.fields.snql import failure_count_transaction, failure_rate_transaction
+from sentry.snuba.metrics.fields.snql import division_float, failure_count_transaction
 from sentry.testutils import TestCase
 
 
@@ -156,19 +156,6 @@ class DerivedMetricSnQLTestCase(TestCase):
             == expected_failed_txs
         )
 
-        assert failure_rate_transaction(
-            failure_count_transaction(org_id, self.metric_ids, "transactions.failed"),
-            all_transactions(org_id, self.metric_ids, "transactions.all"),
-            alias="transactions.failure_rate",
-        ) == Function(
-            "divide",
-            [
-                expected_failed_txs,
-                expected_all_txs,
-            ],
-            alias="transactions.failure_rate",
-        )
-
     def test_percentage_in_snql(self):
         org_id = 666
         alias = "foo.percentage"
@@ -207,6 +194,18 @@ class DerivedMetricSnQLTestCase(TestCase):
             == Function("minus", [arg1_snql, arg2_snql], alias="session.healthy_user")
         )
 
+    def test_division_in_snql(self):
+        org_id = 9876
+        alias = "transactions.failure_rate"
+        failed = failure_count_transaction(org_id, self.metric_ids, "transactions.failed")
+        all = all_transactions(org_id, self.metric_ids, "transactions.all")
+
+        assert division_float(failed, all, alias=alias) == Function(
+            "divide",
+            [failed, all],
+            alias=alias,
+        )
+
     def test_session_duration_filters(self):
         org_id = 666
         assert session_duration_filters(org_id) == [