feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion - #21885

Merged
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql
Jul 9, 2026
Merged

feat(server-utils): Migrate @opentelemetry/instrumentation-graphql to orchestrion#21885
chargome merged 10 commits into
developfrom
cg/orchestrion-graphql

Conversation

@chargome

@chargomechargome commented Jul 1, 2026

Copy link
Copy Markdown
Member

Migrates @opentelemetry/instrumentation-graphql to orchestrion diagnostics-channel injection.

The channel based integration subscibes to orchestrion:graphql:{parse,validate,execute} and emits the same spans as the OTel integration — with a distinct auto.graphql.orchestrion.graphql origin.

closes#20752

@chargomechargome self-assigned this Jul 1, 2026
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
Comment threadpackages/node/src/integrations/tracing/index.ts
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/spans.ts Outdated
@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

Comment threadpackages/server-utils/src/integrations/tracing-channel/graphql/constants.ts Outdated
@github-actions

github-actionsBot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

PathSize% ChangeChange
@sentry/browser27.59 kB--
@sentry/browser - with treeshaking flags26.03 kB--
@sentry/browser (incl. Tracing)46.34 kB--
@sentry/browser (incl. Tracing + Span Streaming)48.13 kB--
@sentry/browser (incl. Tracing, Profiling)51.12 kB--
@sentry/browser (incl. Tracing, Replay)85.62 kB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags75.26 kB--
@sentry/browser (incl. Tracing, Replay with Canvas)90.32 kB--
@sentry/browser (incl. Tracing, Replay, Feedback)102.97 kB--
@sentry/browser (incl. Feedback)44.76 kB--
@sentry/browser (incl. sendFeedback)32.38 kB--
@sentry/browser (incl. FeedbackAsync)37.51 kB--
@sentry/browser (incl. Metrics)28.67 kB--
@sentry/browser (incl. Logs)28.91 kB--
@sentry/browser (incl. Metrics & Logs)29.59 kB--
@sentry/react29.38 kB--
@sentry/react (incl. Tracing)48.61 kB--
@sentry/vue33.03 kB--
@sentry/vue (incl. Tracing)48.24 kB--
@sentry/svelte27.61 kB--
CDN Bundle30 kB--
CDN Bundle (incl. Tracing)48.32 kB--
CDN Bundle (incl. Logs, Metrics)31.57 kB--
CDN Bundle (incl. Tracing, Logs, Metrics)49.64 kB--
CDN Bundle (incl. Replay, Logs, Metrics)70.81 kB--
CDN Bundle (incl. Tracing, Replay)85.84 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics)87.14 kB--
CDN Bundle (incl. Tracing, Replay, Feedback)91.64 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)92.92 kB--
CDN Bundle - uncompressed89.35 kB--
CDN Bundle (incl. Tracing) - uncompressed146.1 kB--
CDN Bundle (incl. Logs, Metrics) - uncompressed94.05 kB--
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed150.07 kB--
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed218.78 kB--
CDN Bundle (incl. Tracing, Replay) - uncompressed265.3 kB--
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed269.26 kB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed279 kB--
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed282.95 kB--
@sentry/nextjs (client)51.16 kB--
@sentry/sveltekit (client)46.75 kB--
@sentry/core/server78.42 kB--
@sentry/core/browser64.74 kB--
@sentry/node-core62.72 kB--
@sentry/node125.36 kB-0.01%-1 B 🔽
@sentry/node (incl. diagnostics channel injection)136.41 kB+1.05%+1.41 kB 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection)69.95 kB--
@sentry/node/light50.72 kB--
@sentry/node - without tracing74.05 kB--
@sentry/aws-serverless85.5 kB--
@sentry/cloudflare (withSentry) - minified181.71 kB--
@sentry/cloudflare (withSentry)449.16 kB--

View base workflow run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@chargome

Copy link
Copy Markdown
MemberAuthor

bugbot run

@cursorcursorBot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 43d4510. Configure here.

Comment threadpackages/node/src/sdk/experimentalUseDiagnosticsChannelInjection.ts Outdated
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from 0eccdf9 to d2c7ce0CompareJuly 6, 2026 08:25
…to orchestrion
Rewrite the graphql integration as a diagnostics-channel subscriber, with orchestrion
injecting channels into graphql's compiled `parse`/`validate`/`execute` (v14–v16). Registers
`graphqlIntegration` in the channelIntegrations registry and adds a per-lib config file, so the
opt-in and `diagnosticsChannelInjectionIntegrations()` pick it up automatically. Span
names/attributes/origin mirror the OTel integration (distinct `auto.graphql.orchestrion.graphql`
origin); the structural graphql types are shared with the vendored OTel instrumentation.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@chargome
chargomeforce-pushed the cg/orchestrion-graphql branch from d2c7ce0 to 21acce6CompareJuly 7, 2026 09:11
@chargome
chargome marked this pull request as ready for review July 8, 2026 09:09
@chargome
chargome requested a review from a team as a code ownerJuly 8, 2026 09:09
@chargome
chargome requested review from JPeer264, andreiborza, isaacs, mydea and nicohrubec and removed request for a teamJuly 8, 2026 09:09
@chargome
chargome marked this pull request as draft July 8, 2026 09:32
chargomeand others added 3 commits July 8, 2026 11:42
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/index.ts
…er conventions
develop landed a native diagnostics_channel graphql subscriber (v17) with new span conventions
(graphql.document, WEB_SERVER_GRAPHQL_SPAN_OP op, auto.graphql.diagnostic_channel origin). Rework the
orchestrion v14–16 subscriber to reuse that module's utils/conventions so spans are identical across
versions, and compose the registry entry as native(v17) + orchestrion(v14–16) via extendIntegration so
opting into injection instruments every supported version without the OTel patcher (no v17 regression).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
@chargome
chargome marked this pull request as ready for review July 8, 2026 11:33
@chargome
chargome requested a review from logaretmJuly 8, 2026 12:24
…phql
# Conflicts:
#	packages/server-utils/src/orchestrion/channels.ts
#	packages/server-utils/src/orchestrion/config/index.ts
#	packages/server-utils/src/orchestrion/index.ts
Comment threadpackages/server-utils/test/graphql.test.ts Outdated
Comment threadpackages/server-utils/src/orchestrion/index.ts Outdated

@andreiborzaandreiborza 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.

LGTM, thanks for taking care of this!

andreiborza added a commit that referenced this pull request Jul 8, 2026
…c-context logic (#22099)
Removes the ioredis unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is covered by the `redis` (ioredis scenario) and
`redis-cache` node integration suites. The `responseHook` and
connect-span cases aren't cleanly testable on the orchestrion path (the
hook is wired internally for caching) and these suites are Docker-gated,
so they're left as a possible follow-up rather than migrated now.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22101)
Removes the mongoose unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The path is covered by the `mongoose-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds error-status, empty-filter, and cursor-batchSize coverage to that
suite.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…-context logic (#22098)
Follow-up to the review discussion in #21885: several `server-utils`
diagnostics-channel unit tests stub the SDK's async context strategy
(`setAsyncContextStrategy` plus a hand-rolled
`installTestAsyncContextStrategy`) to drive spans, replicating SDK
internals in the test layer. Per the thread, we're removing these in
favor of the integration tests that exercise the real code paths.
This PR removes both redis unit tests:
- `test/integrations/tracing-channel/redis.test.ts` (orchestrion path,
origin `auto.db.orchestrion.redis`) — covered by `suites/tracing/redis`
(the suite branches on `isOrchestrionEnabled()`).
- `test/redis/redis-dc-subscriber.test.ts` (native diagnostics-channel
subscriber, origin `auto.db.redis.diagnostic_channel`) — covered by
`suites/tracing/redis-dc`.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…async-context logic (#22097)
Removes the postgres.js unit test that stubbed the SDK's async context
strategy to drive spans, which replicated SDK internals in the test
layer. Per the review thread in #21885, we rely on the integration tests
instead.
The orchestrion path is already covered end to end by the `postgresjs`
node integration suite. The remaining unit-only assertions checked
internal implementation details (not re-creating a span on a re-entrant
call, skipping an already-wrapped query, no span without an active
parent) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…nc-context logic (#22103)
Removes the three graphql subscriber unit tests and their shared helper,
which stubbed the SDK's async context strategy and a fake document to
drive spans, replicating SDK internals in the test layer. Per the review
thread in #21885, we rely on the integration tests instead.
The path is covered by the `graphql-tracing-channel` node integration
suite. To avoid losing the useful unit-only assertions, this PR also
adds validation-error status and `ignoreTrivialResolveSpans` coverage to
that suite. The subscription-channel case is left as a possible
follow-up.
Ref:
#21885 (comment)
---------
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
andreiborza added a commit that referenced this pull request Jul 8, 2026
…ontext logic (#22100)
Removes the hapi unit test that stubbed the SDK's async context strategy
to drive spans, which replicated SDK internals in the test layer. Per
the review thread in #21885, we rely on the integration tests instead.
The orchestrion path is covered by the `hapi` node integration suite.
`hapi-utils.test.ts` stays (pure metadata formatting, no async-context
stubbing). The remaining unit-only assertions checked internal
implementation details (setup only wrapping once when called twice, no
span without an active span, accepting the ext handler as a tuple or an
object) rather than the spans a user actually sees, so there was nothing
meaningful to move into an integration test.
Ref:
#21885 (comment)
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
@chargome
chargome merged commit a8ecabd into developJul 9, 2026
594 of 597 checks passed
@chargome
chargome deleted the cg/orchestrion-graphql branch July 9, 2026 09:56
nicohrubec added a commit that referenced this pull request Jul 21, 2026
…22141)
Rewrites the `Firebase` integration off `InstrumentationBase` to an
orchestrion diagnostics-channel listener in `@sentry/server-utils`,
following the mysql
([#20900](<#20900>))
and graphql (#21885) migrations. The
channel-based integration reuses the OTel `Firebase` name, so opting in
via `experimentalUseDiagnosticsChannelInjection()` swaps it in 1:1 for
the OTel one (which stays the default).
**Firestore** — subscribes to
`orchestrion:@firebase/firestore:{add,get,set,delete}-doc` (injected
into firestore's lite `addDoc`/`getDocs`/`setDoc`/`deleteDoc`) and emits
the same `db.query` client spans via `bindTracingChannelToSpan`, with a
distinct `auto.firebase.orchestrion.firestore` origin.
**firebase-functions** — the `onX(...)` provider functions *register* a
handler and return synchronously, so the span can't be bound to the
registration call. Instead the channel `start` subscriber rewraps the
handler argument (orchestrion forwards the mutated args array to the
real call), so the returned cloud function opens a `SERVER` span + error
boundary on invocation, with `auto.firebase.orchestrion.functions`
origin.
The `node-firebase` e2e firestore suite additionally runs with
`E2E_ORCHESTRION=true` to assert the orchestrion origin.
Closes#20919
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Nicolas Hrubec <nico.hrubec@sentry.io>
Sign up for freeto 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-graphql to orchestrion

3 participants

@chargome@nicohrubec@andreiborza