Skip to content

Conversation

@rochdev
Copy link
Member

@rochdev rochdev commented Nov 9, 2025

What does this PR do?

Switch to JavaScript implementation of Orchestrion.

Motivation

In its current form, Orchestrion is too heavy to be usable for instrumentation. It also lacks a good query engine to be powerful enough for any transformations, and it requires 2 distinct Rust projects to be updated and released every time we need to make any change. While this is still the direction we want to be going long-term, I don't see a path forward short-term so I wrote a JS version that enables our integrations team to start using the rewriter approach.

Startup time impact goes from +46-104% with Orchestrion to +6-11% with the JS based rewriter. Of course lazy loading can help with these numbers in both cases, but that's only true when no instrumentation is done using the rewriter, which will be less and less common as we start adding and updating integrations.

Instrumentation time is a bit slower but since we don't instrument a lot of files that's fine, especially since the time to parse is relative to the size of the file, and larger files are also slower to load for Node and v8, so parsing is only slow for an already slow to load file. For example, parsing langchain goes from 7ms to 14ms, but the library itself takes 100ms+ to load so we're still pretty insignificant in comparison.

Additional Notes

The goal of this PR is not to replace Orchestrion, quite the opposite. The JS implementation simply enables us to ship this now without having to make the many changes that are needed to get Orchestrion work for our needs. This is especially true since some of our needs are not known yet and may require larger changes. Once our usage becomes stable, everything should be backported to Orchestrion and we should switch back.

@github-actions
Copy link

github-actions bot commented Nov 9, 2025

Overall package size

Self size: 13.43 MB
Deduped: 117.19 MB
No deduping: 132.21 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.3.0 | 20.73 MB | 20.74 MB | | @datadog/pprof | 5.12.0 | 11.19 MB | 11.57 MB | | @datadog/native-iast-taint-tracking | 4.1.0 | 9.01 MB | 9.02 MB | | @opentelemetry/resources | 1.30.1 | 557.67 kB | 7.71 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.83 MB | | @datadog/wasm-js-rewriter | 5.0.1 | 2.82 MB | 3.53 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api-logs | 0.208.0 | 199.48 kB | 1.42 MB | | meriyah | 6.1.4 | 1.41 MB | 1.41 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | esquery | 1.6.0 | 1.04 MB | 1.07 MB | | import-in-the-middle | 1.15.0 | 127.66 kB | 856.24 kB | | source-map | 0.6.1 | 805.22 kB | 805.22 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | @datadog/openfeature-node-server | 0.2.0 | 118.51 kB | 437.19 kB | | astring | 1.9.0 | 273.16 kB | 273.16 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | @isaacs/ttlcache | 2.1.2 | 90.79 kB | 90.79 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 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 | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB | | escape-string-regexp | 5.0.0 | 3.66 kB | 3.66 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@codecov
Copy link

codecov bot commented Nov 9, 2025

Codecov Report

❌ Patch coverage is 34.48276% with 76 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.67%. Comparing base (572f6b7) to head (eed3401).
⚠️ Report is 18 commits behind head on master.

Files with missing lines Patch % Lines
...dog-instrumentations/src/helpers/rewriter/index.js 40.98% 36 Missing ⚠️
...nstrumentations/src/helpers/rewriter/transforms.js 5.40% 35 Missing ⚠️
...datadog-instrumentations/src/helpers/instrument.js 28.57% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6877      +/-   ##
==========================================
- Coverage   84.81%   84.67%   -0.15%     
==========================================
  Files         513      517       +4     
  Lines       21521    21867     +346     
==========================================
+ Hits        18253    18515     +262     
- Misses       3268     3352      +84     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@datadog-official
Copy link

datadog-official bot commented Nov 9, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: eed3401 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

@pr-commenter
Copy link

pr-commenter bot commented Nov 9, 2025

Benchmarks

Benchmark execution time: 2025-12-04 01:59:16

Comparing candidate commit eed3401 in PR branch orchestrion-js with baseline commit 572f6b7 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 290 metrics, 30 unstable metrics.

@rochdev rochdev force-pushed the orchestrion-js branch 3 times, most recently from 420e1be to 5461ae1 Compare November 21, 2025 14:34
@rochdev rochdev marked this pull request as ready for review November 21, 2025 15:17
@rochdev rochdev requested review from a team as code owners November 21, 2025 15:17
@wconti27 wconti27 mentioned this pull request Dec 3, 2025
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants