Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
28ff74f
feat(opentelemetry): add schema coordinate to error events
EmrysMyrddin Oct 27, 2025
30f13f5
feat(opentelemetry): migrate errors to events with more attributes
EmrysMyrddin Oct 27, 2025
fb6bea3
fix review
EmrysMyrddin Oct 27, 2025
e34c21a
fix typo
EmrysMyrddin Oct 27, 2025
99886ac
add @graphql-tools/executor to opentelemetry plugin
EmrysMyrddin Oct 28, 2025
762bcf1
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Oct 28, 2025
b55c2d6
add tests
EmrysMyrddin Oct 28, 2025
d6585a5
migrate validation and parsing errors
EmrysMyrddin Oct 28, 2025
29a6ef0
allow to disable logging for `openTelemetrySetup` and `hiveTracingSetup`
EmrysMyrddin Oct 28, 2025
e7e1180
fix linter
EmrysMyrddin Oct 28, 2025
61366db
update latest alpha
EmrysMyrddin Oct 28, 2025
fe76754
skip GC tests in Bun
EmrysMyrddin Oct 28, 2025
076c1ab
fix opentelemetry e2e
EmrysMyrddin Oct 29, 2025
c329d2f
fix abortSingalAll for runtimes not implementing FinalizationRegistry
EmrysMyrddin Oct 29, 2025
bedf89f
add comment
EmrysMyrddin Oct 29, 2025
9cfcd61
update snapshots
EmrysMyrddin Nov 14, 2025
65241cc
use plugin to enable error coordinate
EmrysMyrddin Nov 20, 2025
837d0dd
add changeset
EmrysMyrddin Nov 20, 2025
b76753c
update yoga
EmrysMyrddin Nov 28, 2025
1495bd9
chore(dependencies): updated changesets for modified dependencies
github-actions[bot] Nov 28, 2025
a266c0e
docs(examples): converted from e2es
theguild-bot Nov 28, 2025
ba87426
fix unused variable
EmrysMyrddin Nov 28, 2025
4afb83e
unskip test
EmrysMyrddin Nov 28, 2025
f292531
fix coordinate not available in router runtime
EmrysMyrddin Nov 28, 2025
3013e2a
fix tests for hive router runtime
EmrysMyrddin Nov 28, 2025
9054976
docs(examples): converted from e2es
theguild-bot Dec 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/@graphql-hive_gateway-1636-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-hive/gateway': patch
---

dependencies updates:

- Updated dependency [`graphql-yoga@^5.17.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.17.0) (from `^5.16.2`, in `dependencies`)
7 changes: 7 additions & 0 deletions .changeset/@graphql-hive_gateway-runtime-1636-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-hive/gateway-runtime': patch
---

dependencies updates:

- Updated dependency [`graphql-yoga@^5.17.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.17.0) (from `^5.16.2`, in `dependencies`)
7 changes: 7 additions & 0 deletions .changeset/@graphql-hive_gateway-testing-1636-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-hive/gateway-testing': patch
---

dependencies updates:

- Updated dependency [`graphql-yoga@^5.17.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.17.0) (from `^5.16.2`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-hive/plugin-opentelemetry': patch
---

dependencies updates:

- Added dependency [`@graphql-tools/executor@^1.4.9` ↗︎](https://www.npmjs.com/package/@graphql-tools/executor/v/1.4.9) (to `dependencies`)
7 changes: 7 additions & 0 deletions .changeset/@graphql-mesh_fusion-runtime-1636-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-mesh/fusion-runtime': patch
---

dependencies updates:

- Updated dependency [`graphql-yoga@^5.17.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.17.0) (from `^5.16.2`, in `dependencies`)
22 changes: 22 additions & 0 deletions .changeset/little-ties-jog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
'@graphql-hive/plugin-opentelemetry': minor
'@graphql-hive/gateway-runtime': minor
---

Expose GraphQLError as OpenTelemetry Events.

Errors contains in the result of a graphql operation are now reported as standalone OpenTelemetry
Events (name `graphql.error`) instead of OpenTelemetry Exceptions.

This is aligned with the guidance of the Graphql OpenTelemetry working group.

It allows to add more graphql specific attributes to errors reported in a response:

- `message`: The error message
- `path`: The path in the operation document from which the error originated
- `locations`: The list of related locations in the document source
- `coordinate`: The schema coordinate of the resolver which is the source of the error

This brings the experimental support of the `coordinate` error attribute in the Yoga Runtime. For
security reason, this attribute is purposefully not serialized, to avoid leaking schema information
to clients.
2 changes: 1 addition & 1 deletion e2e/auto-type-merging/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"@graphql-mesh/compose-cli": "^1.5.3",
"@omnigraph/openapi": "^0.109.23",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/aws-sigv4/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"aws4-express": "^0.12.0",
"express": "^5.0.0",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/demand-control/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@apollo/subgraph": "^2.11.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/extra-fields/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/graphos-polling/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"@apollo/subgraph": "^2.11.3",
"fastify": "^5.6.2",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"pino-pretty": "^13.1.2"
}
}
2 changes: 1 addition & 1 deletion e2e/hmac-auth-https/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
"@graphql-mesh/hmac-upstream-signature": "workspace:^",
"@graphql-mesh/plugin-jwt-auth": "workspace:^",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2"
"graphql-yoga": "^5.17.0"
}
}
2 changes: 1 addition & 1 deletion e2e/interface-additional-resolvers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
82 changes: 79 additions & 3 deletions e2e/opentelemetry/opentelemetry.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,17 @@ type JaegerTraceResource = {
tags: JaegerTraceTag[];
};

type JaegerTraceLog = {
timestamp: number;
fields: JaegerTraceTag[];
};

type JaegerTraceSpan = {
traceID: string;
spanID: string;
operationName: string;
tags: Array<JaegerTraceTag>;
logs: Array<JaegerTraceLog>;
references: Array<{ refType: string; spanID: string; traceID: string }>;
};

Expand Down Expand Up @@ -402,6 +408,30 @@ describe('OpenTelemetry', () => {
expect(relevantTrace?.spans).toContainEqual(
expect.objectContaining({ operationName: 'POST /graphql' }),
);

const operationSpan = relevantTrace!.spans.find(
(span) => span.operationName === 'graphql.operation',
);

expect(operationSpan?.logs).toContainEqual(
expect.objectContaining({
fields: expect.arrayContaining([
expect.objectContaining({
key: 'event',
value: 'graphql.error',
}),
expect.objectContaining({
key: 'hive.graphql.error.locations',
value: '["1:13"]',
}),
expect.objectContaining({
key: 'hive.graphql.error.message',
value: 'Syntax Error: Expected Name, found <EOF>.',
}),
]),
}),
);

expect(relevantTrace?.spans).toContainEqual(
expect.objectContaining({
operationName: 'graphql.parse',
Expand All @@ -416,7 +446,7 @@ describe('OpenTelemetry', () => {
}),
expect.objectContaining({
key: 'otel.status_description',
value: 'Syntax Error: Expected Name, found <EOF>.',
value: 'GraphQL Parse Error',
}),
expect.objectContaining({
key: 'hive.graphql.error.count',
Expand Down Expand Up @@ -477,6 +507,53 @@ describe('OpenTelemetry', () => {
expect(relevantTrace?.spans).toContainEqual(
expect.objectContaining({ operationName: 'POST /graphql' }),
);
expect(relevantTrace?.spans).toContainEqual(
expect.objectContaining({
operationName: 'graphql.operation',
tags: expect.arrayContaining([
expect.objectContaining({
key: 'otel.status_code',
value: 'ERROR',
}),
expect.objectContaining({
key: 'error',
value: true,
}),
expect.objectContaining({
key: 'otel.status_description',
value: 'GraphQL Validation Error',
}),
expect.objectContaining({
key: 'hive.graphql.error.count',
value: 1,
}),
]),
}),
);
const operationSpan = relevantTrace!.spans.find(
(span) => span.operationName === 'graphql.operation',
);

expect(operationSpan?.logs).toContainEqual(
expect.objectContaining({
fields: expect.arrayContaining([
expect.objectContaining({
key: 'event',
value: 'graphql.error',
}),
expect.objectContaining({
key: 'hive.graphql.error.locations',
value: '["1:9"]',
}),
expect.objectContaining({
key: 'hive.graphql.error.message',
value:
'Cannot query field "nonExistentField" on type "Query".',
}),
]),
}),
);

expect(relevantTrace?.spans).toContainEqual(
expect.objectContaining({ operationName: 'graphql.parse' }),
);
Expand All @@ -494,8 +571,7 @@ describe('OpenTelemetry', () => {
}),
expect.objectContaining({
key: 'otel.status_description',
value:
'Cannot query field "nonExistentField" on type "Query".',
value: 'GraphQL Validation Error',
}),
expect.objectContaining({
key: 'hive.graphql.error.count',
Expand Down
2 changes: 1 addition & 1 deletion e2e/opentelemetry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"@apollo/subgraph": "^2.11.3",
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/polling/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
"@graphql-mesh/compose-cli": "^1.5.3",
"express": "^5.0.0",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2"
"graphql-yoga": "^5.17.0"
}
}
2 changes: 1 addition & 1 deletion e2e/retry-timeout/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"@apollo/subgraph": "^2.11.3",
"@graphql-hive/gateway": "workspace:*",
"graphql": "16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/subscriptions-with-transforms/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "16.12.0",
"graphql-sse": "^2.6.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
2 changes: 1 addition & 1 deletion e2e/type-merging-batching/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1"
}
}
Binary file modified examples/extra-fields/example.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/extra-fields/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/extra-fields/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1",
"@graphql-hive/gateway": "^2.1.21"
},
Expand Down
Binary file modified examples/hmac-auth-https/example.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/hmac-auth-https/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/hmac-auth-https/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@graphql-mesh/hmac-upstream-signature": "^2.0.8",
"@graphql-mesh/plugin-jwt-auth": "^2.0.9",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2"
"graphql-yoga": "^5.17.0"
},
"devDependencies": {
"tsx": "^4.20.3"
Expand Down
Binary file modified examples/interface-additional-resolvers/example.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/interface-additional-resolvers/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/interface-additional-resolvers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1",
"@graphql-hive/gateway": "^2.1.21"
},
Expand Down
Binary file modified examples/subscriptions-with-transforms/example.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/subscriptions-with-transforms/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/subscriptions-with-transforms/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "16.12.0",
"graphql-sse": "^2.6.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1",
"@graphql-hive/gateway": "^2.1.21"
},
Expand Down
Binary file modified examples/type-merging-batching/example.tar.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion examples/type-merging-batching/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/type-merging-batching/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@graphql-mesh/compose-cli": "^1.5.3",
"graphql": "^16.12.0",
"graphql-yoga": "^5.16.2",
"graphql-yoga": "^5.17.0",
"tslib": "^2.8.1",
"@graphql-hive/gateway": "^2.1.21"
},
Expand Down
Loading
Loading