@quenetiq/opentelemetry
v1.0.6
Published
W3C Trace Context propagation and OpenTelemetry-compatible tracing for Quenetiq — zero external dependencies
Maintainers
Readme
@quenetiq/opentelemetry
W3C Trace Context propagation and OpenTelemetry-compatible tracing for Quenetiq GraphQL clients — with zero external dependencies.
Installation
npm install @quenetiq/opentelemetryQuick Start
import { createClient } from '@quenetiq/client';
import { MinimalTracer, setTracer, otelMiddleware } from '@quenetiq/opentelemetry';
const tracer = new MinimalTracer({ serviceName: 'my-app' });
setTracer(tracer);
const client = createClient({
endpoint: '/graphql',
middleware: [otelMiddleware()],
});Features
- MinimalTracer — Lightweight OpenTelemetry-compatible tracer with span lifecycle
- otelMiddleware — Capture incoming trace context from
traceparentheaders - otelClientMiddleware — Propagate trace context to outgoing requests
- W3C Trace Context — Full
traceparentheader parsing and formatting - Console exporter — Pretty-printed span output for development
- Angular integration — Provider-based setup with
provideQuenetiqTelemetry()
API
MinimalTracer
const tracer = new MinimalTracer({
serviceName: 'my-app',
exporter: consoleExporter({ prettyPrint: true }),
});
const span = tracer.startSpan('graphql-request');
span.setAttribute('operation', 'getUser');
span.end();otelMiddleware(config?)
Server-side middleware that captures incoming trace context:
const middleware = otelMiddleware({
serviceName: 'api',
propagateHeaders: true,
});otelClientMiddleware(config?)
Client-side middleware that propagates trace context to outgoing requests:
const middleware = otelClientMiddleware({
propagateHeaders: true,
});Trace Context Utilities
import { parseTraceParent, formatTraceParent, generateTraceId, generateSpanId } from '@quenetiq/opentelemetry';
const traceId = generateTraceId();
const spanId = generateSpanId();
const header = formatTraceParent({ traceId, spanId, traceFlags: 1 });
const context = parseTraceParent(header);Angular Integration
import { provideQuenetiq } from '@quenetiq/core';
import { provideQuenetiqTelemetry } from '@quenetiq/opentelemetry/angular';
export const appConfig = {
providers: [
provideHttpClient(),
provideQuenetiq({ endpoint: '/graphql' }),
provideQuenetiqTelemetry({
serviceName: 'my-angular-app',
exporter: 'console',
}),
],
};License
MIT
