dd-trace-js
dd-trace-js copied to clipboard
[Code Origin for Spans] Refactor Fastify implementation
What does this PR do?
Use a WeakMap to store the Code Origin Entry Span location instead of polluting the Fastify route options config object.
Also limit when the onRoute handler is added, to only be when the version of Fastify supports getting the proper stack trace (requires v4.10.0+).
Motivation
Unfortunately DEBUG-3941 can't easily be fixed, but while working on that JIRA ticket, I refactored a few areas of the Fastify Code Origin implementation. This PR contains those refactorings. The rest of the work related to DEBUG-3941 has been tabled for now, until we know if enough users running versions of Fastify older than 4.10.0 wants the Code Origin for Spans feature (no need to spend time on that unless it's needed).
Plugin Checklist
- [ ] Unit tests.
- [ ] Integration tests.
- [ ] Benchmarks.
- [ ] TypeScript definitions.
- [ ] TypeScript tests.
- [ ] API documentation.
- [ ] CI jobs/workflows.
Additional Notes
If we ever continue with the work to support Code Origin for Spans below v4.10.0, we'll need this patch, which was developed as part of this work, but was excluded from this PR:
diff --git a/packages/datadog-instrumentations/src/fastify.js b/packages/datadog-instrumentations/src/fastify.js
index 3957c6795..58099f243 100644
--- a/packages/datadog-instrumentations/src/fastify.js
+++ b/packages/datadog-instrumentations/src/fastify.js
@@ -148,7 +148,9 @@ function getRes (reply) {
}
function getRouteConfig (request) {
- return request?.routeOptions?.config
+ // The `request.routerOptions` object was added in Fastify v4.10.0.
+ // If not present, fallback to use the now deprecated `request.context` object to access the `config` object.
+ return request?.routeOptions?.config ?? request?.context?.config
}
function publishError (error, req) {
- #5764
👈 (View in Graphite) master
This stack of pull requests is managed by Graphite. Learn more about stacking.
Overall package size
Self size: 9.42 MB Deduped: 103.45 MB No deduping: 103.97 MB
Dependency sizes
| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.5.1 | 29.73 MB | 29.73 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/pprof | 5.8.0 | 12.55 MB | 12.92 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.4.0 | 2.77 MB | 5.42 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.13.1 | 117.64 kB | 839.26 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.8 | 25.08 kB | 25.08 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.2 | 23.54 kB | 23.54 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 79.06%. Comparing base (
86f1f53) to head (88fe776). Report is 106 commits behind head on master.
Additional details and impacted files
@@ Coverage Diff @@
## master #5764 +/- ##
==========================================
- Coverage 79.15% 79.06% -0.10%
==========================================
Files 520 516 -4
Lines 23729 23618 -111
==========================================
- Hits 18783 18673 -110
+ Misses 4946 4945 -1
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
Benchmarks
Benchmark execution time: 2025-05-23 10:34:35
Comparing candidate commit 88fe77613d35b2d3458c5ac94cdfeb5c0f1cc8bd in PR branch watson/DEBUG-3941/improve-co-fastify-version-limit with baseline commit 86f1f53648764b8a7e7d2bac06e2e67cab8dea4c in branch master.
Found 0 performance improvements and 0 performance regressions! Performance is the same for 1268 metrics, 55 unstable metrics.
Datadog Report
Branch report: watson/DEBUG-3941/improve-co-fastify-version-limit
Commit report: 255c310
Test service: dd-trace-js-integration-tests
:white_check_mark: 0 Failed, 1152 Passed, 0 Skipped, 22m 40.03s Total Time