-
Notifications
You must be signed in to change notification settings - Fork 357
switch to js implementation of orchestrion #6877
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Overall package sizeSelf size: 13.43 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 Report❌ Patch coverage is 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. 🚀 New features to boost your workflow:
|
|
✅ Tests 🎉 All green!❄️ No new flaky tests detected 🔗 Commit SHA: eed3401 | Docs | Datadog PR Page | Was this helpful? Give us feedback! |
420e1be to
5461ae1
Compare
5461ae1 to
7a516d9
Compare
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.