Skip to content

Commit 741fff0

Browse files
authored
feat(spans): Track indexed spans outcomes in process-segments (#95422)
Relay will stop producing ACCEPTED outcomes for indexed spans. This should instead be handled by the component closest to storage. Eventually, EAP will support metadata to track outcomes internally. Until this is available, we track them in the `process-segments` consumer. This is a first iteration, in which we track an aggregate outcome for all spans in a segment. Ideally, we move this into a strategy following the produce step to ensure that we do not track outcomes if producing fails.
1 parent b100e55 commit 741fff0

File tree

1 file changed

+22
-1
lines changed
  • src/sentry/spans/consumers/process_segments

1 file changed

+22
-1
lines changed

src/sentry/spans/consumers/process_segments/message.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from sentry_kafka_schemas.schema_types.buffered_segments_v1 import SegmentSpan
99

1010
from sentry import options
11-
from sentry.constants import INSIGHT_MODULE_FILTERS
11+
from sentry.constants import INSIGHT_MODULE_FILTERS, DataCategory
1212
from sentry.dynamic_sampling.rules.helpers.latest_releases import record_latest_release
1313
from sentry.event_manager import INSIGHT_MODULE_TO_PROJECT_FLAG_NAME
1414
from sentry.issues.grouptype import PerformanceStreamedSpansGroupTypeExperimental
@@ -32,6 +32,7 @@
3232
from sentry.spans.grouping.api import load_span_grouping_config
3333
from sentry.utils import metrics
3434
from sentry.utils.dates import to_datetime
35+
from sentry.utils.outcomes import Outcome, track_outcome
3536
from sentry.utils.projectflags import set_project_flag_and_signal
3637

3738
logger = logging.getLogger(__name__)
@@ -64,6 +65,7 @@ def process_segment(unprocessed_spans: list[SegmentSpan]) -> list[Span]:
6465
_create_models(segment_span, project)
6566
_detect_performance_problems(segment_span, spans, project)
6667
_record_signals(segment_span, spans, project)
68+
_track_outcomes(segment_span, spans)
6769

6870
return spans
6971

@@ -260,3 +262,22 @@ def _record_signals(segment_span: Span, spans: list[Span], project: Project) ->
260262
first_insight_span_received,
261263
module=module,
262264
)
265+
266+
267+
@metrics.wraps("spans.consumers.process_segments.record_outcomes")
268+
def _track_outcomes(segment_span: Span, spans: list[Span]) -> None:
269+
"""
270+
Record outcomes for all spans in the segment.
271+
"""
272+
273+
track_outcome(
274+
org_id=segment_span["organization_id"],
275+
project_id=segment_span["project_id"],
276+
key_id=cast(int | None, segment_span.get("key_id", None)),
277+
outcome=Outcome.ACCEPTED,
278+
reason=None,
279+
timestamp=to_datetime(segment_span["received"]),
280+
event_id=None,
281+
category=DataCategory.SPAN_INDEXED,
282+
quantity=len(spans),
283+
)

0 commit comments

Comments
 (0)