dd-trace-js
dd-trace-js copied to clipboard
[DEBUG-2503] Add support for span code origin
What does this PR do?
This PR adds support for a new feature called "Code Origin for Spans" (previously called "Span Origin"). This feature will, in its most basic form, allow users to see where in their code base a span was started/created.
To enable, set DD_TRACE_SPAN_ORIGIN_ENABLED=true.
By default, code origin is only set for spans whos callstack contains user land stack frames.
To support code origin on entry spans (i.e. the span automatically created when an incoming HTTP request is being instrumented), one would need to add this to the router instrumentation for each web framework. This PR includes support for code origin on Fastify entry spans only.
For reference, here's a PR that implements Code Origin in the Java tracer: https://github.com/DataDog/dd-trace-java/pull/7001
Motivation
This makes it easier to understand what each span shown in the flame graph represents.
Tasks
- [ ] Support more frameworks for entry spans, than just Fastify
- [ ] Change how the code origin feature is enabled according to the RFC
- [ ] Rename tags according to newly decided API once the server supports the new tags
- [ ] Add documentation
- [ ] Improve test coverage
- [ ] Code cleanup
- [ ] Benchmarks?
Overall package size
Self size: 7.47 MB Deduped: 63.24 MB No deduping: 63.52 MB
Dependency sizes
| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/native-appsec | 8.1.1 | 18.67 MB | 18.68 MB | | @datadog/native-iast-taint-tracking | 3.1.0 | 12.27 MB | 12.28 MB | | @datadog/pprof | 5.3.0 | 9.85 MB | 10.22 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.5.0 | 2.51 MB | 2.59 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 2.0.0 | 898.77 kB | 1.3 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 9.0.0 | 580.4 kB | 1.03 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 826.22 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | lru-cache | 7.14.0 | 74.95 kB | 74.95 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 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
Benchmarks
Benchmark execution time: 2024-10-12 06:25:51
Comparing candidate commit 878d0767da4bd182eae79648cdbd2f6d59c5dbdd in PR branch watson/span-origin with baseline commit bd4aff563f880898dde1b71a501d3712c93cbb51 in branch master.
Found 0 performance improvements and 0 performance regressions! Performance is the same for 259 metrics, 7 unstable metrics.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 59.61%. Comparing base (
7f93d36) to head (878d076). Report is 10 commits behind head on master.
Additional details and impacted files
@@ Coverage Diff @@
## master #4449 +/- ##
==========================================
- Coverage 69.19% 59.61% -9.58%
==========================================
Files 1 36 +35
Lines 198 1617 +1419
Branches 33 0 -33
==========================================
+ Hits 137 964 +827
- Misses 61 653 +592
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
This stack of pull requests is managed by Graphite. Learn more about stacking.
Join @watson and the rest of your teammates on
Graphite