Opentelemetry
ts
// Our website uses Vitepress+Twoslash. Twoslash does not discover the generated Graffle modules.
// Perhaps we can configure Twoslash to include them. Until we figure that out, we have to
// explicitly import them like this.
import './graffle/modules/global.js'
// ---cut---
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
import { OpenTelemetry } from 'graffle/extensions/opentelemetry'
import { Graffle } from './graffle/$.js'
// Setup Opentelemetry
// 1. Initialize the OpenTelemetry provider
// 2. Register the provider to make the OpenTelemetry API use it
const exporter = new ConsoleSpanExporter()
const processor = new SimpleSpanProcessor(exporter)
const provider = new NodeTracerProvider({
spanProcessors: [processor],
})
provider.register()
const graffle = Graffle.create().use(OpenTelemetry())
const data = await graffle.gql('query { pokemons { name } }').$send()
console.log(data)Outputs
txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: '9673509ea5b5408c',
traceState: undefined,
name: 'encode',
id: '0656d7f6c5270654',
kind: 0,
timestamp: 1760814138396000,
duration: 721.584,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: '9673509ea5b5408c',
traceState: undefined,
name: 'pack',
id: '4ca5551f15fda738',
kind: 0,
timestamp: 1760814138397000,
duration: 647.042,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: '9673509ea5b5408c',
traceState: undefined,
name: 'exchange',
id: '6f979c6dd0c35955',
kind: 0,
timestamp: 1760814138398000,
duration: 14195.083,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: '9673509ea5b5408c',
traceState: undefined,
name: 'unpack',
id: '49e845ed15af5719',
kind: 0,
timestamp: 1760814138413000,
duration: 748.5,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: '9673509ea5b5408c',
traceState: undefined,
name: 'decode',
id: '2288bafdda2e7fda',
kind: 0,
timestamp: 1760814138414000,
duration: 339.042,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
resource: {
attributes: {
'service.name': 'unknown_service:/Users/jasonkuhrt/Library/pnpm/nodejs/22.20.0/bin/node',
'telemetry.sdk.language': 'nodejs',
'telemetry.sdk.name': 'opentelemetry',
'telemetry.sdk.version': '1.30.1'
}
},
instrumentationScope: { name: 'graffle', version: undefined, schemaUrl: undefined },
traceId: '7daf5e9c4f7c872e1430804de9737f64',
parentId: undefined,
traceState: undefined,
name: 'request',
id: '9673509ea5b5408c',
kind: 0,
timestamp: 1760814138396000,
duration: 18339.166,
attributes: {},
status: { code: 0 },
events: [],
links: []
}txt
{
pokemons: [
{ name: 'Pikachu' },
{ name: 'Charizard' },
{ name: 'Squirtle' },
{ name: 'Bulbasaur' },
{ name: 'Caterpie' },
{ name: 'Weedle' },
{ name: 'Mew' }
]
}