Skip to content

feat(bun,deno,node): pg orchestrion instrumentation#21826

Open
isaacs wants to merge 5 commits into
developfrom
isaacs/pg-orchestrion
Open

feat(bun,deno,node): pg orchestrion instrumentation#21826
isaacs wants to merge 5 commits into
developfrom
isaacs/pg-orchestrion

Conversation

@isaacs

@isaacs isaacs commented Jun 27, 2026

Copy link
Copy Markdown
Member

Add orchestrion instrumentation for Node, Deno, and Bun, covering the pg module.

This basically copies exactly what the mysql integration does, but for postgres.

fix: #20764
fix: JS-2415

@isaacs isaacs requested a review from a team as a code owner June 27, 2026 04:08
@isaacs isaacs requested review from JPeer264, andreiborza and mydea and removed request for a team June 27, 2026 04:08
@linear-code

linear-code Bot commented Jun 27, 2026

Copy link
Copy Markdown

JS-2415

Comment thread packages/server-utils/src/integrations/tracing-channel/postgres.ts Outdated
Comment thread packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@isaacs

isaacs commented Jun 27, 2026

Copy link
Copy Markdown
Member Author

🚲 🏠 API surface choice:

In order to opt into orchestrion diagnostics-channel-injection style instrumentations, which swap out the vendored OTel instrumentations, we call Sentry.experimentalUseDiagnosticsChannelInjection().

This initializes the orchestrion integrations, and uses them instead of the OTel ones. However, this means that the only time that the orchestrion integrations are set up and provided with options, is at that moment of calling experimentalUseDiagnosticsChannelInjection(). For the pg integration, this means that the option to decide to skip the connectSpans happens before Sentry.init() and so has to be passed into that opt-in method like this:

Sentry.experimentalUseDiagnosticsChannelInjection({ postgres: { ignoreConnectSpans: true } });

I don't love this! It exposes the implementation detail in a way that we will likely regret. I kind of hate it, actually.

  • Overloads the method, so we can't just make it a no-op when we make orchestrion the default.
  • Makes the orchestrion instrumentation load differently than the OTel one (which a user configures by initializing the integration and passing it in the integrations array, rather than relying on it being in defaultIntegrations.)

It was a simple duct-tape way forward, but it sucks.

Another approach would be, instead of actually initializing these integrations at that moment to swap in for the OTel ones, just mark that we're going to use the orchestrion ones when we do initialize, and then when it comes time to initialize them, choose which implementation to use, with the configurations provided.

I'm going to try spiking that out here.


EDIT: yeah, fixed it. Much nicer. The Sentry.experimentalUseDiagnosticsChannelInjectionI() method is back to being argument-free, and the orchestrion integrations can be provided with options in the exact same way as their otel counterparts.

Comment thread packages/deno/src/integrations/postgres.ts Outdated
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from fbbe3ae to 334614a Compare June 27, 2026 23:24
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 27.59 kB - -
@sentry/browser - with treeshaking flags 26.03 kB - -
@sentry/browser (incl. Tracing) 46.05 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 47.79 kB - -
@sentry/browser (incl. Tracing, Profiling) 50.81 kB - -
@sentry/browser (incl. Tracing, Replay) 85.28 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 74.89 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 89.97 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 102.64 kB - -
@sentry/browser (incl. Feedback) 44.77 kB - -
@sentry/browser (incl. sendFeedback) 32.39 kB - -
@sentry/browser (incl. FeedbackAsync) 37.52 kB - -
@sentry/browser (incl. Metrics) 28.67 kB - -
@sentry/browser (incl. Logs) 28.91 kB - -
@sentry/browser (incl. Metrics & Logs) 29.6 kB - -
@sentry/react 29.38 kB - -
@sentry/react (incl. Tracing) 48.35 kB - -
@sentry/vue 32.82 kB - -
@sentry/vue (incl. Tracing) 47.91 kB - -
@sentry/svelte 27.61 kB - -
CDN Bundle 30 kB - -
CDN Bundle (incl. Tracing) 47.98 kB - -
CDN Bundle (incl. Logs, Metrics) 31.57 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 49.32 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 70.77 kB - -
CDN Bundle (incl. Tracing, Replay) 85.48 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 86.76 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 91.29 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 92.53 kB - -
CDN Bundle - uncompressed 89.35 kB - -
CDN Bundle (incl. Tracing) - uncompressed 145.28 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 94.05 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 149.25 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 218.59 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 264.29 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 268.25 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 277.99 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 281.94 kB - -
@sentry/nextjs (client) 50.73 kB - -
@sentry/sveltekit (client) 46.44 kB - -
@sentry/core/server 77.75 kB - -
@sentry/core/browser 64.06 kB - -
@sentry/node-core 62.37 kB -0.01% -1 B 🔽
@sentry/node 121.24 kB -0.01% -3 B 🔽
@sentry/node/import (ESM hook with diagnostics-channel injection) 69.95 kB - -
@sentry/node/light 50.46 kB - -
@sentry/node - without tracing 72.68 kB -0.01% -1 B 🔽
@sentry/aws-serverless 83.52 kB -0.01% -1 B 🔽
@sentry/cloudflare (withSentry) - minified 180.62 kB - -
@sentry/cloudflare (withSentry) 446.93 kB - -

View base workflow run

@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from 9545bf8 to dfe74f5 Compare June 29, 2026 01:36

@JPeer264 JPeer264 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall LGTM, got minor suggestions. I'll review once more after the tests are green and the merge conflicts got solved

Comment thread .github/workflows/build.yml
Comment thread packages/deno/package.json
Comment thread packages/deno/src/integrations/postgres.ts Outdated
Comment thread packages/server-utils/src/integrations/tracing-channel/postgres.ts
Comment thread packages/server-utils/src/integrations/tracing-channel/postgres.ts Outdated
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from dfe74f5 to 373c014 Compare June 30, 2026 23:45
Comment thread packages/node/src/sdk/index.ts
Comment thread packages/server-utils/src/tracing-channel.ts
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

👋 @mydea, @andreiborza — Please review this PR when you get a chance!

@mydea mydea changed the title feat: pg orchestrion instrumentation feat(bun,deno,node): pg orchestrion instrumentation Jul 1, 2026
Comment thread dev-packages/e2e-tests/test-applications/deno-pg/package.json
Comment thread packages/node/src/integrations/tracing/mysql/index.ts Outdated
Comment thread packages/node/src/integrations/tracing/postgres/index.ts Outdated
Comment thread packages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment thread packages/deno/src/integrations/postgres.ts Outdated
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch 2 times, most recently from afbbc64 to 62a281f Compare July 1, 2026 20:17
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch 2 times, most recently from 668eabf to b2621bd Compare July 1, 2026 20:41
Comment thread packages/server-utils/src/integrations/tracing-channel/postgres.ts
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from b2621bd to 58fdc22 Compare July 1, 2026 22:10

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 58fdc22. Configure here.

Comment thread packages/server-utils/src/integrations/tracing-channel/postgres.ts Outdated
isaacs added 5 commits July 1, 2026 17:30
Add orchestrion instrumentation for Node, Deno, and Bun, covering the
`pg` module.

This basically copies exactly what the `mysql` integration does, but for
postgres.

fix: #20764
fix: JS-2415
Make it possible to provide options to orchestrion integrations without
needing to access internal API `@sentry/server-utils/orchestrion`.

An integration test is added verifying that `ignoreConnectSpans` can be
set on the orchestrion `pg` integration.
Move the list of orchestrion integrations, keyed by their public-facing
OTel names, into server-utils.

This allows us to easily provide them in a user-visible way from the
Node SDK, and also avoid forgetting to add them in multiple places as we
add new ones to the set.
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from 2b34039 to a4e321e Compare July 2, 2026 00:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rewrite @opentelemetry/instrumentation-pg to orchestrion

3 participants