Skip to content

feat: pg orchestrion instrumentation#21826

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

feat: 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

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

@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 ab619f7. Configure here.

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
This resolves the API surface wart where options for orchestrion
integrations had to be passed into the
`experimentalUseDiagnosticsChannelInjection` method, and returns that to
being an argument-free void-returning opt-in that can be easily no-op'ed
in the future, and all options are passed in via `Sentry.init()` as they
were in the prior OTel implementation.
@isaacs isaacs force-pushed the isaacs/pg-orchestrion branch from fbbe3ae to 334614a Compare June 27, 2026 23:24
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 27.48 kB - -
@sentry/browser - with treeshaking flags 25.91 kB - -
@sentry/browser (incl. Tracing) 45.97 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 47.72 kB - -
@sentry/browser (incl. Tracing, Profiling) 50.76 kB - -
@sentry/browser (incl. Tracing, Replay) 85.22 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 74.81 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 89.91 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 102.57 kB - -
@sentry/browser (incl. Feedback) 44.66 kB - -
@sentry/browser (incl. sendFeedback) 32.26 kB - -
@sentry/browser (incl. FeedbackAsync) 37.4 kB - -
@sentry/browser (incl. Metrics) 28.54 kB - -
@sentry/browser (incl. Logs) 28.78 kB - -
@sentry/browser (incl. Metrics & Logs) 29.47 kB - -
@sentry/react 29.27 kB - -
@sentry/react (incl. Tracing) 48.28 kB - -
@sentry/vue 32.63 kB - -
@sentry/vue (incl. Tracing) 47.84 kB - -
@sentry/svelte 27.5 kB - -
CDN Bundle 29.89 kB - -
CDN Bundle (incl. Tracing) 47.89 kB - -
CDN Bundle (incl. Logs, Metrics) 31.44 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 49.24 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 70.78 kB - -
CDN Bundle (incl. Tracing, Replay) 85.4 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 86.68 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 91.19 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 92.45 kB - -
CDN Bundle - uncompressed 88.94 kB - -
CDN Bundle (incl. Tracing) - uncompressed 145.03 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 93.65 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 149 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 218.62 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 264.05 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 268 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 277.75 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 281.69 kB - -
@sentry/nextjs (client) 50.67 kB - -
@sentry/sveltekit (client) 46.37 kB - -
@sentry/core/server 77.54 kB - -
@sentry/core/browser 63.88 kB - -
@sentry/node-core 61.51 kB - -
@sentry/node 123.56 kB +0.07% +80 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection) 69.95 kB - -
@sentry/node/light 50.4 kB - -
@sentry/node - without tracing 73.61 kB - -
@sentry/aws-serverless 84.4 kB +0.01% +1 B 🔺
@sentry/cloudflare (withSentry) - minified 180.31 kB - -
@sentry/cloudflare (withSentry) 446.24 kB - -

View base workflow run

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

1 participant