dd-trace-py
dd-trace-py copied to clipboard
feat(tracer): deprecate escaped and timestamp attributes in record_exception API
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
escapedandtimestampattributes - 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_exceptiondoc.
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
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.
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
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%)
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%]