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

[Code Origin for Spans] Refactor Fastify implementation

Open watson opened this issue 5 months ago • 5 comments
trafficstars

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

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

watson avatar May 23 '25 10:05 watson

This stack of pull requests is managed by Graphite. Learn more about stacking.

watson avatar May 23 '25 10:05 watson

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

github-actions[bot] avatar May 23 '25 10:05 github-actions[bot]

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.

codecov[bot] avatar May 23 '25 10:05 codecov[bot]

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.

pr-commenter[bot] avatar May 23 '25 10:05 pr-commenter[bot]

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