From 3e75d3bed8f3cb8e5e79319623469a97fc3be62b Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Tue, 3 Jun 2025 12:28:58 +0200 Subject: [PATCH 1/6] Add num_of_spans to data instead of measurements --- src/sentry/utils/sdk.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index f2768ad1f8d720..59c8bc74554b0a 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -237,12 +237,11 @@ def before_send_transaction(event: Event, _: Hint) -> Event | None: num_of_spans = len(event["spans"]) event["tags"]["spans_over_limit"] = str(num_of_spans >= 1000) - if not event["measurements"]: - event["measurements"] = {} - event["measurements"]["num_of_spans"] = { - "value": num_of_spans, - "unit": None, - } + + event.setdefault("contexts", {}).setdefault("trace", {}).setdefault("data", {})[ + "num_of_spans" + ] = num_of_spans + return event From 9d6650b5651e20d4d4baea7f3fef0213142ab293 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Tue, 3 Jun 2025 12:33:34 +0200 Subject: [PATCH 2/6] Removed unused helper function --- src/sentry/utils/sdk.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 59c8bc74554b0a..9179f50eedae4b 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -694,15 +694,6 @@ def parse_org_slug(x: Organization | RpcOrganization | str) -> str: ) -def set_measurement(measurement_name, value, unit=None): - try: - transaction = sentry_sdk.Scope.get_current_scope().transaction - if transaction is not None: - transaction.set_measurement(measurement_name, value, unit) - except Exception: - pass - - def set_span_data(data_name, value): span = sentry_sdk.get_current_span() if span is not None: @@ -745,6 +736,5 @@ def merge_context_into_scope( "patch_transport_for_instrumentation", "isolation_scope", "set_current_event_project", - "set_measurement", "traces_sampler", ) From d7ea9256db74b4f169541fb4ad4f82b4b25201f2 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Thu, 5 Jun 2025 14:57:14 +0200 Subject: [PATCH 3/6] linting --- src/sentry/utils/sdk.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 9179f50eedae4b..0254e4a421075e 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -238,9 +238,8 @@ def before_send_transaction(event: Event, _: Hint) -> Event | None: event["tags"]["spans_over_limit"] = str(num_of_spans >= 1000) - event.setdefault("contexts", {}).setdefault("trace", {}).setdefault("data", {})[ - "num_of_spans" - ] = num_of_spans + data = event.setdefault("contexts", {}).setdefault("trace", {}).setdefault("data", {}) + data["num_of_spans"] = num_of_spans return event From 81e48cd512c3c573389bec0c53d232e115c95395 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Thu, 5 Jun 2025 17:21:19 +0200 Subject: [PATCH 4/6] ref: fix mypy --- src/sentry/utils/sdk.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 0254e4a421075e..6d47d729e9ed29 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -3,6 +3,7 @@ import copy import logging import sys +import typing from collections.abc import Generator, Mapping, Sequence, Sized from types import FrameType from typing import TYPE_CHECKING, Any, NamedTuple @@ -238,7 +239,12 @@ def before_send_transaction(event: Event, _: Hint) -> Event | None: event["tags"]["spans_over_limit"] = str(num_of_spans >= 1000) - data = event.setdefault("contexts", {}).setdefault("trace", {}).setdefault("data", {}) + # Type safety: `event["contexts"]["trace"]["data"]` is a dictionary if it is set. + # See https://develop.sentry.dev/sdk/data-model/event-payloads/contexts/#trace-context. + data = typing.cast( + dict[str, object], + event.setdefault("contexts", {}).setdefault("trace", {}).setdefault("data", {}), + ) data["num_of_spans"] = num_of_spans return event From 743e202fe349ff8fa9b94b7b282f819bc57cedbc Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Fri, 6 Jun 2025 08:19:21 +0200 Subject: [PATCH 5/6] merge conflict issue --- src/sentry/utils/sdk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 6d47d729e9ed29..26a977f8d63284 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -699,7 +699,7 @@ def parse_org_slug(x: Organization | RpcOrganization | str) -> str: ) -def set_span_data(data_name, value): +def set_attribute(data_name, value): span = sentry_sdk.get_current_span() if span is not None: span.set_data(data_name, value) From 7fef7fecc4038058ffe586cdc992fd8a7a048f18 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Fri, 6 Jun 2025 08:23:18 +0200 Subject: [PATCH 6/6] hm... --- src/sentry/utils/sdk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 26a977f8d63284..503118b8b1eedf 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -699,7 +699,7 @@ def parse_org_slug(x: Organization | RpcOrganization | str) -> str: ) -def set_attribute(data_name, value): +def set_span_attribute(data_name, value): span = sentry_sdk.get_current_span() if span is not None: span.set_data(data_name, value)