Skip to content

feat(tracer): deprecate escaped and timestamp attributes in record_exception API #13798

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jun 30, 2025

Conversation

dubloom
Copy link
Contributor

@dubloom dubloom commented Jun 27, 2025

Motivation

record_exception call was added few releases ago because some customers were asking to be able to send manually errors. However, it was mainly based on the OpenTelemetry implementation. The OTEL sdk are inconsistent between tracers and some implementations are using for example escaped attribute which does not make sense at all for us.
An RFC was written to ease the implementation across tracer. This PR is there to make the python implementation consistent with the RFC.

Changes

  • Deprecates escaped and timestamp attributes
  • Add a validation steps for attributes. If an attribute has not one of the typed defined in this RFC, the span event will be dropped. Without span validation, it would be "shadow" dropped which could make the user think the feature is not working.
  • Improves record_exception doc.

Checklist

  • PR author has checked that all the criteria below are met
  • The PR description includes an overview of the change
  • The PR description articulates the motivation for the change
  • The change includes tests OR the PR description describes a testing strategy
  • The PR description notes risks associated with the change, if any
  • Newly-added code is easy to change
  • The change follows the library release note guidelines
  • The change includes or references documentation updates if necessary
  • Backport labels are set (if applicable)

Reviewer Checklist

  • Reviewer has checked that all the criteria below are met
  • Title is accurate
  • All changes are related to the pull request's stated goal
  • Avoids breaking API changes
  • Testing strategy adequately addresses listed risks
  • Newly-added code is easy to change
  • Release note makes sense to a user of the library
  • If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment
  • Backport labels are set in a manner that is consistent with the release branch maintenance policy

@dubloom dubloom requested review from a team as code owners June 27, 2025 14:03
Copy link
Contributor

github-actions bot commented Jun 27, 2025

Circular import analysis

🚨 New circular imports detected 🚨

The following circular imports among modules have been detected on this PR, when compared to the base branch:

ddtrace -> ddtrace.trace -> ddtrace._trace.provider -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.filters -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.filters -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.core -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf -> ddtrace.appsec._ddwaf.waf_stubs -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.stats -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.stats -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.endpoint_call_counter -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf_mock -> ddtrace.appsec._ddwaf.waf_stubs -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.endpoint_call_counter -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.endpoint_call_counter -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf_stubs -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.filters -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._iast.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._iast.processor -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast._span_metrics -> ddtrace.appsec._iast._iast_env -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.endpoint_call_counter -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.stats -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf -> ddtrace.appsec._ddwaf.ddwaf_types -> ddtrace.appsec._ddwaf.waf_stubs -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._exploit_prevention.stack_traces -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.filters -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.provider -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.peer_service.processor -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.schema.processor -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.peer_service.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._iast.sampling.vulnerability_detection -> ddtrace.appsec._iast._iast_env -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._iast.processor -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._handlers -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.stats -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.schema.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._iast.sampling.vulnerability_detection -> ddtrace.appsec._iast._iast_env -> ddtrace.appsec._iast.reporter -> ddtrace.appsec._exploit_prevention.stack_traces -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._iast.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast._span_metrics -> ddtrace.appsec._iast._iast_env -> ddtrace.appsec._iast.reporter -> ddtrace.appsec._exploit_prevention.stack_traces -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.schema.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf -> ddtrace.appsec._ddwaf.ddwaf_types -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.peer_service.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.stats -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._trace_utils -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._metrics -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.filters -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.peer_service.processor -> ddtrace._trace.processor -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.schema.processor -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._iast.processor -> ddtrace._trace.processor -> ddtrace.internal.sampling -> ddtrace._trace.sampling_rule -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._api_security.api_manager -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.internal.processor.endpoint_call_counter -> ddtrace._trace.processor -> ddtrace._trace.sampler -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._ddwaf -> ddtrace.appsec._ddwaf.waf_mock -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._iast.taint_sinks.ssrf -> ddtrace.appsec._iast.taint_sinks._base -> ddtrace.appsec._trace_utils -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._listeners -> ddtrace.appsec._common_module_patches -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace
ddtrace -> ddtrace.trace -> ddtrace._trace.tracer -> ddtrace.appsec._processor -> ddtrace.appsec._trace_utils -> ddtrace.appsec._asm_request_context -> ddtrace.appsec._utils -> ddtrace.contrib.internal.trace_utils_base -> ddtrace._trace.span -> ddtrace

Please consider refactoring your changes in accordance to the Separation of Concerns principle.

Copy link
Contributor

CODEOWNERS have been resolved as:

releasenotes/notes/record-exception-deprecate-arguments-c82d62d15485e60a.yaml  @DataDog/apm-python
ddtrace/_trace/span.py                                                  @DataDog/apm-sdk-api-python
ddtrace/internal/constants.py                                           @DataDog/apm-core-python
tests/tracer/test_span.py                                               @DataDog/apm-sdk-api-python

@dubloom dubloom changed the title Dubloom/record exception follows rfc feat(tracer): deprecates escaped and timestamp attributes in record_exception API Jun 27, 2025
Copy link
Contributor

github-actions bot commented Jun 27, 2025

Bootstrap import analysis

Comparison of import times between this PR and base.

Summary

The average import time from this PR is: 278 ± 5 ms.

The average import time from base is: 281 ± 5 ms.

The import time difference between this PR and base is: -3.4 ± 0.2 ms.

Import time breakdown

The following import paths have grown:

ddtrace.auto 0.297 ms (0.11%)
ddtrace 0.297 ms (0.11%)
ddtrace._logger 0.297 ms (0.11%)
ddtrace.internal.telemetry 0.297 ms (0.11%)
ddtrace.internal.telemetry.writer 0.297 ms (0.11%)
http.client 0.297 ms (0.11%)
ssl 0.297 ms (0.11%)

The following import paths have shrunk:

ddtrace.auto 2.395 ms (0.86%)
ddtrace.bootstrap.sitecustomize 1.405 ms (0.51%)
ddtrace.bootstrap.preload 1.405 ms (0.51%)
ddtrace.internal.remoteconfig.client 0.677 ms (0.24%)
ddtrace 0.990 ms (0.36%)
ddtrace._logger 0.314 ms (0.11%)
ddtrace.internal.telemetry 0.314 ms (0.11%)
ddtrace.internal.telemetry.writer 0.314 ms (0.11%)
http.client 0.314 ms (0.11%)
ssl 0.314 ms (0.11%)
_ssl 0.314 ms (0.11%)
ddtrace.internal._unpatched 0.030 ms (0.01%)
json 0.030 ms (0.01%)
json.decoder 0.030 ms (0.01%)
re 0.030 ms (0.01%)
enum 0.030 ms (0.01%)
types 0.030 ms (0.01%)

@dubloom dubloom changed the title feat(tracer): deprecates escaped and timestamp attributes in record_exception API feat(tracer): deprecate escaped and timestamp attributes in record_exception API Jun 27, 2025
@pr-commenter
Copy link

pr-commenter bot commented Jun 27, 2025

Benchmarks

Benchmark execution time: 2025-06-30 16:09:47

Comparing candidate commit 29a9ec1 in PR branch dubloom/record-exception-follows-rfc with baseline commit a78ab21 in branch main.

Found 0 performance improvements and 6 performance regressions! Performance is the same for 564 metrics, 2 unstable metrics.

scenario:iastaspects-format_map_aspect

  • 🟥 execution_time [+485.361ns; +574.905ns] or [+15.116%; +17.905%]

scenario:iastaspectsospath-ospathbasename_aspect

  • 🟥 execution_time [+454.978ns; +672.044ns] or [+10.640%; +15.717%]

scenario:iastaspectsospath-ospathjoin_aspect

  • 🟥 execution_time [+953.021ns; +1032.634ns] or [+15.494%; +16.789%]

scenario:iastaspectsospath-ospathnormcase_aspect

  • 🟥 execution_time [+283.009ns; +386.978ns] or [+8.079%; +11.048%]

scenario:iastaspectsospath-ospathsplitdrive_aspect

  • 🟥 execution_time [+483.968ns; +539.651ns] or [+13.119%; +14.629%]

scenario:telemetryaddmetric-1-distribution-metric-1-times

  • 🟥 execution_time [+402.886ns; +446.089ns] or [+13.876%; +15.364%]

@emmettbutler emmettbutler added changelog/no-changelog A changelog entry is not required for this PR. and removed changelog/no-changelog A changelog entry is not required for this PR. labels Jun 27, 2025
@dubloom dubloom force-pushed the dubloom/record-exception-follows-rfc branch from 9543c09 to 7bc2491 Compare June 30, 2025 08:04
Copy link
Contributor

@mabdinur mabdinur left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some non blocking suggestions. Overall looks good to me 😄

@dubloom dubloom enabled auto-merge (squash) June 30, 2025 15:22
@dubloom dubloom merged commit 009ecef into main Jun 30, 2025
717 checks passed
@dubloom dubloom deleted the dubloom/record-exception-follows-rfc branch June 30, 2025 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants