Skip to content

Commit c19c55e

Browse files
kconsgeorge-sentry
authored andcommitted
fix(alerts): Make ProjectRuleStatsIndexEndpoint 400 on a bad date range (#112505)
Fixes SENTRY-3ZEF.
1 parent ca438ce commit c19c55e

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

src/sentry/rules/history/endpoints/project_rule_stats.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import Any, TypedDict
66

77
from drf_spectacular.utils import extend_schema
8+
from rest_framework.exceptions import ParseError
89
from rest_framework.request import Request
910
from rest_framework.response import Response
1011

@@ -15,6 +16,7 @@
1516
from sentry.api.utils import get_date_range_from_params
1617
from sentry.apidocs.constants import RESPONSE_FORBIDDEN, RESPONSE_NOT_FOUND, RESPONSE_UNAUTHORIZED
1718
from sentry.apidocs.parameters import GlobalParams, IssueAlertParams
19+
from sentry.exceptions import InvalidParams
1820
from sentry.models.project import Project
1921
from sentry.models.rule import Rule
2022
from sentry.rules.history import fetch_rule_hourly_stats
@@ -65,6 +67,9 @@ def get(self, request: Request, project: Project, rule: Rule | Workflow) -> Resp
6567
"""
6668
Note that results are returned in hourly buckets.
6769
"""
68-
start, end = get_date_range_from_params(request.GET)
70+
try:
71+
start, end = get_date_range_from_params(request.GET)
72+
except InvalidParams as e:
73+
raise ParseError(detail=str(e))
6974
results = fetch_rule_hourly_stats(rule, start, end)
7075
return Response(serialize(results, request.user, TimeSeriesValueSerializer()))

tests/sentry/rules/history/endpoints/test_project_rule_stats.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,14 @@ def test(self) -> None:
7474
{"date": now - timedelta(hours=1), "count": 1},
7575
{"date": now, "count": 0},
7676
]
77+
78+
def test_invalid_date_range(self) -> None:
79+
rule = self.create_project_rule(project=self.event.project)
80+
self.login_as(self.user)
81+
self.get_error_response(
82+
self.organization.slug,
83+
self.project.slug,
84+
rule.id,
85+
start="invalid",
86+
status_code=400,
87+
)

0 commit comments

Comments
 (0)