Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: update structlog latest version to 25.5.0#15745

Closed
dd-octo-sts[bot] wants to merge 2 commits into
mainfrom
upgrade-latest-structlog-version
Closed

chore: update structlog latest version to 25.5.0#15745
dd-octo-sts[bot] wants to merge 2 commits into
mainfrom
upgrade-latest-structlog-version

Conversation

@dd-octo-sts

@dd-octo-sts dd-octo-sts Bot commented Dec 21, 2025

Copy link
Copy Markdown
Contributor

Update structlog lockfiles and dependency package lockfiles.
This performs the following updates:

  1. Some structlog lockfiles use structlog latest. This will update structlog and dependencies.
  2. Some structlog lockfiles use a pinned (non-latest) version of structlog, but require the latest version of another package. This will update all such packages.

@dd-octo-sts dd-octo-sts Bot added the changelog/no-changelog A changelog entry is not required for this PR. label Dec 21, 2025
@dd-octo-sts dd-octo-sts Bot requested review from a team as code owners December 21, 2025 00:23
@dd-octo-sts dd-octo-sts Bot added the changelog/no-changelog A changelog entry is not required for this PR. label Dec 21, 2025
@github-actions

Copy link
Copy Markdown
Contributor

CODEOWNERS have been resolved as:

.riot/requirements/102dfdd.txt                                          @DataDog/apm-python
.riot/requirements/10a0ca1.txt                                          @DataDog/apm-python
.riot/requirements/10da678.txt                                          @DataDog/apm-python
.riot/requirements/14c9053.txt                                          @DataDog/apm-python
.riot/requirements/17cb22b.txt                                          @DataDog/apm-python
.riot/requirements/257c9c5.txt                                          @DataDog/apm-python
.riot/requirements/3a31be0.txt                                          @DataDog/apm-python
.riot/requirements/461797f.txt                                          @DataDog/apm-python
.riot/requirements/6850ed5.txt                                          @DataDog/apm-python
.riot/requirements/94509b6.txt                                          @DataDog/apm-python
.riot/requirements/daada28.txt                                          @DataDog/apm-python
.riot/requirements/dedea98.txt                                          @DataDog/apm-python
ddtrace/contrib/integration_registry/registry.yaml                      @DataDog/apm-core-python @DataDog/apm-idm-python
supported_versions_output.json                                          @DataDog/apm-core-python
supported_versions_table.csv                                            @DataDog/apm-core-python

@pr-commenter

pr-commenter Bot commented Dec 21, 2025

Copy link
Copy Markdown

Performance SLOs

Comparing candidate upgrade-latest-structlog-version (bb45108) with baseline main (38d6538)

📈 Performance Regressions (3 suites)
📈 iastaspects - 118/118

✅ add_aspect

Time: ✅ 17.807µs (SLO: <20.000µs 📉 -11.0%) vs baseline: 📈 +19.7%

Memory: ✅ 42.703MB (SLO: <43.250MB 🟡 -1.3%) vs baseline: +5.0%


✅ add_inplace_aspect

Time: ✅ 14.803µs (SLO: <20.000µs 📉 -26.0%) vs baseline: -1.1%

Memory: ✅ 42.566MB (SLO: <43.250MB 🟡 -1.6%) vs baseline: +5.0%


✅ add_inplace_noaspect

Time: ✅ 0.341µs (SLO: <10.000µs 📉 -96.6%) vs baseline: +0.7%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ add_noaspect

Time: ✅ 0.546µs (SLO: <10.000µs 📉 -94.5%) vs baseline: +0.3%

Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ bytearray_aspect

Time: ✅ 17.810µs (SLO: <30.000µs 📉 -40.6%) vs baseline: -0.6%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.2%


✅ bytearray_extend_aspect

Time: ✅ 23.693µs (SLO: <30.000µs 📉 -21.0%) vs baseline: -0.3%

Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.8%


✅ bytearray_extend_noaspect

Time: ✅ 2.742µs (SLO: <10.000µs 📉 -72.6%) vs baseline: +0.5%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0%


✅ bytearray_noaspect

Time: ✅ 1.450µs (SLO: <10.000µs 📉 -85.5%) vs baseline: -2.2%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0%


✅ bytes_aspect

Time: ✅ 16.483µs (SLO: <20.000µs 📉 -17.6%) vs baseline: -0.4%

Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.1%


✅ bytes_noaspect

Time: ✅ 1.398µs (SLO: <10.000µs 📉 -86.0%) vs baseline: -1.9%

Memory: ✅ 42.723MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.3%


✅ bytesio_aspect

Time: ✅ 55.077µs (SLO: <70.000µs 📉 -21.3%) vs baseline: -0.9%

Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ bytesio_noaspect

Time: ✅ 3.256µs (SLO: <10.000µs 📉 -67.4%) vs baseline: -0.8%

Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.2%


✅ capitalize_aspect

Time: ✅ 14.556µs (SLO: <20.000µs 📉 -27.2%) vs baseline: -1.3%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.9%


✅ capitalize_noaspect

Time: ✅ 2.552µs (SLO: <10.000µs 📉 -74.5%) vs baseline: -1.4%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.0%


✅ casefold_aspect

Time: ✅ 14.496µs (SLO: <20.000µs 📉 -27.5%) vs baseline: -1.3%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.9%


✅ casefold_noaspect

Time: ✅ 3.136µs (SLO: <10.000µs 📉 -68.6%) vs baseline: -0.3%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.9%


✅ decode_aspect

Time: ✅ 15.428µs (SLO: <30.000µs 📉 -48.6%) vs baseline: -1.3%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0%


✅ decode_noaspect

Time: ✅ 1.606µs (SLO: <10.000µs 📉 -83.9%) vs baseline: -0.2%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9%


✅ encode_aspect

Time: ✅ 17.891µs (SLO: <30.000µs 📉 -40.4%) vs baseline: 📈 +21.5%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.1%


✅ encode_noaspect

Time: ✅ 1.423µs (SLO: <10.000µs 📉 -85.8%) vs baseline: -5.3%

Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.1%


✅ format_aspect

Time: ✅ 170.568µs (SLO: <200.000µs 📉 -14.7%) vs baseline: -0.3%

Memory: ✅ 42.821MB (SLO: <43.250MB 🟡 -1.0%) vs baseline: +5.3%


✅ format_map_aspect

Time: ✅ 190.912µs (SLO: <200.000µs -4.5%) vs baseline: -0.1%

Memory: ✅ 42.782MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +5.3%


✅ format_map_noaspect

Time: ✅ 3.806µs (SLO: <10.000µs 📉 -61.9%) vs baseline: -0.4%

Memory: ✅ 42.684MB (SLO: <43.250MB 🟡 -1.3%) vs baseline: +5.1%


✅ format_noaspect

Time: ✅ 3.135µs (SLO: <10.000µs 📉 -68.7%) vs baseline: -0.5%

Memory: ✅ 42.684MB (SLO: <43.250MB 🟡 -1.3%) vs baseline: +5.1%


✅ index_aspect

Time: ✅ 15.236µs (SLO: <20.000µs 📉 -23.8%) vs baseline: -0.2%

Memory: ✅ 42.585MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.6%


✅ index_noaspect

Time: ✅ 0.461µs (SLO: <10.000µs 📉 -95.4%) vs baseline: -0.1%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.9%


✅ join_aspect

Time: ✅ 16.973µs (SLO: <20.000µs 📉 -15.1%) vs baseline: -0.1%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9%


✅ join_noaspect

Time: ✅ 1.559µs (SLO: <10.000µs 📉 -84.4%) vs baseline: +0.5%

Memory: ✅ 42.723MB (SLO: <43.250MB 🟡 -1.2%) vs baseline: +5.3%


✅ ljust_aspect

Time: ✅ 20.535µs (SLO: <30.000µs 📉 -31.5%) vs baseline: -1.7%

Memory: ✅ 42.585MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.8%


✅ ljust_noaspect

Time: ✅ 2.660µs (SLO: <10.000µs 📉 -73.4%) vs baseline: -2.6%

Memory: ✅ 42.526MB (SLO: <43.250MB 🟡 -1.7%) vs baseline: +4.6%


✅ lower_aspect

Time: ✅ 17.714µs (SLO: <30.000µs 📉 -41.0%) vs baseline: -1.3%

Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.8%


✅ lower_noaspect

Time: ✅ 2.394µs (SLO: <10.000µs 📉 -76.1%) vs baseline: -0.6%

Memory: ✅ 42.605MB (SLO: <43.250MB 🟡 -1.5%) vs baseline: +4.9%


✅ lstrip_aspect

Time: ✅ 17.598µs (SLO: <30.000µs 📉 -41.3%) vs baseline: -0.7%

Memory: ✅ 42.723MB (SLO: <43.250MB 🟡 -1.2%) vs baseline: +5.2%


✅ lstrip_noaspect

Time: ✅ 1.855µs (SLO: <10.000µs 📉 -81.4%) vs baseline: +0.2%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0%


✅ modulo_aspect

Time: ✅ 166.176µs (SLO: <200.000µs 📉 -16.9%) vs baseline: -0.2%

Memory: ✅ 42.743MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +5.3%


✅ modulo_aspect_for_bytearray_bytearray

Time: ✅ 180.083µs (SLO: <200.000µs -10.0%) vs baseline: +3.2%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.6%


✅ modulo_aspect_for_bytes

Time: ✅ 168.975µs (SLO: <200.000µs 📉 -15.5%) vs baseline: +0.1%

Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.3%


✅ modulo_aspect_for_bytes_bytearray

Time: ✅ 172.079µs (SLO: <200.000µs 📉 -14.0%) vs baseline: ~same

Memory: ✅ 42.684MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ modulo_noaspect

Time: ✅ 3.633µs (SLO: <10.000µs 📉 -63.7%) vs baseline: -0.7%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.2%


✅ replace_aspect

Time: ✅ 211.489µs (SLO: <300.000µs 📉 -29.5%) vs baseline: -0.1%

Memory: ✅ 42.664MB (SLO: <44.000MB -3.0%) vs baseline: +5.1%


✅ replace_noaspect

Time: ✅ 2.916µs (SLO: <10.000µs 📉 -70.8%) vs baseline: ~same

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0%


✅ repr_aspect

Time: ✅ 1.430µs (SLO: <10.000µs 📉 -85.7%) vs baseline: +0.5%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ repr_noaspect

Time: ✅ 0.524µs (SLO: <10.000µs 📉 -94.8%) vs baseline: ~same

Memory: ✅ 42.703MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.0%


✅ rstrip_aspect

Time: ✅ 18.877µs (SLO: <30.000µs 📉 -37.1%) vs baseline: -0.4%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.0%


✅ rstrip_noaspect

Time: ✅ 1.938µs (SLO: <10.000µs 📉 -80.6%) vs baseline: ~same

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ slice_aspect

Time: ✅ 15.756µs (SLO: <20.000µs 📉 -21.2%) vs baseline: -1.0%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.1%


✅ slice_noaspect

Time: ✅ 0.599µs (SLO: <10.000µs 📉 -94.0%) vs baseline: +0.4%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ stringio_aspect

Time: ✅ 53.671µs (SLO: <80.000µs 📉 -32.9%) vs baseline: -0.6%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +5.0%


✅ stringio_noaspect

Time: ✅ 3.626µs (SLO: <10.000µs 📉 -63.7%) vs baseline: -0.1%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ strip_aspect

Time: ✅ 17.525µs (SLO: <20.000µs 📉 -12.4%) vs baseline: -0.5%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ strip_noaspect

Time: ✅ 1.840µs (SLO: <10.000µs 📉 -81.6%) vs baseline: -1.6%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.8%


✅ swapcase_aspect

Time: ✅ 18.331µs (SLO: <30.000µs 📉 -38.9%) vs baseline: -0.8%

Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +4.9%


✅ swapcase_noaspect

Time: ✅ 2.775µs (SLO: <10.000µs 📉 -72.2%) vs baseline: -0.9%

Memory: ✅ 42.723MB (SLO: <43.500MB 🟡 -1.8%) vs baseline: +5.1%


✅ title_aspect

Time: ✅ 18.119µs (SLO: <30.000µs 📉 -39.6%) vs baseline: -0.7%

Memory: ✅ 42.625MB (SLO: <43.000MB 🟡 -0.9%) vs baseline: +5.1%


✅ title_noaspect

Time: ✅ 2.622µs (SLO: <10.000µs 📉 -73.8%) vs baseline: -1.2%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +4.8%


✅ translate_aspect

Time: ✅ 24.022µs (SLO: <30.000µs 📉 -19.9%) vs baseline: 📈 +16.6%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9%


✅ translate_noaspect

Time: ✅ 4.266µs (SLO: <10.000µs 📉 -57.3%) vs baseline: -1.4%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +4.9%


✅ upper_aspect

Time: ✅ 17.814µs (SLO: <30.000µs 📉 -40.6%) vs baseline: -0.7%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ upper_noaspect

Time: ✅ 2.399µs (SLO: <10.000µs 📉 -76.0%) vs baseline: -1.1%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.6%


📈 iastaspectsospath - 24/24

✅ ospathbasename_aspect

Time: ✅ 5.108µs (SLO: <10.000µs 📉 -48.9%) vs baseline: 📈 +19.6%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.3%


✅ ospathbasename_noaspect

Time: ✅ 4.282µs (SLO: <10.000µs 📉 -57.2%) vs baseline: -0.7%

Memory: ✅ 42.743MB (SLO: <43.500MB 🟡 -1.7%) vs baseline: +5.6%


✅ ospathjoin_aspect

Time: ✅ 6.229µs (SLO: <10.000µs 📉 -37.7%) vs baseline: -0.7%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.3%


✅ ospathjoin_noaspect

Time: ✅ 6.329µs (SLO: <10.000µs 📉 -36.7%) vs baseline: +0.4%

Memory: ✅ 42.625MB (SLO: <43.500MB -2.0%) vs baseline: +4.9%


✅ ospathnormcase_aspect

Time: ✅ 3.546µs (SLO: <10.000µs 📉 -64.5%) vs baseline: -0.6%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.2%


✅ ospathnormcase_noaspect

Time: ✅ 3.583µs (SLO: <10.000µs 📉 -64.2%) vs baseline: -2.0%

Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +4.9%


✅ ospathsplit_aspect

Time: ✅ 4.881µs (SLO: <10.000µs 📉 -51.2%) vs baseline: -0.8%

Memory: ✅ 42.487MB (SLO: <43.500MB -2.3%) vs baseline: +4.5%


✅ ospathsplit_noaspect

Time: ✅ 5.001µs (SLO: <10.000µs 📉 -50.0%) vs baseline: -0.8%

Memory: ✅ 42.408MB (SLO: <43.500MB -2.5%) vs baseline: +4.6%


✅ ospathsplitdrive_aspect

Time: ✅ 3.757µs (SLO: <10.000µs 📉 -62.4%) vs baseline: -0.3%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +5.2%


✅ ospathsplitdrive_noaspect

Time: ✅ 0.740µs (SLO: <10.000µs 📉 -92.6%) vs baseline: -0.9%

Memory: ✅ 42.487MB (SLO: <43.500MB -2.3%) vs baseline: +4.5%


✅ ospathsplitext_aspect

Time: ✅ 4.591µs (SLO: <10.000µs 📉 -54.1%) vs baseline: -1.1%

Memory: ✅ 42.546MB (SLO: <43.500MB -2.2%) vs baseline: +5.1%


✅ ospathsplitext_noaspect

Time: ✅ 4.642µs (SLO: <10.000µs 📉 -53.6%) vs baseline: +0.5%

Memory: ✅ 42.566MB (SLO: <43.500MB -2.1%) vs baseline: +5.1%


📈 telemetryaddmetric - 30/30

✅ 1-count-metric-1-times

Time: ✅ 3.419µs (SLO: <20.000µs 📉 -82.9%) vs baseline: 📈 +13.4%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.0%


✅ 1-count-metrics-100-times

Time: ✅ 199.934µs (SLO: <220.000µs -9.1%) vs baseline: -1.3%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.4%


✅ 1-distribution-metric-1-times

Time: ✅ 3.357µs (SLO: <20.000µs 📉 -83.2%) vs baseline: -0.2%

Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +5.0%


✅ 1-distribution-metrics-100-times

Time: ✅ 213.831µs (SLO: <230.000µs -7.0%) vs baseline: -1.8%

Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +5.0%


✅ 1-gauge-metric-1-times

Time: ✅ 2.230µs (SLO: <20.000µs 📉 -88.8%) vs baseline: -0.7%

Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.2%


✅ 1-gauge-metrics-100-times

Time: ✅ 137.721µs (SLO: <150.000µs -8.2%) vs baseline: -0.4%

Memory: ✅ 34.819MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +4.4%


✅ 1-rate-metric-1-times

Time: ✅ 3.171µs (SLO: <20.000µs 📉 -84.1%) vs baseline: -0.4%

Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.8%


✅ 1-rate-metrics-100-times

Time: ✅ 214.642µs (SLO: <250.000µs 📉 -14.1%) vs baseline: -1.8%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.2%


✅ 100-count-metrics-100-times

Time: ✅ 20.058ms (SLO: <22.000ms -8.8%) vs baseline: +1.2%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.0%


✅ 100-distribution-metrics-100-times

Time: ✅ 2.227ms (SLO: <2.550ms 📉 -12.7%) vs baseline: -2.0%

Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +5.2%


✅ 100-gauge-metrics-100-times

Time: ✅ 1.425ms (SLO: <1.550ms -8.0%) vs baseline: +0.5%

Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.9%


✅ 100-rate-metrics-100-times

Time: ✅ 2.192ms (SLO: <2.550ms 📉 -14.0%) vs baseline: +0.1%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.1%


✅ flush-1-metric

Time: ✅ 4.509µs (SLO: <20.000µs 📉 -77.5%) vs baseline: -1.0%

Memory: ✅ 35.271MB (SLO: <35.500MB 🟡 -0.6%) vs baseline: +5.9%


✅ flush-100-metrics

Time: ✅ 173.028µs (SLO: <250.000µs 📉 -30.8%) vs baseline: -0.4%

Memory: ✅ 35.330MB (SLO: <35.500MB 🟡 -0.5%) vs baseline: +5.2%


✅ flush-1000-metrics

Time: ✅ 2.178ms (SLO: <2.500ms 📉 -12.9%) vs baseline: -0.7%

Memory: ✅ 36.137MB (SLO: <36.500MB 🟡 -1.0%) vs baseline: +5.4%

🟡 Near SLO Breach (16 suites)
🟡 coreapiscenario - 10/10 (1 unstable)

⚠️ context_with_data_listeners

Time: ⚠️ 13.212µs (SLO: <20.000µs 📉 -33.9%) vs baseline: -0.3%

Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +5.2%


✅ context_with_data_no_listeners

Time: ✅ 3.278µs (SLO: <10.000µs 📉 -67.2%) vs baseline: -0.3%

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ get_item_exists

Time: ✅ 0.580µs (SLO: <10.000µs 📉 -94.2%) vs baseline: +0.5%

Memory: ✅ 34.937MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +5.2%


✅ get_item_missing

Time: ✅ 0.639µs (SLO: <10.000µs 📉 -93.6%) vs baseline: +0.5%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.2%


✅ set_item

Time: ✅ 24.425µs (SLO: <30.000µs 📉 -18.6%) vs baseline: +2.1%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.2%


🟡 djangosimple - 30/30

✅ appsec

Time: ✅ 19.571ms (SLO: <22.300ms 📉 -12.2%) vs baseline: ~same

Memory: ✅ 68.164MB (SLO: <70.500MB -3.3%) vs baseline: +4.5%


✅ exception-replay-enabled

Time: ✅ 1.362ms (SLO: <1.450ms -6.1%) vs baseline: ~same

Memory: ✅ 66.371MB (SLO: <67.500MB 🟡 -1.7%) vs baseline: +4.9%


✅ iast

Time: ✅ 19.570ms (SLO: <22.250ms 📉 -12.0%) vs baseline: ~same

Memory: ✅ 68.223MB (SLO: <70.000MB -2.5%) vs baseline: +4.6%


✅ profiler

Time: ✅ 15.316ms (SLO: <16.550ms -7.5%) vs baseline: ~same

Memory: ✅ 56.455MB (SLO: <57.500MB 🟡 -1.8%) vs baseline: +4.7%


✅ resource-renaming

Time: ✅ 19.484ms (SLO: <21.750ms 📉 -10.4%) vs baseline: +0.3%

Memory: ✅ 68.223MB (SLO: <70.500MB -3.2%) vs baseline: +4.6%


✅ span-code-origin

Time: ✅ 19.907ms (SLO: <28.200ms 📉 -29.4%) vs baseline: +0.7%

Memory: ✅ 68.142MB (SLO: <71.000MB -4.0%) vs baseline: +4.8%


✅ tracer

Time: ✅ 19.545ms (SLO: <21.750ms 📉 -10.1%) vs baseline: +0.1%

Memory: ✅ 68.262MB (SLO: <70.000MB -2.5%) vs baseline: +4.6%


✅ tracer-and-profiler

Time: ✅ 21.592ms (SLO: <23.500ms -8.1%) vs baseline: -0.3%

Memory: ✅ 69.973MB (SLO: <71.000MB 🟡 -1.4%) vs baseline: +5.0%


✅ tracer-dont-create-db-spans

Time: ✅ 19.672ms (SLO: <21.500ms -8.5%) vs baseline: +0.2%

Memory: ✅ 68.223MB (SLO: <70.000MB -2.5%) vs baseline: +4.6%


✅ tracer-minimal

Time: ✅ 16.827ms (SLO: <17.500ms -3.8%) vs baseline: +0.3%

Memory: ✅ 68.184MB (SLO: <70.000MB -2.6%) vs baseline: +4.6%


✅ tracer-native

Time: ✅ 19.454ms (SLO: <21.750ms 📉 -10.6%) vs baseline: -0.1%

Memory: ✅ 68.223MB (SLO: <72.500MB -5.9%) vs baseline: +4.6%


✅ tracer-no-caches

Time: ✅ 17.983ms (SLO: <19.650ms -8.5%) vs baseline: +0.5%

Memory: ✅ 68.184MB (SLO: <70.000MB -2.6%) vs baseline: +4.6%


✅ tracer-no-databases

Time: ✅ 19.463ms (SLO: <20.100ms -3.2%) vs baseline: -0.4%

Memory: ✅ 67.967MB (SLO: <70.000MB -2.9%) vs baseline: +4.4%


✅ tracer-no-middleware

Time: ✅ 19.279ms (SLO: <21.500ms 📉 -10.3%) vs baseline: ~same

Memory: ✅ 68.203MB (SLO: <70.000MB -2.6%) vs baseline: +4.6%


✅ tracer-no-templates

Time: ✅ 19.580ms (SLO: <22.000ms 📉 -11.0%) vs baseline: +1.5%

Memory: ✅ 68.161MB (SLO: <70.500MB -3.3%) vs baseline: +4.5%


🟡 errortrackingdjangosimple - 6/6

✅ errortracking-enabled-all

Time: ✅ 16.356ms (SLO: <19.850ms 📉 -17.6%) vs baseline: -0.4%

Memory: ✅ 69.798MB (SLO: <70.000MB 🟡 -0.3%) vs baseline: +4.8%


✅ errortracking-enabled-user

Time: ✅ 16.347ms (SLO: <19.400ms 📉 -15.7%) vs baseline: ~same

Memory: ✅ 69.789MB (SLO: <70.000MB 🟡 -0.3%) vs baseline: +4.8%


✅ tracer-enabled

Time: ✅ 16.323ms (SLO: <19.450ms 📉 -16.1%) vs baseline: +0.4%

Memory: ✅ 69.792MB (SLO: <70.000MB 🟡 -0.3%) vs baseline: +4.7%


🟡 errortrackingflasksqli - 6/6

✅ errortracking-enabled-all

Time: ✅ 2.066ms (SLO: <2.300ms 📉 -10.2%) vs baseline: ~same

Memory: ✅ 55.778MB (SLO: <56.500MB 🟡 -1.3%) vs baseline: +4.6%


✅ errortracking-enabled-user

Time: ✅ 2.078ms (SLO: <2.250ms -7.6%) vs baseline: +0.4%

Memory: ✅ 55.758MB (SLO: <56.500MB 🟡 -1.3%) vs baseline: +4.6%


✅ tracer-enabled

Time: ✅ 2.064ms (SLO: <2.300ms 📉 -10.2%) vs baseline: ~same

Memory: ✅ 55.778MB (SLO: <56.500MB 🟡 -1.3%) vs baseline: +4.5%


🟡 flasksimple - 18/18

✅ appsec-get

Time: ✅ 3.372ms (SLO: <4.750ms 📉 -29.0%) vs baseline: ~same

Memory: ✅ 55.758MB (SLO: <66.500MB 📉 -16.2%) vs baseline: +4.6%


✅ appsec-post

Time: ✅ 2.859ms (SLO: <6.750ms 📉 -57.6%) vs baseline: +0.2%

Memory: ✅ 55.743MB (SLO: <66.500MB 📉 -16.2%) vs baseline: +4.6%


✅ appsec-telemetry

Time: ✅ 3.397ms (SLO: <4.750ms 📉 -28.5%) vs baseline: +0.7%

Memory: ✅ 55.708MB (SLO: <66.500MB 📉 -16.2%) vs baseline: +4.6%


✅ debugger

Time: ✅ 1.867ms (SLO: <2.000ms -6.6%) vs baseline: ~same

Memory: ✅ 47.832MB (SLO: <49.500MB -3.4%) vs baseline: +5.0%


✅ iast-get

Time: ✅ 1.868ms (SLO: <2.000ms -6.6%) vs baseline: +0.3%

Memory: ✅ 44.814MB (SLO: <49.000MB -8.5%) vs baseline: +4.9%


✅ profiler

Time: ✅ 1.900ms (SLO: <2.100ms -9.5%) vs baseline: -0.2%

Memory: ✅ 48.722MB (SLO: <50.000MB -2.6%) vs baseline: +4.9%


✅ resource-renaming

Time: ✅ 3.364ms (SLO: <3.650ms -7.8%) vs baseline: +0.3%

Memory: ✅ 55.703MB (SLO: <56.000MB 🟡 -0.5%) vs baseline: +4.6%


✅ tracer

Time: ✅ 3.370ms (SLO: <3.650ms -7.7%) vs baseline: ~same

Memory: ✅ 55.759MB (SLO: <56.500MB 🟡 -1.3%) vs baseline: +4.5%


✅ tracer-native

Time: ✅ 3.371ms (SLO: <3.650ms -7.7%) vs baseline: +0.2%

Memory: ✅ 55.745MB (SLO: <60.000MB -7.1%) vs baseline: +4.6%


🟡 flasksqli - 6/6

✅ appsec-enabled

Time: ✅ 2.065ms (SLO: <4.200ms 📉 -50.8%) vs baseline: +0.1%

Memory: ✅ 55.758MB (SLO: <66.000MB 📉 -15.5%) vs baseline: +4.6%


✅ iast-enabled

Time: ✅ 2.069ms (SLO: <2.800ms 📉 -26.1%) vs baseline: -0.2%

Memory: ✅ 55.837MB (SLO: <62.500MB 📉 -10.7%) vs baseline: +4.9%


✅ tracer-enabled

Time: ✅ 2.059ms (SLO: <2.250ms -8.5%) vs baseline: -0.5%

Memory: ✅ 55.778MB (SLO: <56.500MB 🟡 -1.3%) vs baseline: +4.5%


🟡 httppropagationextract - 60/60

✅ all_styles_all_headers

Time: ✅ 81.234µs (SLO: <100.000µs 📉 -18.8%) vs baseline: -0.5%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ b3_headers

Time: ✅ 14.332µs (SLO: <20.000µs 📉 -28.3%) vs baseline: -0.2%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.8%


✅ b3_single_headers

Time: ✅ 13.370µs (SLO: <20.000µs 📉 -33.1%) vs baseline: -0.5%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.2%


✅ datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match

Time: ✅ 63.863µs (SLO: <80.000µs 📉 -20.2%) vs baseline: -0.1%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.9%


✅ datadog_tracecontext_tracestate_propagated_on_trace_id_match

Time: ✅ 66.128µs (SLO: <80.000µs 📉 -17.3%) vs baseline: -0.3%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.1%


✅ empty_headers

Time: ✅ 1.629µs (SLO: <10.000µs 📉 -83.7%) vs baseline: +1.8%

Memory: ✅ 35.114MB (SLO: <35.500MB 🟡 -1.1%) vs baseline: +5.3%


✅ full_t_id_datadog_headers

Time: ✅ 22.769µs (SLO: <30.000µs 📉 -24.1%) vs baseline: +0.1%

Memory: ✅ 35.095MB (SLO: <35.500MB 🟡 -1.1%) vs baseline: +5.4%


✅ invalid_priority_header

Time: ✅ 6.499µs (SLO: <10.000µs 📉 -35.0%) vs baseline: +0.4%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.0%


✅ invalid_span_id_header

Time: ✅ 6.475µs (SLO: <10.000µs 📉 -35.2%) vs baseline: -0.7%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ invalid_tags_header

Time: ✅ 6.533µs (SLO: <10.000µs 📉 -34.7%) vs baseline: +1.1%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.0%


✅ invalid_trace_id_header

Time: ✅ 6.562µs (SLO: <10.000µs 📉 -34.4%) vs baseline: +0.9%

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ large_header_no_matches

Time: ✅ 27.518µs (SLO: <30.000µs -8.3%) vs baseline: +0.3%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.0%


✅ large_valid_headers_all

Time: ✅ 28.695µs (SLO: <40.000µs 📉 -28.3%) vs baseline: +0.2%

Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +4.9%


✅ medium_header_no_matches

Time: ✅ 9.758µs (SLO: <20.000µs 📉 -51.2%) vs baseline: -0.7%

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.0%


✅ medium_valid_headers_all

Time: ✅ 11.199µs (SLO: <20.000µs 📉 -44.0%) vs baseline: -1.0%

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.0%


✅ none_propagation_style

Time: ✅ 1.715µs (SLO: <10.000µs 📉 -82.9%) vs baseline: +0.5%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.0%


✅ tracecontext_headers

Time: ✅ 34.707µs (SLO: <40.000µs 📉 -13.2%) vs baseline: -0.5%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.3%


✅ valid_headers_all

Time: ✅ 6.467µs (SLO: <10.000µs 📉 -35.3%) vs baseline: -0.1%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.9%


✅ valid_headers_basic

Time: ✅ 6.061µs (SLO: <10.000µs 📉 -39.4%) vs baseline: +0.5%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.6%


✅ wsgi_empty_headers

Time: ✅ 1.595µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.2%

Memory: ✅ 35.095MB (SLO: <35.500MB 🟡 -1.1%) vs baseline: +5.1%


✅ wsgi_invalid_priority_header

Time: ✅ 6.538µs (SLO: <10.000µs 📉 -34.6%) vs baseline: ~same

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ wsgi_invalid_span_id_header

Time: ✅ 1.593µs (SLO: <10.000µs 📉 -84.1%) vs baseline: -0.4%

Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.6%


✅ wsgi_invalid_tags_header

Time: ✅ 6.557µs (SLO: <10.000µs 📉 -34.4%) vs baseline: +0.9%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.8%


✅ wsgi_invalid_trace_id_header

Time: ✅ 6.672µs (SLO: <10.000µs 📉 -33.3%) vs baseline: +2.2%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.9%


✅ wsgi_large_header_no_matches

Time: ✅ 28.723µs (SLO: <40.000µs 📉 -28.2%) vs baseline: -0.1%

Memory: ✅ 35.134MB (SLO: <35.500MB 🟡 -1.0%) vs baseline: +5.0%


✅ wsgi_large_valid_headers_all

Time: ✅ 29.896µs (SLO: <40.000µs 📉 -25.3%) vs baseline: +0.2%

Memory: ✅ 35.055MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.1%


✅ wsgi_medium_header_no_matches

Time: ✅ 10.061µs (SLO: <20.000µs 📉 -49.7%) vs baseline: -0.6%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.8%


✅ wsgi_medium_valid_headers_all

Time: ✅ 11.532µs (SLO: <20.000µs 📉 -42.3%) vs baseline: +0.2%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.3%


✅ wsgi_valid_headers_all

Time: ✅ 6.533µs (SLO: <10.000µs 📉 -34.7%) vs baseline: ~same

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.0%


✅ wsgi_valid_headers_basic

Time: ✅ 6.097µs (SLO: <10.000µs 📉 -39.0%) vs baseline: -0.2%

Memory: ✅ 35.114MB (SLO: <35.500MB 🟡 -1.1%) vs baseline: +5.3%


🟡 httppropagationinject - 16/16

✅ ids_only

Time: ✅ 21.803µs (SLO: <30.000µs 📉 -27.3%) vs baseline: +4.4%

Memory: ✅ 34.977MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.0%


✅ with_all

Time: ✅ 27.552µs (SLO: <40.000µs 📉 -31.1%) vs baseline: -1.2%

Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +5.2%


✅ with_dd_origin

Time: ✅ 24.419µs (SLO: <30.000µs 📉 -18.6%) vs baseline: -1.1%

Memory: ✅ 35.036MB (SLO: <35.500MB 🟡 -1.3%) vs baseline: +5.2%


✅ with_priority_and_origin

Time: ✅ 23.814µs (SLO: <40.000µs 📉 -40.5%) vs baseline: -1.2%

Memory: ✅ 35.075MB (SLO: <35.500MB 🟡 -1.2%) vs baseline: +5.4%


✅ with_sampling_priority

Time: ✅ 20.811µs (SLO: <30.000µs 📉 -30.6%) vs baseline: -0.2%

Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +4.9%


✅ with_tags

Time: ✅ 25.770µs (SLO: <40.000µs 📉 -35.6%) vs baseline: -0.4%

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.2%


✅ with_tags_invalid

Time: ✅ 27.295µs (SLO: <40.000µs 📉 -31.8%) vs baseline: -0.9%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.9%


✅ with_tags_max_size

Time: ✅ 26.318µs (SLO: <40.000µs 📉 -34.2%) vs baseline: ~same

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.2%


🟡 iastaspectssplit - 12/12

✅ rsplit_aspect

Time: ✅ 1.620µs (SLO: <10.000µs 📉 -83.8%) vs baseline: +5.1%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.1%


✅ rsplit_noaspect

Time: ✅ 1.612µs (SLO: <10.000µs 📉 -83.9%) vs baseline: -0.2%

Memory: ✅ 42.664MB (SLO: <43.500MB 🟡 -1.9%) vs baseline: +5.1%


✅ split_aspect

Time: ✅ 1.550µs (SLO: <10.000µs 📉 -84.5%) vs baseline: -0.2%

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.1%


✅ split_noaspect

Time: ✅ 1.653µs (SLO: <10.000µs 📉 -83.5%) vs baseline: +2.5%

Memory: ✅ 42.605MB (SLO: <43.500MB -2.1%) vs baseline: +5.0%


✅ splitlines_aspect

Time: ✅ 1.522µs (SLO: <10.000µs 📉 -84.8%) vs baseline: +1.6%

Memory: ✅ 42.585MB (SLO: <43.500MB -2.1%) vs baseline: +4.8%


✅ splitlines_noaspect

Time: ✅ 1.558µs (SLO: <10.000µs 📉 -84.4%) vs baseline: ~same

Memory: ✅ 42.644MB (SLO: <43.500MB 🟡 -2.0%) vs baseline: +5.2%


🟡 otelspan - 22/22

✅ add-event

Time: ✅ 40.463ms (SLO: <47.150ms 📉 -14.2%) vs baseline: +0.7%

Memory: ✅ 39.615MB (SLO: <47.000MB 📉 -15.7%) vs baseline: +5.0%


✅ add-metrics

Time: ✅ 259.093ms (SLO: <344.800ms 📉 -24.9%) vs baseline: -0.1%

Memory: ✅ 43.841MB (SLO: <47.500MB -7.7%) vs baseline: +5.3%


✅ add-tags

Time: ✅ 315.162ms (SLO: <321.000ms 🟡 -1.8%) vs baseline: -0.8%

Memory: ✅ 43.842MB (SLO: <47.500MB -7.7%) vs baseline: +5.3%


✅ get-context

Time: ✅ 80.820ms (SLO: <92.350ms 📉 -12.5%) vs baseline: +0.6%

Memory: ✅ 39.915MB (SLO: <46.500MB 📉 -14.2%) vs baseline: +5.0%


✅ is-recording

Time: ✅ 37.904ms (SLO: <44.500ms 📉 -14.8%) vs baseline: +0.2%

Memory: ✅ 39.695MB (SLO: <47.500MB 📉 -16.4%) vs baseline: +5.7%


✅ record-exception

Time: ✅ 58.697ms (SLO: <67.650ms 📉 -13.2%) vs baseline: -0.4%

Memory: ✅ 40.073MB (SLO: <47.000MB 📉 -14.7%) vs baseline: +5.4%


✅ set-status

Time: ✅ 44.227ms (SLO: <50.400ms 📉 -12.2%) vs baseline: ~same

Memory: ✅ 39.460MB (SLO: <47.000MB 📉 -16.0%) vs baseline: +5.1%


✅ start

Time: ✅ 38.144ms (SLO: <43.450ms 📉 -12.2%) vs baseline: +2.7%

Memory: ✅ 39.603MB (SLO: <47.000MB 📉 -15.7%) vs baseline: +5.4%


✅ start-finish

Time: ✅ 82.797ms (SLO: <88.000ms -5.9%) vs baseline: -0.4%

Memory: ✅ 37.375MB (SLO: <46.500MB 📉 -19.6%) vs baseline: +4.9%


✅ start-finish-telemetry

Time: ✅ 84.405ms (SLO: <89.000ms -5.2%) vs baseline: +0.1%

Memory: ✅ 37.434MB (SLO: <46.500MB 📉 -19.5%) vs baseline: +5.0%


✅ update-name

Time: ✅ 38.990ms (SLO: <45.150ms 📉 -13.6%) vs baseline: +0.2%

Memory: ✅ 39.563MB (SLO: <47.000MB 📉 -15.8%) vs baseline: +4.6%


🟡 ratelimiter - 12/12

✅ defaults

Time: ✅ 2.361µs (SLO: <10.000µs 📉 -76.4%) vs baseline: +1.8%

Memory: ✅ 35.212MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +5.0%


✅ high_rate_limit

Time: ✅ 2.402µs (SLO: <10.000µs 📉 -76.0%) vs baseline: ~same

Memory: ✅ 35.232MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +5.2%


✅ long_window

Time: ✅ 2.363µs (SLO: <10.000µs 📉 -76.4%) vs baseline: +0.4%

Memory: ✅ 35.311MB (SLO: <35.500MB 🟡 -0.5%) vs baseline: +5.5%


✅ low_rate_limit

Time: ✅ 2.359µs (SLO: <10.000µs 📉 -76.4%) vs baseline: -0.3%

Memory: ✅ 35.212MB (SLO: <35.500MB 🟡 -0.8%) vs baseline: +5.0%


✅ no_rate_limit

Time: ✅ 0.829µs (SLO: <10.000µs 📉 -91.7%) vs baseline: +1.2%

Memory: ✅ 35.291MB (SLO: <35.500MB 🟡 -0.6%) vs baseline: +5.7%


✅ short_window

Time: ✅ 2.493µs (SLO: <10.000µs 📉 -75.1%) vs baseline: +0.9%

Memory: ✅ 35.193MB (SLO: <35.500MB 🟡 -0.9%) vs baseline: +5.0%


🟡 recursivecomputation - 8/8

✅ deep

Time: ✅ 308.958ms (SLO: <320.950ms -3.7%) vs baseline: ~same

Memory: ✅ 35.979MB (SLO: <36.500MB 🟡 -1.4%) vs baseline: +4.5%


✅ deep-profiled

Time: ✅ 325.604ms (SLO: <359.150ms -9.3%) vs baseline: +0.3%

Memory: ✅ 39.852MB (SLO: <40.500MB 🟡 -1.6%) vs baseline: +4.9%


✅ medium

Time: ✅ 6.998ms (SLO: <7.400ms -5.4%) vs baseline: ~same

Memory: ✅ 35.016MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +5.6%


✅ shallow

Time: ✅ 0.947ms (SLO: <1.050ms -9.9%) vs baseline: +1.0%

Memory: ✅ 34.918MB (SLO: <35.500MB 🟡 -1.6%) vs baseline: +4.9%


🟡 samplingrules - 8/8

✅ average_match

Time: ✅ 136.662µs (SLO: <290.000µs 📉 -52.9%) vs baseline: -0.3%

Memory: ✅ 34.957MB (SLO: <35.500MB 🟡 -1.5%) vs baseline: +5.1%


✅ high_match

Time: ✅ 173.548µs (SLO: <480.000µs 📉 -63.8%) vs baseline: +0.2%

Memory: ✅ 34.996MB (SLO: <35.500MB 🟡 -1.4%) vs baseline: +4.9%


✅ low_match

Time: ✅ 98.294µs (SLO: <120.000µs 📉 -18.1%) vs baseline: -1.1%

Memory: ✅ 603.789MB (SLO: <700.000MB 📉 -13.7%) vs baseline: +4.9%


✅ very_low_match

Time: ✅ 2.660ms (SLO: <8.500ms 📉 -68.7%) vs baseline: -0.9%

Memory: ✅ 71.222MB (SLO: <75.000MB -5.0%) vs baseline: +5.1%


🟡 sethttpmeta - 32/32

✅ all-disabled

Time: ✅ 10.527µs (SLO: <20.000µs 📉 -47.4%) vs baseline: +0.4%

Memory: ✅ 35.861MB (SLO: <36.000MB 🟡 -0.4%) vs baseline: +5.1%


✅ all-enabled

Time: ✅ 40.922µs (SLO: <50.000µs 📉 -18.2%) vs baseline: +1.9%

Memory: ✅ 35.763MB (SLO: <36.000MB 🟡 -0.7%) vs baseline: +5.2%


✅ collectipvariant_exists

Time: ✅ 40.723µs (SLO: <50.000µs 📉 -18.6%) vs baseline: +0.1%

Memory: ✅ 35.763MB (SLO: <36.000MB 🟡 -0.7%) vs baseline: +5.3%


✅ no-collectipvariant

Time: ✅ 39.953µs (SLO: <50.000µs 📉 -20.1%) vs baseline: ~same

Memory: ✅ 35.743MB (SLO: <36.000MB 🟡 -0.7%) vs baseline: +5.1%


✅ no-useragentvariant

Time: ✅ 38.757µs (SLO: <50.000µs 📉 -22.5%) vs baseline: +0.2%

Memory: ✅ 35.881MB (SLO: <36.000MB 🟡 -0.3%) vs baseline: +5.4%


✅ obfuscation-no-query

Time: ✅ 40.502µs (SLO: <50.000µs 📉 -19.0%) vs baseline: ~same

Memory: ✅ 35.822MB (SLO: <36.000MB 🟡 -0.5%) vs baseline: +5.1%


✅ obfuscation-regular-case-explicit-query

Time: ✅ 75.765µs (SLO: <90.000µs 📉 -15.8%) vs baseline: ~same

Memory: ✅ 35.822MB (SLO: <36.500MB 🟡 -1.9%) vs baseline: +5.3%


✅ obfuscation-regular-case-implicit-query

Time: ✅ 76.457µs (SLO: <90.000µs 📉 -15.0%) vs baseline: +0.1%

Memory: ✅ 35.763MB (SLO: <36.500MB -2.0%) vs baseline: +5.0%


✅ obfuscation-send-querystring-disabled

Time: ✅ 154.707µs (SLO: <170.000µs -9.0%) vs baseline: ~same

Memory: ✅ 35.783MB (SLO: <36.500MB 🟡 -2.0%) vs baseline: +4.9%


✅ obfuscation-worst-case-explicit-query

Time: ✅ 148.692µs (SLO: <160.000µs -7.1%) vs baseline: ~same

Memory: ✅ 35.920MB (SLO: <36.500MB 🟡 -1.6%) vs baseline: +5.7%


✅ obfuscation-worst-case-implicit-query

Time: ✅ 155.365µs (SLO: <170.000µs -8.6%) vs baseline: +0.2%

Memory: ✅ 35.822MB (SLO: <36.500MB 🟡 -1.9%) vs baseline: +5.2%


✅ useragentvariant_exists_1

Time: ✅ 39.620µs (SLO: <50.000µs 📉 -20.8%) vs baseline: +0.6%

Memory: ✅ 35.802MB (SLO: <36.000MB 🟡 -0.5%) vs baseline: +5.0%


✅ useragentvariant_exists_2

Time: ✅ 40.549µs (SLO: <50.000µs 📉 -18.9%) vs baseline: -0.8%

Memory: ✅ 35.842MB (SLO: <36.000MB 🟡 -0.4%) vs baseline: +5.1%


✅ useragentvariant_exists_3

Time: ✅ 40.027µs (SLO: <50.000µs 📉 -19.9%) vs baseline: -0.3%

Memory: ✅ 35.842MB (SLO: <36.000MB 🟡 -0.4%) vs baseline: +5.2%


✅ useragentvariant_not_exists_1

Time: ✅ 39.357µs (SLO: <50.000µs 📉 -21.3%) vs baseline: -0.5%

Memory: ✅ 35.763MB (SLO: <36.000MB 🟡 -0.7%) vs baseline: +5.0%


✅ useragentvariant_not_exists_2

Time: ✅ 39.492µs (SLO: <50.000µs 📉 -21.0%) vs baseline: -0.3%

Memory: ✅ 35.724MB (SLO: <36.000MB 🟡 -0.8%) vs baseline: +5.0%


🟡 span - 26/26

✅ add-event

Time: ✅ 18.155ms (SLO: <22.500ms 📉 -19.3%) vs baseline: ~same

Memory: ✅ 36.886MB (SLO: <53.000MB 📉 -30.4%) vs baseline: +4.6%


✅ add-metrics

Time: ✅ 88.497ms (SLO: <93.500ms -5.4%) vs baseline: +0.5%

Memory: ✅ 41.150MB (SLO: <53.000MB 📉 -22.4%) vs baseline: +4.9%


✅ add-tags

Time: ✅ 141.569ms (SLO: <155.000ms -8.7%) vs baseline: ~same

Memory: ✅ 41.152MB (SLO: <53.000MB 📉 -22.4%) vs baseline: +4.8%


✅ get-context

Time: ✅ 16.907ms (SLO: <20.500ms 📉 -17.5%) vs baseline: -1.0%

Memory: ✅ 36.849MB (SLO: <53.000MB 📉 -30.5%) vs baseline: +5.0%


✅ is-recording

Time: ✅ 17.270ms (SLO: <20.500ms 📉 -15.8%) vs baseline: -0.4%

Memory: ✅ 36.874MB (SLO: <53.000MB 📉 -30.4%) vs baseline: +5.2%


✅ record-exception

Time: ✅ 36.545ms (SLO: <40.000ms -8.6%) vs baseline: -0.2%

Memory: ✅ 37.426MB (SLO: <53.000MB 📉 -29.4%) vs baseline: +5.3%


✅ set-status

Time: ✅ 18.630ms (SLO: <22.000ms 📉 -15.3%) vs baseline: -0.2%

Memory: ✅ 36.934MB (SLO: <53.000MB 📉 -30.3%) vs baseline: +5.3%


✅ start

Time: ✅ 17.345ms (SLO: <20.500ms 📉 -15.4%) vs baseline: +3.0%

Memory: ✅ 36.861MB (SLO: <53.000MB 📉 -30.5%) vs baseline: +5.3%


✅ start-finish

Time: ✅ 51.130ms (SLO: <52.500ms -2.6%) vs baseline: ~same

Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +5.1%


✅ start-finish-telemetry

Time: ✅ 52.182ms (SLO: <54.500ms -4.3%) vs baseline: -0.2%

Memory: ✅ 34.898MB (SLO: <35.500MB 🟡 -1.7%) vs baseline: +5.0%


✅ start-finish-traceid128

Time: ✅ 53.786ms (SLO: <57.000ms -5.6%) vs baseline: -0.8%

Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +5.0%


✅ start-traceid128

Time: ✅ 17.287ms (SLO: <22.500ms 📉 -23.2%) vs baseline: ~same

Memory: ✅ 36.858MB (SLO: <53.000MB 📉 -30.5%) vs baseline: +5.1%


✅ update-name

Time: ✅ 17.204ms (SLO: <22.000ms 📉 -21.8%) vs baseline: -0.9%

Memory: ✅ 36.982MB (SLO: <53.000MB 📉 -30.2%) vs baseline: +5.1%


🟡 tracer - 6/6

✅ large

Time: ✅ 29.228ms (SLO: <32.950ms 📉 -11.3%) vs baseline: +0.3%

Memory: ✅ 36.078MB (SLO: <36.500MB 🟡 -1.2%) vs baseline: +4.7%


✅ medium

Time: ✅ 2.864ms (SLO: <3.200ms 📉 -10.5%) vs baseline: ~same

Memory: ✅ 34.878MB (SLO: <35.500MB 🟡 -1.8%) vs baseline: +5.5%


✅ small

Time: ✅ 330.766µs (SLO: <370.000µs 📉 -10.6%) vs baseline: +1.5%

Memory: ✅ 34.839MB (SLO: <35.500MB 🟡 -1.9%) vs baseline: +5.2%

⚠️ Unstable Tests (1 suite)
⚠️ packagesupdateimporteddependencies - 24/24 (1 unstable)

✅ import_many

Time: ✅ 154.870µs (SLO: <170.000µs -8.9%) vs baseline: ~same

Memory: ✅ 39.435MB (SLO: <43.000MB -8.3%) vs baseline: +5.0%


✅ import_many_cached

Time: ✅ 120.576µs (SLO: <130.000µs -7.2%) vs baseline: ~same

Memory: ✅ 39.534MB (SLO: <43.000MB -8.1%) vs baseline: +4.5%


✅ import_many_stdlib

Time: ✅ 0.755ms (SLO: <1.750ms 📉 -56.9%) vs baseline: -0.6%

Memory: ✅ 39.702MB (SLO: <43.000MB -7.7%) vs baseline: +5.6%


⚠️ import_many_stdlib_cached

Time: ⚠️ 0.172ms (SLO: <1.100ms 📉 -84.4%) vs baseline: -1.5%

Memory: ✅ 39.537MB (SLO: <43.000MB -8.1%) vs baseline: +4.6%


✅ import_many_unknown

Time: ✅ 831.480µs (SLO: <890.000µs -6.6%) vs baseline: -0.6%

Memory: ✅ 39.637MB (SLO: <43.000MB -7.8%) vs baseline: +4.9%


✅ import_many_unknown_cached

Time: ✅ 790.658µs (SLO: <870.000µs -9.1%) vs baseline: -0.2%

Memory: ✅ 39.666MB (SLO: <43.000MB -7.8%) vs baseline: +4.6%


✅ import_one

Time: ✅ 19.850µs (SLO: <30.000µs 📉 -33.8%) vs baseline: -0.5%

Memory: ✅ 39.555MB (SLO: <43.000MB -8.0%) vs baseline: +5.2%


✅ import_one_cache

Time: ✅ 6.281µs (SLO: <10.000µs 📉 -37.2%) vs baseline: ~same

Memory: ✅ 39.528MB (SLO: <43.000MB -8.1%) vs baseline: +5.0%


✅ import_one_stdlib

Time: ✅ 18.712µs (SLO: <20.000µs -6.4%) vs baseline: -0.5%

Memory: ✅ 39.490MB (SLO: <43.000MB -8.2%) vs baseline: +4.7%


✅ import_one_stdlib_cache

Time: ✅ 6.255µs (SLO: <10.000µs 📉 -37.5%) vs baseline: -0.7%

Memory: ✅ 39.300MB (SLO: <43.000MB -8.6%) vs baseline: +4.3%


✅ import_one_unknown

Time: ✅ 45.592µs (SLO: <50.000µs -8.8%) vs baseline: +0.7%

Memory: ✅ 39.436MB (SLO: <43.000MB -8.3%) vs baseline: +4.8%


✅ import_one_unknown_cache

Time: ✅ 6.314µs (SLO: <10.000µs 📉 -36.9%) vs baseline: +0.2%

Memory: ✅ 39.293MB (SLO: <43.000MB -8.6%) vs baseline: +4.3%

✅ All Tests Passing (4 suites)
iast_aspects - 40/40

✅ re_expand_aspect

Time: ✅ 37.113µs (SLO: <40.000µs -7.2%) vs baseline: +5.7%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +5.1%


✅ re_expand_noaspect

Time: ✅ 34.875µs (SLO: <40.000µs 📉 -12.8%) vs baseline: -0.4%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +5.1%


✅ re_findall_aspect

Time: ✅ 3.420µs (SLO: <10.000µs 📉 -65.8%) vs baseline: +0.2%

Memory: ✅ 42.251MB (SLO: <43.500MB -2.9%) vs baseline: +4.9%


✅ re_findall_noaspect

Time: ✅ 3.240µs (SLO: <10.000µs 📉 -67.6%) vs baseline: -0.2%

Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +4.9%


✅ re_finditer_aspect

Time: ✅ 4.515µs (SLO: <10.000µs 📉 -54.8%) vs baseline: -0.9%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +4.9%


✅ re_finditer_noaspect

Time: ✅ 3.291µs (SLO: <10.000µs 📉 -67.1%) vs baseline: ~same

Memory: ✅ 42.271MB (SLO: <43.500MB -2.8%) vs baseline: +4.8%


✅ re_fullmatch_aspect

Time: ✅ 2.758µs (SLO: <10.000µs 📉 -72.4%) vs baseline: -1.1%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +5.0%


✅ re_fullmatch_noaspect

Time: ✅ 3.100µs (SLO: <10.000µs 📉 -69.0%) vs baseline: -0.4%

Memory: ✅ 42.467MB (SLO: <43.500MB -2.4%) vs baseline: +5.2%


✅ re_group_aspect

Time: ✅ 4.765µs (SLO: <10.000µs 📉 -52.4%) vs baseline: -1.2%

Memory: ✅ 42.330MB (SLO: <43.500MB -2.7%) vs baseline: +5.2%


✅ re_group_noaspect

Time: ✅ 4.871µs (SLO: <10.000µs 📉 -51.3%) vs baseline: -0.4%

Memory: ✅ 42.192MB (SLO: <43.500MB -3.0%) vs baseline: +4.6%


✅ re_groups_aspect

Time: ✅ 4.914µs (SLO: <10.000µs 📉 -50.9%) vs baseline: -0.9%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +5.2%


✅ re_groups_noaspect

Time: ✅ 4.947µs (SLO: <10.000µs 📉 -50.5%) vs baseline: -0.7%

Memory: ✅ 42.389MB (SLO: <43.500MB -2.6%) vs baseline: +5.1%


✅ re_match_aspect

Time: ✅ 2.800µs (SLO: <10.000µs 📉 -72.0%) vs baseline: -0.4%

Memory: ✅ 42.330MB (SLO: <43.500MB -2.7%) vs baseline: +5.2%


✅ re_match_noaspect

Time: ✅ 3.125µs (SLO: <10.000µs 📉 -68.7%) vs baseline: +1.1%

Memory: ✅ 42.349MB (SLO: <43.500MB -2.6%) vs baseline: +5.0%


✅ re_search_aspect

Time: ✅ 2.622µs (SLO: <10.000µs 📉 -73.8%) vs baseline: -0.8%

Memory: ✅ 42.448MB (SLO: <43.500MB -2.4%) vs baseline: +5.4%


✅ re_search_noaspect

Time: ✅ 2.904µs (SLO: <10.000µs 📉 -71.0%) vs baseline: -0.4%

Memory: ✅ 42.212MB (SLO: <43.500MB -3.0%) vs baseline: +4.8%


✅ re_sub_aspect

Time: ✅ 3.555µs (SLO: <10.000µs 📉 -64.4%) vs baseline: +0.4%

Memory: ✅ 42.251MB (SLO: <43.500MB -2.9%) vs baseline: +5.2%


✅ re_sub_noaspect

Time: ✅ 4.088µs (SLO: <10.000µs 📉 -59.1%) vs baseline: +2.8%

Memory: ✅ 42.408MB (SLO: <43.500MB -2.5%) vs baseline: +5.6%


✅ re_subn_aspect

Time: ✅ 3.793µs (SLO: <10.000µs 📉 -62.1%) vs baseline: -0.6%

Memory: ✅ 42.310MB (SLO: <43.500MB -2.7%) vs baseline: +5.3%


✅ re_subn_noaspect

Time: ✅ 4.092µs (SLO: <10.000µs 📉 -59.1%) vs baseline: -0.3%

Memory: ✅ 42.251MB (SLO: <43.500MB -2.9%) vs baseline: +4.9%


iastpropagation - 8/8

✅ no-propagation

Time: ✅ 48.949µs (SLO: <60.000µs 📉 -18.4%) vs baseline: +0.3%

Memory: ✅ 38.358MB (SLO: <42.000MB -8.7%) vs baseline: +5.3%


✅ propagation_enabled

Time: ✅ 136.474µs (SLO: <190.000µs 📉 -28.2%) vs baseline: ~same

Memory: ✅ 38.417MB (SLO: <42.000MB -8.5%) vs baseline: +5.0%


✅ propagation_enabled_100

Time: ✅ 1.607ms (SLO: <2.300ms 📉 -30.1%) vs baseline: +2.0%

Memory: ✅ 38.437MB (SLO: <42.000MB -8.5%) vs baseline: +5.1%


✅ propagation_enabled_1000

Time: ✅ 29.075ms (SLO: <34.550ms 📉 -15.8%) vs baseline: -1.3%

Memory: ✅ 38.692MB (SLO: <42.000MB -7.9%) vs baseline: +5.0%


otelsdkspan - 24/24

✅ add-event

Time: ✅ 40.581ms (SLO: <42.000ms -3.4%) vs baseline: +0.3%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +6.1%


✅ add-link

Time: ✅ 36.298ms (SLO: <38.550ms -5.8%) vs baseline: -0.4%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +5.2%


✅ add-metrics

Time: ✅ 219.699ms (SLO: <232.000ms -5.3%) vs baseline: -1.0%

Memory: ✅ 37.749MB (SLO: <39.000MB -3.2%) vs baseline: +5.5%


✅ add-tags

Time: ✅ 210.696ms (SLO: <221.600ms -4.9%) vs baseline: -0.2%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +4.9%


✅ get-context

Time: ✅ 29.239ms (SLO: <31.300ms -6.6%) vs baseline: ~same

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +6.1%


✅ is-recording

Time: ✅ 29.350ms (SLO: <31.000ms -5.3%) vs baseline: +1.0%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.7%


✅ record-exception

Time: ✅ 63.227ms (SLO: <65.850ms -4.0%) vs baseline: +0.3%

Memory: ✅ 37.709MB (SLO: <39.000MB -3.3%) vs baseline: +4.9%


✅ set-status

Time: ✅ 31.998ms (SLO: <34.150ms -6.3%) vs baseline: +0.2%

Memory: ✅ 37.729MB (SLO: <39.000MB -3.3%) vs baseline: +5.4%


✅ start

Time: ✅ 29.335ms (SLO: <30.150ms -2.7%) vs baseline: +2.2%

Memory: ✅ 37.788MB (SLO: <39.000MB -3.1%) vs baseline: +6.0%


✅ start-finish

Time: ✅ 34.128ms (SLO: <35.350ms -3.5%) vs baseline: +0.7%

Memory: ✅ 37.768MB (SLO: <39.000MB -3.2%) vs baseline: +5.8%


✅ start-finish-telemetry

Time: ✅ 33.902ms (SLO: <35.450ms -4.4%) vs baseline: -0.3%

Memory: ✅ 37.788MB (SLO: <39.000MB -3.1%) vs baseline: +6.1%


✅ update-name

Time: ✅ 30.863ms (SLO: <33.400ms -7.6%) vs baseline: -0.5%

Memory: ✅ 37.768MB (SLO: <39.000MB -3.2%) vs baseline: +6.1%


packagespackageforrootmodulemapping - 4/4

✅ cache_off

Time: ✅ 344.189ms (SLO: <354.300ms -2.9%) vs baseline: -0.4%

Memory: ✅ 40.808MB (SLO: <43.500MB -6.2%) vs baseline: +5.4%


✅ cache_on

Time: ✅ 0.385µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +1.2%

Memory: ✅ 38.966MB (SLO: <43.000MB -9.4%) vs baseline: +5.7%

ℹ️ Scenarios Missing SLO Configuration (26 scenarios)

The following scenarios exist in candidate data but have no SLO thresholds configured:

  • coreapiscenario-core_dispatch_listeners
  • coreapiscenario-core_dispatch_no_listeners
  • coreapiscenario-core_dispatch_with_results_listeners
  • coreapiscenario-core_dispatch_with_results_no_listeners
  • djangosimple-baseline
  • errortrackingdjangosimple-baseline
  • errortrackingflasksqli-baseline
  • flasksimple-baseline
  • flasksqli-baseline
  • sethttpmeta-obfuscation-disabled
  • startup-baseline
  • startup-baseline_django
  • startup-baseline_flask
  • startup-ddtrace_run
  • startup-ddtrace_run_appsec
  • startup-ddtrace_run_profiling
  • startup-ddtrace_run_runtime_metrics
  • startup-ddtrace_run_send_span
  • startup-ddtrace_run_telemetry_disabled
  • startup-ddtrace_run_telemetry_enabled
  • startup-import_ddtrace
  • startup-import_ddtrace_auto
  • startup-import_ddtrace_auto_django
  • startup-import_ddtrace_auto_flask
  • startup-import_ddtrace_django
  • startup-import_ddtrace_flask

@quinna-h quinna-h force-pushed the upgrade-latest-structlog-version branch from ebf52bb to 5b60f24 Compare December 30, 2025 17:06
@brettlangdon brettlangdon enabled auto-merge (squash) January 6, 2026 19:01

@emmettbutler emmettbutler left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

thanks octo

@github-actions github-actions Bot added the stale label Feb 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This pull request has been automatically closed after a period of inactivity.
After this much time, it will likely be easier to open a new pull request with the
same changes than to update this one from the base branch. Please comment or reopen
if you think this pull request was closed in error.

@github-actions github-actions Bot closed this Feb 15, 2026
auto-merge was automatically disabled February 15, 2026 00:11

Pull request was closed

gh-worker-dd-mergequeue-cf854d Bot pushed a commit that referenced this pull request Jun 24, 2026
## Description

FastAPI 0.137 ([PR #15745](fastapi/fastapi#15745)) refactored `APIRouter.include_router` to use a lazy `_IncludedRouter` wrapper instead of flattening routes onto the parent router at registration time. This introduced two regressions in the ddtrace starlette/fastapi integration:

1. **Missing path prefix** — `scope["route"].path_format` now returns only the leaf-relative segment (e.g. `""` or `/{item_id}`) instead of the fully-composed template (e.g. `/v1/items`). Spans produced by nested `include_router` calls lose their prefix entirely, collapsing all `GET` requests into a single `GET ` bucket in APM.

2. **Path doubling** — `APIRoute.handle` in 0.137 falls back to `super().handle()` (starlette `Route.handle`) when no `effective_route_context` is present. When both the fastapi and starlette patches are active, `traced_handler` fires twice for the same route instance, doubling the accumulated path (e.g. `GET /file/file`).

**Fix in `ddtrace/contrib/internal/starlette/patch.py` (`traced_handler`):**

- **`effective_route_context` override**: FastAPI 0.137 sets `scope["fastapi"]["effective_route_context"].path_format` to the fully-composed route template before calling `APIRoute.handle`. When this key is present, use it directly as the resource name instead of relying on path accumulation from `instance.path`.

- **Seen-routes guard**: Track route instances processed per request via `scope["datadog"]["_dd_seen_routes"]`. If `traced_handler` is entered for an instance already seen in this request, skip accumulation and pass through — preventing the double-counting introduced by the `super().handle()` fallback.

The lockfile (`162f3ce`) is bumped to `fastapi==0.137.1` / `starlette==1.3.1` so the `latest` venv in CI exercises the affected versions.

## Testing

- Added `test_nested_include_router_resource_names` — a self-contained test using a two-level nested `include_router` that asserts the full composed path appears in both `resource` and `http.route` (directly reproduces the customer issue in GH-18621).
- Ran the full fastapi test suite against 6 venvs covering FastAPI 0.64, 0.86, 0.90 (Python 3.9–3.13) and the fixed 0.137.1 — all passed with no regressions.
- `test_w_patch_starlette` (path doubling regression) and `test_subapp_w_starlette_patch_snapshot` (snapshot) also pass on 0.137.1.

## Risks

- The `_dd_seen_routes` guard uses `id(instance)` to deduplicate route calls within a request. `id()` values can be reused after GC, but route objects are singletons created at app startup and live for the full application lifetime, so collision is not possible in practice.
- The `effective_route_context` key is FastAPI-specific (`scope["fastapi"]`) and is guarded with `.get()` so it is a no-op on pure Starlette and older FastAPI versions.

## Design Decision: Seen-Routes Guard

The conceptually cleaner fix for path doubling would be to skip patching `starlette.routing.Route.handle` entirely when the fastapi patch is active, letting the fastapi patch own `APIRoute.handle` exclusively. This was rejected because starlette apps mounted inside FastAPI go through `Route.handle` without going through `APIRoute.handle` — removing the starlette patch on `Route.handle` would break resource names for those sub-apps. Tracking seen route instances per request is the safer, more targeted approach.

## Additional Notes

- The `_dd_seen_routes` guard is necessary independently of the `effective_route_context` fix: the former addresses double-firing on plain routes when both patches are active; the latter addresses missing prefixes on nested `include_router` routes. Both are required — verified by running each change in isolation.
- Older FastAPI versions (0.64, 0.86, 0.90) do not set `scope["fastapi"]` or call `super().handle()` in `APIRoute.handle`, so neither change affects their behaviour.


Co-authored-by: mohammad.islam <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/no-changelog A changelog entry is not required for this PR. stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants