Просмотр исходного кода

fix(releasehealth): Consider pre-aggregated sessions when querying (#30367)

Co-authored-by: Joris Bayer <joris.bayer@sentry.io>
Markus Unterwaditzer 3 лет назад
Родитель
Сommit
6f0870e63d

+ 9 - 2
src/sentry/release_health/metrics.py

@@ -722,7 +722,8 @@ class MetricsReleaseHealthBackend(ReleaseHealthBackend):
         where: List[Condition], org_id: int
     ) -> Mapping[Tuple[int, str], int]:
         """
-        Count of errored sessions, incl fatal (abnormal, crashed) sessions
+        Count of errored sessions, incl fatal (abnormal, crashed) sessions,
+        excl errored *preaggregated* sessions
         """
         rv_errored_sessions: Dict[Tuple[int, str], int] = {}
 
@@ -779,7 +780,9 @@ class MetricsReleaseHealthBackend(ReleaseHealthBackend):
                     Condition(
                         Column(session_status_column_name),
                         Op.IN,
-                        get_tag_values_list(org_id, ["abnormal", "crashed", "init"]),
+                        get_tag_values_list(
+                            org_id, ["abnormal", "crashed", "init", "errored_preaggr"]
+                        ),
                     ),
                 ],
                 groupby=aggregates,
@@ -1013,6 +1016,7 @@ class MetricsReleaseHealthBackend(ReleaseHealthBackend):
                 "sessions_errored": max(
                     0,
                     rv_errored_sessions.get((project_id, release), 0)
+                    + rv_sessions.get((project_id, release, "errored_preaggr"), 0)
                     - sessions_crashed
                     - rv_sessions.get((project_id, release, "abnormal"), 0),
                 ),
@@ -1445,6 +1449,9 @@ class MetricsReleaseHealthBackend(ReleaseHealthBackend):
                 target["sessions_crashed"] = value
                 # This is an error state, so subtract from total error count
                 target["sessions_errored"] -= value
+            elif status == "errored_preaggr":
+                target["sessions_errored"] += value
+                target["sessions_healthy"] -= value
             else:
                 logger.warning("Unexpected session.status '%s'", status)
 

+ 5 - 1
src/sentry/release_health/metrics_sessions_v2.py

@@ -259,7 +259,11 @@ class _SumSessionField(_OutputField):
             abnormal = int(data_points.get(replace(key, raw_session_status="abnormal"), 0))
             crashed = int(data_points.get(replace(key, raw_session_status="crashed"), 0))
             errored_key = replace(key, metric_name="session.error", raw_session_status=None)
-            all_errored = int(data_points.get(errored_key, 0))
+            individual_errors = int(data_points.get(errored_key, 0))
+            aggregated_errors = int(
+                data_points.get(replace(key, raw_session_status="errored_preaggr"), 0)
+            )
+            all_errored = individual_errors + aggregated_errors
 
             healthy = max(0, started - all_errored)
             errored = max(0, all_errored - abnormal - crashed)