UNPKG

@multiplayer-app/otlp-core

Version:

Multiplayer otlp core

55 lines (50 loc) 1.5 kB
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base' /** * Trace Exporters for Web */ export class MultiplayerPostMessageExporter implements SpanExporter { private readonly targetWindow: Window private readonly targetOrigin: string private readonly type: string constructor({ targetWindow = window, targetOrigin = '*', type = 'MULTIPLAYER_SPANS', }: { targetWindow?: Window; targetOrigin?: string; type?: string } = {}) { this.targetWindow = targetWindow this.targetOrigin = targetOrigin this.type = type } export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void { try { this.targetWindow.postMessage( { type: this.type, payload: spans.map(span => this._serializeSpan(span)), }, this.targetOrigin, ) resultCallback({ code: 0 }) } catch (e) { console.error('[PostMessageExporter] export failed:', e) resultCallback({ code: 1 }) } } shutdown(): Promise<void> { return Promise.resolve() } private _serializeSpan(span: ReadableSpan): any { return { traceId: span.spanContext().traceId, spanId: span.spanContext().spanId, parentSpanId: span.parentSpanId, name: span.name, startTime: span.startTime, endTime: span.endTime, attributes: span.attributes, events: span.events, status: span.status, resource: span.resource.attributes, } } }