-
Notifications
You must be signed in to change notification settings - Fork 807
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
Update fetch instrumentation to be runtime agnostic #4063
Update fetch instrumentation to be runtime agnostic #4063
Conversation
Working on getting the CLA set up for my organization now |
Ah I had only run |
f91b440
to
8b77815
Compare
I've updated this PR to be a much smaller fix, avoiding any refactor. I've updated the description accordingly. |
Codecov Report
Additional details and impacted files@@ Coverage Diff @@
## main #4063 +/- ##
==========================================
+ Coverage 92.31% 92.33% +0.02%
==========================================
Files 330 329 -1
Lines 9421 9382 -39
Branches 1996 1985 -11
==========================================
- Hits 8697 8663 -34
+ Misses 724 719 -5
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems much saner (especially in the short term) than monkey patching globalThis, which is what I'm currently doing to get fetch telemetry!
8b77815
to
03cecdd
Compare
531fb38
to
e055b21
Compare
e055b21
to
42c71c9
Compare
42c71c9
to
d24e132
Compare
@pckilgore @drewcorlin1 @pichlermarc any news on this? |
@diogotorres97 just waiting for a codeowner to review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM % changelog text; I think this looks like a good step forward. 🙂 Thank you for working on this.
A side note: as you mentioned I also think some of the code needs to probably be moved in a follow up. We've recently started working on SDK 2.0 over at the next
branch, so now is a good time to get breaking changes in if they're required. If you have specific action-items in mind, please open an issue so that we can plan it accordingly. 🙂
If the change requires breaking a stable interface, please tag @open-telemetry/javascript-approvers
on the issue and state that it is a breaking change that should be considered for 2.0, we'll then review the proposal and add it to the scope for 2.0 if it is accepted.
Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com>
@pichlermarc could you merge whenever you get a chance? |
* chore: track package-lock.json (#4238) * chore: track package-lock.json * Pin to old versions for node 14 * Use version range * Remove unused cached directories * Temporarily disable other tests * Temporarily enable only api test * Enable only some packages * Test only api packages * Test trace exporters * Fix line ordering * Test all packages except otlp exporters * Add trace http exporter * Add trace proto exporter * Test all but grpc exporters * chore: use npm workspaces and degrade lerna to v6 * chore: get rid of lerna bootstrap * chore: use npx * chore: allow install scripts to setup buf * chore: fix w3c-integration-test cache key * chore: fix cache key * chore: disable resource compat test * chore: fix node_modules assumptions * chore: fix hoisted karma issue * chore: fix markdown linter complaints * chore: lock @grpc/grpc-js to v1.8.21 * Break caches * chore: remove cache * chore: fixup inline commands --------- Co-authored-by: Daniel Dyla <dyladan@users.noreply.github.com> * docs: fixed link to benchmark results (#4233) Co-authored-by: Chengzhong Wu <legendecas@gmail.com> * chore(deps): update all patch versions (#4215) * fix: otlp json encoding (#4220) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * fix: remove duplicate export star from version.ts (#4225) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * docs: fix sdk-node config instructions (#4249) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * feat(api): publish api esnext target (#4231) * chore: release API 1.7.0/Core 1.18.0/Experimental 0.45.0 (#4254) * fix(sdk-metrics): hand-roll MetricAdvice type as older API versions do not include it (#4260) * chore: prepare release 1.18.1/0.45.1 (#4261) * chore: no need for 'packages' in "lerna.json" (#4264) * Benchmark tests for trace OTLP transform and BatchSpanProcessor (#4218) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * chore: type reference on zone.js (#4257) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * docs: add docker-compose to run prometheus for the experimental example (#4268) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * fix(sdk-logs): avoid map attribute set when count limit exceeded (#4195) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> * chore(deps): update dependency chromedriver to v119 [security] (#4280) * chore(deps): update actions/setup-node action to v4 (#4236) * fix(sdk-trace-base): processor onStart called with a span having empty attributes (#4277) Co-authored-by: artahmetaj <artahmetaj@yahoo.com> * Update fetch instrumentation to be runtime agnostic (#4063) Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> --------- Co-authored-by: Chengzhong Wu <legendecas@gmail.com> Co-authored-by: Martin Kuba <martin@martinkuba.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Siim Kallas <siimkallas@gmail.com> Co-authored-by: Marc Pichler <marc.pichler@dynatrace.com> Co-authored-by: David Luna <david.luna@elastic.co> Co-authored-by: Dinko Osrecki <dinko.osrecki@emarsys.com> Co-authored-by: Trent Mick <trentm@gmail.com> Co-authored-by: François <32224751+Lp-Francois@users.noreply.github.com> Co-authored-by: Hyun Oh <hyunnoh01@gmail.com> Co-authored-by: André Cruz <andremiguelcruz@msn.com> Co-authored-by: artahmetaj <artahmetaj@yahoo.com> Co-authored-by: drewcorlin1 <82601620+drewcorlin1@users.noreply.github.com>
Which problem is this PR solving?
This PR addresses #3413, but updating the experimental fetch instrumentation to not depend on browser specific constructs (window, location).
The motivation for this change is so I can instrument my NodeJS applications using
fetch()
with the@opentelemetry/instrumentation-fetch
package.My take is that this is much more of a bandaid than a true fix, as the fetch instrumentation still depends on the
opentelemetry-sdk-trace-web
, but it provides significant value in that I can use the instrumentation out of the box with no workarounds (like patching the global objectglobalThis.location = {}
). I think the proper fix is to move some of the logic inopentelemetry-sdk-trace-web
toopentelemetry-sdk-trace-base
, but I am very new to this codebase and wanted to hold off on a larger refactor, in the interest of being able to contribute a targeted fix as quickly as possible.Fixes # (issue)
Short description of the changes
Check for the existence of browser-specific constructs before referencing them, if they are not present return undefined/don't evaluate the expression.
Type of change
Please delete options that are not relevant.
How Has This Been Tested?
I have run the tests and linting steps, and also tested this locally in a NodeJS application (fastify server that uses fetch).
My steps to test locally
experimental/packages/opentelemetry-instrumentation-fetch
andpackages/opentelemetry-sdk-trace-web
cd
into that directorynpm run compile
npm pack
npm i ../../Desktop/opentelemetry-js/<path to tarball>.tgz
Checklist: