diff --git a/src/sentry/seer/anomaly_detection/store_data.py b/src/sentry/seer/anomaly_detection/store_data.py index 8511c49383eeee..1a41958a0c1bc3 100644 --- a/src/sentry/seer/anomaly_detection/store_data.py +++ b/src/sentry/seer/anomaly_detection/store_data.py @@ -17,6 +17,7 @@ from sentry.seer.anomaly_detection.types import ( AlertInSeer, AnomalyDetectionConfig, + DataSourceType, StoreDataRequest, StoreDataResponse, TimeSeriesPoint, @@ -29,7 +30,7 @@ translate_direction, ) from sentry.seer.signed_seer_api import make_signed_seer_api_request -from sentry.snuba.models import SnubaQuery, SnubaQueryEventType +from sentry.snuba.models import QuerySubscription, SnubaQuery, SnubaQueryEventType from sentry.utils import json, metrics from sentry.utils.json import JSONDecodeError @@ -191,13 +192,21 @@ def send_historical_data_to_seer( # this won't happen because we've already gone through the serializer, but mypy insists raise ValidationError("Missing expected configuration for a dynamic alert.") + query_subscription = QuerySubscription.objects.filter(snuba_query_id=snuba_query.id).first() + if query_subscription is None: + raise ValidationError("No QuerySubscription found for snuba query ID") + anomaly_detection_config = AnomalyDetectionConfig( time_period=window_min, sensitivity=alert_rule.sensitivity, direction=translate_direction(alert_rule.threshold_type), expected_seasonality=alert_rule.seasonality, ) - alert = AlertInSeer(id=alert_rule.id) + alert = AlertInSeer( + id=alert_rule.id, + source_id=query_subscription.id, + source_type=DataSourceType.SNUBA_QUERY_SUBSCRIPTION, + ) body = StoreDataRequest( organization_id=alert_rule.organization.id, project_id=project.id,