Skip to content

Commit 20b13f9

Browse files
committed
Merge branch 'master' into jb/cmdk/jsx-poc
2 parents 88b2723 + 1586980 commit 20b13f9

File tree

274 files changed

+7291
-3697
lines changed

Some content is hidden

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

274 files changed

+7291
-3697
lines changed

.github/CODEOWNERS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ tests/sentry/api/endpoints/test_organization_attribute_mappings.py @get
439439
/static/app/components/loading/ @getsentry/app-frontend
440440
/static/app/components/events/interfaces/ @getsentry/app-frontend
441441
/static/app/components/forms/ @getsentry/app-frontend
442+
/static/app/components/featureShowcase.mdx @getsentry/app-frontend
443+
/static/app/components/featureShowcase.spec.tsx @getsentry/app-frontend
444+
/static/app/components/featureShowcase.tsx @getsentry/app-frontend
442445
/static/app/components/markdownTextArea.tsx @getsentry/app-frontend
443446
/static/app/locale.tsx @getsentry/app-frontend
444447
## End of Frontend

knip.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ const productionEntryPoints = [
2525
'static/app/components/pipeline/**/*.{js,ts,tsx}',
2626
// TODO: Remove when used
2727
'static/app/views/seerExplorer/contexts/**/*.{js,ts,tsx}',
28+
// TODO: Remove when used
29+
'static/app/components/featureShowcase.tsx',
2830
];
2931

3032
const testingEntryPoints = [

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ module = [
474474
"sentry.identity.vsts_extension.*",
475475
"sentry.incidents.endpoints.bases",
476476
"sentry.incidents.handlers.*",
477+
"sentry.incidents.metric_issue_detector",
477478
"sentry.incidents.utils.*",
478479
"sentry.ingest.slicing",
479480
"sentry.insights.migrations.*",

src/sentry/api/endpoints/organization_events.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
from sentry.apidocs.parameters import GlobalParams, OrganizationParams, VisibilityParams
2626
from sentry.apidocs.utils import inline_sentry_response_serializer
2727
from sentry.discover.models import DiscoverSavedQuery, DiscoverSavedQueryTypes
28-
from sentry.exceptions import InvalidParams
2928
from sentry.models.dashboard_widget import DashboardWidget, DashboardWidgetTypes
3029
from sentry.models.organization import Organization
3130
from sentry.ratelimits.config import RateLimitConfig
@@ -194,8 +193,6 @@ def get(self, request: Request, organization: Organization) -> Response:
194193
},
195194
}
196195
)
197-
except InvalidParams as err:
198-
raise ParseError(detail=str(err))
199196

200197
batch_features = self.get_features(organization, request)
201198

src/sentry/api/endpoints/organization_profiling_profiles.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import sentry_sdk
12
from django.http import HttpResponse
23
from rest_framework import serializers
34
from rest_framework.exceptions import ParseError
@@ -77,6 +78,8 @@ def get(self, request: Request, organization: Organization) -> HttpResponse:
7778
return Response(serializer.errors, status=400)
7879
serialized = serializer.validated_data
7980

81+
sentry_sdk.set_tag("query.dataSource", serialized["dataSource"])
82+
8083
with handle_query_errors():
8184
executor = FlamegraphExecutor(
8285
request=request,

src/sentry/api/endpoints/prompts_activity.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ def get(self, request: Request, organization: Organization, **kwargs) -> Respons
7979
)
8080
featuredata = {k.feature: k.data for k in result_qs}
8181
if len(features) == 1:
82-
result = result_qs.first()
83-
data = None if result is None else result.data
82+
data = featuredata.get(features[0])
8483
return Response({"data": data, "features": featuredata})
8584
else:
8685
return Response({"features": featuredata})

src/sentry/api/endpoints/source_map_debug_blue_thunder_edition.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Literal, TypedDict
22

33
import sentry_sdk
4+
from django.db.models import Exists, OuterRef
45
from django.utils.encoding import force_bytes, force_str
56
from drf_spectacular.utils import extend_schema
67
from packaging.version import Version
@@ -20,6 +21,7 @@
2021
ArtifactBundle,
2122
ArtifactBundleArchive,
2223
DebugIdArtifactBundle,
24+
ProjectArtifactBundle,
2325
ReleaseArtifactBundle,
2426
SourceFileType,
2527
)
@@ -179,11 +181,6 @@ def get(self, request: Request, project: Project, event_id: str) -> Response:
179181
has_uploaded_artifact_bundle_with_release = ReleaseArtifactBundle.objects.filter(
180182
organization_id=project.organization_id, release_name=release.version
181183
).exists()
182-
has_uploaded_some_artifact_with_a_debug_id = DebugIdArtifactBundle.objects.filter(
183-
organization_id=project.organization_id,
184-
artifact_bundle__projectartifactbundle__project_id=project.id,
185-
).exists()
186-
187184
debug_images = get_path(event_data, "debug_meta", "images")
188185
debug_images = debug_images if debug_images is not None else []
189186

@@ -212,6 +209,23 @@ def get(self, request: Request, project: Project, event_id: str) -> Response:
212209
):
213210
debug_ids_with_uploaded_source_map.add(str(debug_id_artifact_bundle.debug_id))
214211

212+
has_uploaded_some_artifact_with_a_debug_id = bool(
213+
debug_ids_with_uploaded_source_file or debug_ids_with_uploaded_source_map
214+
) or (
215+
DebugIdArtifactBundle.objects.filter(
216+
organization_id=project.organization_id,
217+
)
218+
.filter(
219+
Exists(
220+
ProjectArtifactBundle.objects.filter(
221+
artifact_bundle_id=OuterRef("artifact_bundle_id"),
222+
project_id=project.id,
223+
)
224+
)
225+
)
226+
.exists()
227+
)
228+
215229
# Get all abs paths and query for their existence so that we can match release artifacts
216230
release_process_abs_path_data = {}
217231
if release is not None:

src/sentry/api/serializers/rest_framework/dashboard.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,19 @@ def update_widgets(self, instance, widget_data):
862862
# Create a new widget.
863863
self.create_widget(instance, data)
864864
else:
865+
sentry_sdk.set_context(
866+
"dashboard",
867+
{
868+
"org_slug": instance.organization.slug,
869+
"dashboard_id": instance.id,
870+
"widget_id": widget_id,
871+
"existing_widget_ids": list(existing_map.keys()),
872+
"requested_widget_ids": widget_ids,
873+
},
874+
)
875+
sentry_sdk.capture_message(
876+
"Attempted to update widget not belonging to dashboard."
877+
)
865878
raise serializers.ValidationError(
866879
"You cannot update widgets that are not part of this dashboard."
867880
)

src/sentry/api/urls.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,6 @@
377377
)
378378
from sentry.issues.endpoints.project_codeowners_details import ProjectCodeOwnersDetailsEndpoint
379379
from sentry.issues.endpoints.project_codeowners_index import ProjectCodeOwnersEndpoint
380-
from sentry.issues.endpoints.project_grouping_configs import ProjectGroupingConfigsEndpoint
381380
from sentry.issues.endpoints.project_issues_resolved_in_release import (
382381
ProjectIssuesResolvedInReleaseEndpoint,
383382
)
@@ -3278,12 +3277,6 @@ def create_group_urls(name_prefix: str) -> list[URLPattern | URLResolver]:
32783277
ProjectRepoPathParsingEndpoint.as_view(),
32793278
name="sentry-api-0-project-repo-path-parsing",
32803279
),
3281-
# Grouping configs
3282-
re_path(
3283-
r"^(?P<organization_id_or_slug>[^/]+)/(?P<project_id_or_slug>[^/]+)/grouping-configs/$",
3284-
ProjectGroupingConfigsEndpoint.as_view(),
3285-
name="sentry-api-0-project-grouping-configs",
3286-
),
32873280
re_path(
32883281
r"^(?P<organization_id_or_slug>[^/]+)/(?P<project_id_or_slug>[^/]+)/profiling/profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
32893282
ProjectProfilingProfileEndpoint.as_view(),

src/sentry/apidocs/api_publish_status_allowlist_dont_modify.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,6 @@
695695
"DELETE"
696696
},
697697
"/api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/stacktrace-link/": {"GET"},
698-
"/api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/grouping-configs/": {"GET"},
699698
"/api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/appstoreconnect/": {"POST"},
700699
"/api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/appstoreconnect/apps/": {
701700
"POST"
@@ -822,8 +821,6 @@
822821
"/api/0/doc-integrations/{doc_integration_id_or_slug}/avatar/": {"GET", "PUT"},
823822
"/api/0/integration-features/": {"GET"},
824823
"/api/0/issue-occurrence/": {"POST"},
825-
"/api/0/grouping-configs/": {"GET"},
826-
"/api/0/organizations/{organization_id_or_slug}/grouping-configs/": {"GET"},
827824
"/api/0/builtin-symbol-sources/": {"GET"},
828825
"/api/0/organizations/{organization_id_or_slug}/builtin-symbol-sources/": {"GET"},
829826
"/api/0/wizard/": {"GET", "DELETE"},

0 commit comments

Comments
 (0)