feat(http): refactor node:http client instrumentation for portability#20393
feat(http): refactor node:http client instrumentation for portability#20393
Conversation
1f9cef2 to
5ab332a
Compare
size-limit report 📦
|
18b93f6 to
fd04ed5
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
0877c6e to
1963717
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
1963717 to
3e7001c
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
0307e3a to
640f8f0
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
1b8377c to
1a8d51e
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
24f03e6 to
eac6329
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
aacfec1 to
edb38de
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
edb38de to
0c11611
Compare
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
0c11611 to
76df64d
Compare
| @@ -0,0 +1,86 @@ | |||
| import { createTestServer } from '@sentry-internal/test-utils'; | |||
There was a problem hiding this comment.
Extremely nice that there are tests for this scenario. Maybe it makes sense to display a warning in our docs too: https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/http/ (not sure if this is the best place to put it)
This was implemented for the portable Express integration, but others will need the same functionality, so make it a reusable util.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 616a2a0. Configure here.
Refactor the `node:http` outgoing request instrumentation so that it can be applied to non-Node.js environments by patching the http module. Also, refactor so that the diagnostics_channel and monkeypatching paths can share code, and so that light and normal node-core instrumentations can share more of the functionality as well. To facilitate this, some portable minimal types are vendored in from the `node:http` module.
|
So, I added a commit to check for the OTel double-wrapping, which seems to work in any case I could think to test it. It dodges the timing issue by just checking and warning at run-time, and only prints a warning once, so it should be relatively polite. I think this is ready to merge at this point. |

Refactor the
node:httpoutgoing request instrumentation so that it canbe applied to non-Node.js environments by patching the http module.
Also, refactor so that the diagnostics_channel and monkeypatching paths
can share code, and so that light and normal node-core instrumentations
can share more of the functionality as well.
To facilitate this, some portable minimal types are vendored in from the
node:httpmodule.yarn lint) & (yarn test).Notes on test changes:
conditionalTeston a node version.originspan data changes from the vague (and now incorrect)auto.http.otel.httptoauto.http.clientfor client spans. This also affects a lot of the tests.Otherwise, all prior behavior should be unchanged, which is reflected in the integration and unit tests.