dd-trace-py icon indicating copy to clipboard operation
dd-trace-py copied to clipboard

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

Open dubloom opened this issue 5 months ago • 4 comments

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

  • [x] 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 avatar Jun 27 '25 14:06 dubloom

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.

github-actions[bot] avatar Jun 27 '25 14:06 github-actions[bot]

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

github-actions[bot] avatar Jun 27 '25 14:06 github-actions[bot]

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%)

github-actions[bot] avatar Jun 27 '25 14:06 github-actions[bot]

Benchmarks

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

Comparing candidate commit 29a9ec138778e95651ff7383f0e9748a136feee8 in PR branch dubloom/record-exception-follows-rfc with baseline commit a78ab21066956ae82f30e699bec432427c609c90 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%]

pr-commenter[bot] avatar Jun 27 '25 14:06 pr-commenter[bot]