Browse Source

fix(stat-detectors): Skip empty geo code in analysis (#58163)

It looks like geo code can be an empty string. Skip these in the results
because it's not actionable for a user.
Nar Saynorath 1 year ago
parent
commit
3ec1aacdd0

+ 3 - 0
src/sentry/api/endpoints/organization_events_root_cause_analysis.py

@@ -170,6 +170,9 @@ def fetch_geo_analysis_results(transaction_name, regression_breakpoint, params,
 
     analysis_results = []
     for key in changed_keys | new_keys:
+        if key == "":
+            continue
+
         duration_before = (
             before_results[key]["p95_transaction_duration"] if before_results.get(key) else 0.0
         )

+ 40 - 0
tests/sentry/api/endpoints/test_organization_root_cause_analysis.py

@@ -498,3 +498,43 @@ class OrganizationRootCauseAnalysisTest(MetricsAPIBaseTestCase):
                 "score": 0.0462962962962963,
             },
         ]
+
+    def test_geo_code_anaysis_ignores_empty_string_country_code(self):
+        breakpoint_timestamp = self.now - timedelta(days=1)
+
+        # Before
+        self.store_performance_metric(
+            name=TransactionMRI.DURATION.value,
+            tags={"transaction": "bar", "geo.country_code": ""},
+            org_id=self.org.id,
+            project_id=self.project.id,
+            value=10,
+            days_before_now=2,
+        )
+
+        # After
+        self.store_performance_metric(
+            name=TransactionMRI.DURATION.value,
+            tags={"transaction": "bar", "geo.country_code": ""},
+            org_id=self.org.id,
+            project_id=self.project.id,
+            value=100,
+            hours_before_now=6,
+        )
+
+        with self.feature(FEATURES):
+            response = self.client.get(
+                self.url,
+                format="json",
+                data={
+                    "transaction": "bar",
+                    "project": self.project.id,
+                    "breakpoint": breakpoint_timestamp,
+                    "start": self.now - timedelta(days=3),
+                    "end": self.now,
+                    "type": "geo",
+                },
+            )
+
+        assert response.status_code == 200, response.content
+        assert len(response.data) == 0