Skip to content

Commit aecb6fe

Browse files
committed
Merge branch 'master' into ihbe/detectors-slowdb
2 parents 5dd404b + 77c63fe commit aecb6fe

File tree

146 files changed

+2047
-1396
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+2047
-1396
lines changed

bin/preprod/trigger_size_status_check

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ COMMIT_SHA = "db2b4ae626b458b4be651019f1a7c112406c003e"
3030
# Build configurations - set to None to disable a build
3131
BUILD_1 = {
3232
"app_id": "com.emerge.hackernews.android",
33+
"artifact_type": PreprodArtifact.ArtifactType.AAB,
3334
"app_name": "HackerNews",
3435
"platform": "Android",
3536
"build_version": "1.0.3",
@@ -42,8 +43,10 @@ BUILD_1 = {
4243
"error_message": None, # Only used if state is "failed"
4344
}
4445

46+
# Set to None to disable BUILD_2 for single-build testing:
4547
BUILD_2 = {
4648
"app_id": "com.emerge.hackernews.ios",
49+
"artifact_type": PreprodArtifact.ArtifactType.XCARCHIVE,
4750
"app_name": "HackerNews",
4851
"platform": "iOS",
4952
"build_version": "1.0.3",
@@ -56,9 +59,6 @@ BUILD_2 = {
5659
"error_message": None, # Only used if state is "failed"
5760
}
5861

59-
# Set to None to disable BUILD_2 for single-build testing:
60-
# BUILD_2 = None
61-
6262
# Available states:
6363
# - "uploading": Artifact is still uploading (no metrics)
6464
# - "uploaded": Artifact uploaded but not processed yet (no metrics)
@@ -476,6 +476,7 @@ def main() -> None:
476476
# Create artifact data
477477
artifact_data = {
478478
"project": project,
479+
"artifact_type": build_config["artifact_type"],
479480
"app_id": build_config["app_id"],
480481
"app_name": build_config["app_name"],
481482
"commit_comparison": commit_comparison,

migrations_lockfile.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ tempest: 0001_squashed_0002_make_message_type_nullable
3939

4040
uptime: 0048_delete_uptime_status_columns
4141

42-
workflow_engine: 0097_migrate_slow_db_query_detectors
42+
workflow_engine: 0098_migrate_slow_db_query_detectors

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ dependencies = [
8383
"sentry-forked-email-reply-parser>=0.5.12.post1",
8484
"sentry-kafka-schemas>=2.1.15",
8585
"sentry-ophio>=1.1.3",
86-
"sentry-protos>=0.4.2",
86+
"sentry-protos>=0.4.3",
8787
"sentry-redis-tools>=0.5.0",
8888
"sentry-relay>=0.9.19",
8989
"sentry-sdk[http2]>=2.43.0",

src/sentry/api/bases/organization_events.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from django.utils import timezone
1414
from rest_framework.exceptions import ParseError, ValidationError
1515
from rest_framework.request import Request
16+
from sentry_protos.snuba.v1.trace_item_attribute_pb2 import ExtrapolationMode
1617
from sentry_relay.consts import SPAN_STATUS_CODE_TO_NAME
1718

1819
from sentry import features, quotas
@@ -37,7 +38,11 @@
3738
from sentry.models.organization import Organization
3839
from sentry.models.project import Project
3940
from sentry.models.team import Team
40-
from sentry.search.eap.constants import SAMPLING_MODE_MAP, VALID_GRANULARITIES
41+
from sentry.search.eap.constants import (
42+
EXTRAPOLATION_MODE_MAP,
43+
SAMPLING_MODE_MAP,
44+
VALID_GRANULARITIES,
45+
)
4146
from sentry.search.events.constants import DURATION_UNITS, SIZE_UNITS
4247
from sentry.search.events.fields import get_function_alias
4348
from sentry.search.events.types import SAMPLING_MODES, SnubaParams
@@ -520,6 +525,15 @@ def validate_comparison_delta(
520525
if retention and comparison_start < timezone.now() - timedelta(days=retention):
521526
raise ValidationError("Comparison period is outside your retention window")
522527

528+
def get_extrapolation_mode(self, request: Request) -> ExtrapolationMode.ValueType | None:
529+
requested_mode = request.GET.get("extrapolationMode", None)
530+
if requested_mode is not None and requested_mode not in EXTRAPOLATION_MODE_MAP:
531+
raise InvalidSearchQuery(f"Unknown extrapolation mode: {requested_mode}")
532+
533+
extrapolation_mode = EXTRAPOLATION_MODE_MAP[requested_mode] if requested_mode else None
534+
535+
return extrapolation_mode
536+
523537
def get_event_stats_data(
524538
self,
525539
request: Request,

src/sentry/api/endpoints/organization_events.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,18 +517,22 @@ def get_rpc_config():
517517
request.GET.get("disableAggregateExtrapolation", "0") == "1"
518518
)
519519

520+
extrapolation_mode = self.get_extrapolation_mode(request)
521+
520522
if scoped_dataset == Spans:
521523
return SearchResolverConfig(
522524
auto_fields=True,
523525
use_aggregate_conditions=use_aggregate_conditions,
524526
fields_acl=FieldsACL(functions={"time_spent_percentage"}),
525527
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
528+
extrapolation_mode=extrapolation_mode,
526529
)
527530
elif scoped_dataset == OurLogs:
528531
# ourlogs doesn't have use aggregate conditions
529532
return SearchResolverConfig(
530533
use_aggregate_conditions=False,
531534
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
535+
extrapolation_mode=extrapolation_mode,
532536
)
533537
elif scoped_dataset == TraceMetrics:
534538
# tracemetrics uses aggregate conditions
@@ -541,24 +545,28 @@ def get_rpc_config():
541545
use_aggregate_conditions=use_aggregate_conditions,
542546
auto_fields=True,
543547
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
548+
extrapolation_mode=extrapolation_mode,
544549
)
545550
elif scoped_dataset == ProfileFunctions:
546551
# profile_functions uses aggregate conditions
547552
return SearchResolverConfig(
548553
use_aggregate_conditions=use_aggregate_conditions,
549554
auto_fields=True,
550555
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
556+
extrapolation_mode=extrapolation_mode,
551557
)
552558
elif scoped_dataset == uptime_results.UptimeResults:
553559
return SearchResolverConfig(
554560
use_aggregate_conditions=use_aggregate_conditions,
555561
auto_fields=True,
556562
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
563+
extrapolation_mode=extrapolation_mode,
557564
)
558565
else:
559566
return SearchResolverConfig(
560567
use_aggregate_conditions=use_aggregate_conditions,
561568
disable_aggregate_extrapolation=disable_aggregate_extrapolation,
569+
extrapolation_mode=extrapolation_mode,
562570
)
563571

564572
if snuba_params.sampling_mode == "HIGHEST_ACCURACY_FLEX_TIME":

src/sentry/api/endpoints/organization_events_stats.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ def get_rpc_config():
243243
if scoped_dataset not in RPC_DATASETS:
244244
raise NotImplementedError
245245

246+
extrapolation_mode = self.get_extrapolation_mode(request)
247+
246248
if scoped_dataset == TraceMetrics:
247249
# tracemetrics uses aggregate conditions
248250
metric_name, metric_type, metric_unit = get_trace_metric_from_request(request)
@@ -257,6 +259,7 @@ def get_rpc_config():
257259
"disableAggregateExtrapolation", "0"
258260
)
259261
== "1",
262+
extrapolation_mode=extrapolation_mode,
260263
)
261264

262265
return SearchResolverConfig(
@@ -266,6 +269,7 @@ def get_rpc_config():
266269
"disableAggregateExtrapolation", "0"
267270
)
268271
== "1",
272+
extrapolation_mode=extrapolation_mode,
269273
)
270274

271275
if top_events > 0:

src/sentry/api/endpoints/organization_events_timeseries.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ def get_rpc_config():
222222
if dataset not in RPC_DATASETS:
223223
raise NotImplementedError
224224

225+
extrapolation_mode = self.get_extrapolation_mode(request)
226+
225227
if dataset == TraceMetrics:
226228
# tracemetrics uses aggregate conditions
227229
metric_name, metric_type, metric_unit = get_trace_metric_from_request(request)
@@ -235,6 +237,7 @@ def get_rpc_config():
235237
"disableAggregateExtrapolation", "0"
236238
)
237239
== "1",
240+
extrapolation_mode=extrapolation_mode,
238241
)
239242

240243
return SearchResolverConfig(
@@ -244,6 +247,7 @@ def get_rpc_config():
244247
"disableAggregateExtrapolation", "0"
245248
)
246249
== "1",
250+
extrapolation_mode=extrapolation_mode,
247251
)
248252

249253
if top_events > 0:

src/sentry/api/endpoints/organization_trace_item_attributes_ranked.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
StatsType,
1111
TraceItemStatsRequest,
1212
)
13+
from sentry_protos.snuba.v1.trace_item_attribute_pb2 import ExtrapolationMode
1314

1415
from sentry import features
1516
from sentry.api.api_owners import ApiOwner
@@ -51,9 +52,8 @@ def get(self, request: Request, organization: Organization) -> Response:
5152
except NoProjects:
5253
return Response({"rankedAttributes": []})
5354

54-
aggregate_extrapolation = request.GET.get("aggregateExtrapolation") == "1"
5555
resolver_config = SearchResolverConfig(
56-
disable_aggregate_extrapolation=not aggregate_extrapolation
56+
extrapolation_mode=ExtrapolationMode.EXTRAPOLATION_MODE_NONE
5757
)
5858

5959
resolver = SearchResolver(

0 commit comments

Comments
 (0)