Skip to content

Commit 0cce669

Browse files
committed
address comments
1 parent 51327a6 commit 0cce669

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

src/sentry/api/endpoints/organization_trace_item_stats.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import logging
22

3+
from rest_framework import serializers
34
from rest_framework.request import Request
45
from rest_framework.response import Response
56

67
from sentry.api.api_owners import ApiOwner
78
from sentry.api.api_publish_status import ApiPublishStatus
89
from sentry.api.base import region_silo_endpoint
910
from sentry.api.bases import NoProjects, OrganizationEventsV2EndpointBase
10-
from sentry.exceptions import InvalidSearchQuery
1111
from sentry.models.organization import Organization
1212
from sentry.search.eap.constants import SUPPORTED_STATS_TYPES
1313
from sentry.search.eap.resolver import SearchResolver
@@ -19,6 +19,13 @@
1919
logger = logging.getLogger(__name__)
2020

2121

22+
class OrganizationTraceItemsStatsSerializer(serializers.Serializer):
23+
query = serializers.CharField(required=False)
24+
statsType = serializers.ListField(
25+
child=serializers.ChoiceField(SUPPORTED_STATS_TYPES), required=True
26+
)
27+
28+
2229
@region_silo_endpoint
2330
class OrganizationTraceItemsStatsEndpoint(OrganizationEventsV2EndpointBase):
2431
publish_status = {
@@ -32,28 +39,20 @@ def get(self, request: Request, organization: Organization) -> Response:
3239
except NoProjects:
3340
return Response({"data": []})
3441

35-
stats_types = set(request.GET.getlist("statsType", default=["attributeDistributions"]))
36-
if not stats_types:
37-
raise InvalidSearchQuery(
38-
f"Please specify `statsType`. Supported stats types are: {SUPPORTED_STATS_TYPES}."
39-
)
40-
41-
for stats_type in stats_types:
42-
if stats_type not in SUPPORTED_STATS_TYPES:
43-
raise InvalidSearchQuery(
44-
f"{stats_type} is not a valid statsType. Please use one of the allowed stats types: {SUPPORTED_STATS_TYPES}."
45-
)
42+
serializer = OrganizationTraceItemsStatsSerializer(data=request.GET)
43+
if not serializer.is_valid():
44+
return Response(serializer.errors, status=400)
45+
serialized = serializer.validated_data
4646

4747
resolver_config = SearchResolverConfig()
4848
resolver = SearchResolver(
4949
params=snuba_params, config=resolver_config, definitions=SPAN_DEFINITIONS
5050
)
5151

52-
query = request.GET.get("query", "")
5352
stats_results = Spans.run_stats_query(
5453
params=snuba_params,
55-
stats_types=stats_types,
56-
query_string=query,
54+
stats_types=serialized.get("statsType"),
55+
query_string=serialized.get("query", ""),
5756
referrer=Referrer.API_SPANS_FREQUENCY_STATS_RPC.value,
5857
config=resolver_config,
5958
search_resolver=resolver,

0 commit comments

Comments
 (0)