From 9829d45f2d8a7843850aa07e99d73efd69da38f1 Mon Sep 17 00:00:00 2001 From: Michelle Zhang <56095982+michellewzhang@users.noreply.github.com> Date: Mon, 28 Apr 2025 12:53:04 -0700 Subject: [PATCH 1/3] ref(feedback): add release to feedback event & tags --- src/sentry/feedback/usecases/create_feedback.py | 4 ++++ .../feedback/usecases/test_create_feedback.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/sentry/feedback/usecases/create_feedback.py b/src/sentry/feedback/usecases/create_feedback.py index 806922a259e9bb..1558f95b6d4bd3 100644 --- a/src/sentry/feedback/usecases/create_feedback.py +++ b/src/sentry/feedback/usecases/create_feedback.py @@ -133,6 +133,8 @@ def fix_for_issue_platform(event_data: dict[str, Any]) -> dict[str, Any]: ret_event["level"] = event_data.get("level", "info") ret_event["environment"] = event_data.get("environment", "production") + ret_event["release"] = event_data.get("release", None) + if event_data.get("sdk"): ret_event["sdk"] = event_data["sdk"] ret_event["request"] = event_data.get("request", {}) @@ -382,6 +384,8 @@ def create_feedback_issue( else: event_fixed["tags"]["has_linked_error"] = "false" + event_fixed["tags"]["release"] = event_fixed.get("release", None) + # make sure event data is valid for issue platform validate_issue_platform_event_schema(event_fixed) diff --git a/tests/sentry/feedback/usecases/test_create_feedback.py b/tests/sentry/feedback/usecases/test_create_feedback.py index c662c544b211f4..fdbfbd28c9ec19 100644 --- a/tests/sentry/feedback/usecases/test_create_feedback.py +++ b/tests/sentry/feedback/usecases/test_create_feedback.py @@ -777,6 +777,7 @@ def test_create_feedback_adds_associated_event_id( def test_create_feedback_tags(default_project, mock_produce_occurrence_to_kafka): """We want to surface these tags in the UI. We also use user.email for alert conditions.""" event = mock_feedback_event(default_project.id) + event["release"] = "frontend@daf1316f209d961443664cd6eb4231ca154db502" event["user"]["email"] = "josh.ferge@sentry.io" event["contexts"]["feedback"]["contact_email"] = "andrew@sentry.io" event["contexts"]["trace"] = {"trace_id": "abc123"} @@ -802,6 +803,9 @@ def test_create_feedback_tags(default_project, mock_produce_occurrence_to_kafka) assert tags["associated_event_id"] == event_id assert tags["has_linked_error"] == "true" + # Adds release to tags + assert tags["release"] == "frontend@daf1316f209d961443664cd6eb4231ca154db502" + @django_db_all def test_create_feedback_tags_no_associated_event_id( @@ -949,3 +953,15 @@ def test_denylist(set_sentry_option, default_project): def test_denylist_not_in_list(set_sentry_option, default_project): with set_sentry_option("feedback.organizations.slug-denylist", ["not-in-list"]): assert is_in_feedback_denylist(default_project.organization) is False + + +@django_db_all +def test_create_feedback_release(default_project, mock_produce_occurrence_to_kafka): + event = mock_feedback_event(default_project.id) + event["release"] = "frontend@daf1316f209d961443664cd6eb4231ca154db502" + ret = create_feedback_issue( + event, default_project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE + ) + + assert mock_produce_occurrence_to_kafka.call_count == 1 + assert ret["release"] == "frontend@daf1316f209d961443664cd6eb4231ca154db502" From 14f7bf12287cd8068527d8d436311cc5abae081b Mon Sep 17 00:00:00 2001 From: Michelle Zhang <56095982+michellewzhang@users.noreply.github.com> Date: Mon, 28 Apr 2025 13:09:31 -0700 Subject: [PATCH 2/3] :white_check_mark: fix test --- tests/sentry/feedback/usecases/test_create_feedback.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/sentry/feedback/usecases/test_create_feedback.py b/tests/sentry/feedback/usecases/test_create_feedback.py index fdbfbd28c9ec19..467fc54d6ec403 100644 --- a/tests/sentry/feedback/usecases/test_create_feedback.py +++ b/tests/sentry/feedback/usecases/test_create_feedback.py @@ -959,9 +959,9 @@ def test_denylist_not_in_list(set_sentry_option, default_project): def test_create_feedback_release(default_project, mock_produce_occurrence_to_kafka): event = mock_feedback_event(default_project.id) event["release"] = "frontend@daf1316f209d961443664cd6eb4231ca154db502" - ret = create_feedback_issue( - event, default_project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE - ) + create_feedback_issue(event, default_project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE) assert mock_produce_occurrence_to_kafka.call_count == 1 - assert ret["release"] == "frontend@daf1316f209d961443664cd6eb4231ca154db502" + produced_event = mock_produce_occurrence_to_kafka.call_args.kwargs["event_data"] + assert produced_event.get("release") is not None + assert produced_event.get("release") == "frontend@daf1316f209d961443664cd6eb4231ca154db502" From 1962a72de10ae978458a9105f75adf18ce1a0d51 Mon Sep 17 00:00:00 2001 From: Michelle Zhang <56095982+michellewzhang@users.noreply.github.com> Date: Mon, 28 Apr 2025 14:46:37 -0700 Subject: [PATCH 3/3] :white_check_mark: fix tags --- src/sentry/feedback/usecases/create_feedback.py | 7 +++++-- src/sentry/utils/mockdata/core.py | 9 ++++++++- tests/sentry/feedback/usecases/test_create_feedback.py | 2 -- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/sentry/feedback/usecases/create_feedback.py b/src/sentry/feedback/usecases/create_feedback.py index 1558f95b6d4bd3..169777997d838a 100644 --- a/src/sentry/feedback/usecases/create_feedback.py +++ b/src/sentry/feedback/usecases/create_feedback.py @@ -133,7 +133,9 @@ def fix_for_issue_platform(event_data: dict[str, Any]) -> dict[str, Any]: ret_event["level"] = event_data.get("level", "info") ret_event["environment"] = event_data.get("environment", "production") - ret_event["release"] = event_data.get("release", None) + release_value = event_data.get("release") + if release_value: + ret_event["release"] = release_value if event_data.get("sdk"): ret_event["sdk"] = event_data["sdk"] @@ -384,7 +386,8 @@ def create_feedback_issue( else: event_fixed["tags"]["has_linked_error"] = "false" - event_fixed["tags"]["release"] = event_fixed.get("release", None) + if event_fixed.get("release"): + event_fixed["tags"]["release"] = event_fixed["release"] # make sure event data is valid for issue platform validate_issue_platform_event_schema(event_fixed) diff --git a/src/sentry/utils/mockdata/core.py b/src/sentry/utils/mockdata/core.py index a9f8195eb332b6..d3b83931a9dda6 100644 --- a/src/sentry/utils/mockdata/core.py +++ b/src/sentry/utils/mockdata/core.py @@ -1275,6 +1275,9 @@ def create_mock_attachment(event_id, project): def create_mock_user_feedback(project, has_attachment=True): + # Get an existing release for this project instead of creating a new one + release = Release.objects.filter(projects=project).first() + event = { "project_id": project.id, "request": { @@ -1287,7 +1290,6 @@ def create_mock_user_feedback(project, has_attachment=True): "timestamp": time.time(), "received": "2024-4-27T22:23:29.574000+00:00", "environment": next(ENVIRONMENTS), - "release": "frontend@daf1316f209d961443664cd6eb4231ca154db502", "user": { "ip_address": "72.164.175.154", "email": "josh.ferge@sentry.io", @@ -1307,6 +1309,11 @@ def create_mock_user_feedback(project, has_attachment=True): "breadcrumbs": [], "platform": "javascript", } + + # Only add the release field if we found an existing release + if release: + event["release"] = release.version + create_feedback_issue(event, project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE) if has_attachment: diff --git a/tests/sentry/feedback/usecases/test_create_feedback.py b/tests/sentry/feedback/usecases/test_create_feedback.py index 467fc54d6ec403..978ff64b16614f 100644 --- a/tests/sentry/feedback/usecases/test_create_feedback.py +++ b/tests/sentry/feedback/usecases/test_create_feedback.py @@ -777,7 +777,6 @@ def test_create_feedback_adds_associated_event_id( def test_create_feedback_tags(default_project, mock_produce_occurrence_to_kafka): """We want to surface these tags in the UI. We also use user.email for alert conditions.""" event = mock_feedback_event(default_project.id) - event["release"] = "frontend@daf1316f209d961443664cd6eb4231ca154db502" event["user"]["email"] = "josh.ferge@sentry.io" event["contexts"]["feedback"]["contact_email"] = "andrew@sentry.io" event["contexts"]["trace"] = {"trace_id": "abc123"} @@ -958,7 +957,6 @@ def test_denylist_not_in_list(set_sentry_option, default_project): @django_db_all def test_create_feedback_release(default_project, mock_produce_occurrence_to_kafka): event = mock_feedback_event(default_project.id) - event["release"] = "frontend@daf1316f209d961443664cd6eb4231ca154db502" create_feedback_issue(event, default_project.id, FeedbackCreationSource.NEW_FEEDBACK_ENVELOPE) assert mock_produce_occurrence_to_kafka.call_count == 1