Browse Source

fix(discover): Allow percentiles with more decimals (#20028)

- Because we formatted percentiles to two decimal points more precise
  percentiles would get rounded
  - eg. 0.995 would become 0.99 instead
- using the g type field in the format string to drop irrelevent zeros,
  mostly to reduce query length.
William Mak 4 years ago
parent
commit
54de9d8fd7
2 changed files with 11 additions and 1 deletions
  1. 1 1
      src/sentry/api/event_search.py
  2. 10 0
      tests/sentry/api/test_event_search.py

+ 1 - 1
src/sentry/api/event_search.py

@@ -1279,7 +1279,7 @@ FUNCTIONS = {
     "percentile": {
         "name": "percentile",
         "args": [DurationColumnNoLookup("column"), NumberRange("percentile", 0, 1)],
-        "aggregate": [u"quantile({percentile:.2f})", u"{column}", None],
+        "aggregate": [u"quantile({percentile:g})", u"{column}", None],
         "result_type": "duration",
     },
     "p50": {

+ 10 - 0
tests/sentry/api/test_event_search.py

@@ -2123,6 +2123,9 @@ class ResolveFieldListTest(unittest.TestCase):
             "percentile(transaction.duration, 0.75)",
             "percentile(transaction.duration, 0.95)",
             "percentile(transaction.duration, 0.99)",
+            "percentile(transaction.duration, 0.995)",
+            "percentile(transaction.duration, 0.99900)",
+            "percentile(transaction.duration, 0.99999)",
         ]
         result = resolve_field_list(fields, eventstore.Filter())
 
@@ -2141,6 +2144,13 @@ class ResolveFieldListTest(unittest.TestCase):
             ["quantile(0.75)", "transaction.duration", "percentile_transaction_duration_0_75"],
             ["quantile(0.95)", "transaction.duration", "percentile_transaction_duration_0_95"],
             ["quantile(0.99)", "transaction.duration", "percentile_transaction_duration_0_99"],
+            ["quantile(0.995)", "transaction.duration", "percentile_transaction_duration_0_995"],
+            ["quantile(0.999)", "transaction.duration", "percentile_transaction_duration_0_99900"],
+            [
+                "quantile(0.99999)",
+                "transaction.duration",
+                "percentile_transaction_duration_0_99999",
+            ],
         ]
         assert result["groupby"] == []