@@ -2,53 +2,67 @@ import {OTLPTraceExporter} from '@opentelemetry/exporter-trace-otlp-http'
22import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'
33import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
44import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request'
5- import { resource , serverResource } from "@core/util/open-telemetry"
5+ import { buildClientResource , ClientOtelConfig , serverResource } from "@core/util/open-telemetry"
66import { registerInstrumentations } from '@opentelemetry/instrumentation'
77import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch'
88import { ZoneContextManager } from '@opentelemetry/context-zone'
9+ import { trace } from "@opentelemetry/api"
910import { parseHeaders } from "@core/util/headers" ;
1011
1112export const openTelemetryServerTracesReader = process . env . OTEL_TRACES_ENDPOINT ? new OTLPTraceExporter ( {
1213 url : process . env . OTEL_TRACES_ENDPOINT ,
1314 headers : parseHeaders ( process . env . OTEL_HEADER ) ,
1415} ) : undefined
1516
16- export const openTelemetryClientTracesReader = process . env . NEXT_PUBLIC_OTEL_TRACES_ENDPOINT ? new OTLPTraceExporter ( {
17- url : process . env . NEXT_PUBLIC_OTEL_TRACES_ENDPOINT || "" ,
18- headers : parseHeaders ( process . env . NEXT_PUBLIC_OTEL_HEADER ) ,
19- } ) : undefined
20-
2117export const openTelemetryServerTracesProvider = openTelemetryServerTracesReader ? new WebTracerProvider ( {
2218 resource : serverResource ,
2319 spanProcessors : [ new BatchSpanProcessor ( openTelemetryServerTracesReader ) ] ,
2420} ) : undefined
2521
26- export const openTelemetryClientTracesProvider = openTelemetryClientTracesReader ? new WebTracerProvider ( {
27- resource : resource ,
28- spanProcessors : [ new BatchSpanProcessor ( openTelemetryClientTracesReader ) ] ,
29- } ) : undefined
30-
31- export default ( level : 'server' | "client" = "server" ) => {
22+ export default ( ) => {
3223
33- if ( level === 'server' && openTelemetryServerTracesProvider ) {
24+ if ( openTelemetryServerTracesProvider ) {
3425 openTelemetryServerTracesProvider . register ( {
3526 contextManager : new ZoneContextManager ( ) ,
3627 } )
37- } else if ( level === 'client' && openTelemetryClientTracesProvider ) {
38- openTelemetryClientTracesProvider . register ( {
39- contextManager : new ZoneContextManager ( ) ,
40- } )
41-
42- registerInstrumentations ( {
43- instrumentations : [
44- new FetchInstrumentation ( {
45- propagateTraceHeaderCorsUrls : / .* / ,
46- } ) ,
47- new XMLHttpRequestInstrumentation ( {
48- propagateTraceHeaderCorsUrls : / .* / ,
49- } ) ,
50- ] ,
51- } )
5228 }
29+ }
30+
31+ /**
32+ * Builds and registers the browser trace provider from runtime configuration.
33+ * Returns the provider so the caller can install it as the global tracer
34+ * provider, or undefined when tracing is not configured.
35+ */
36+ export const initializeClientTraces = ( config : ClientOtelConfig ) => {
37+
38+ if ( ! config . tracesEndpoint ) return undefined
39+
40+ const exporter = new OTLPTraceExporter ( {
41+ url : config . tracesEndpoint ,
42+ headers : parseHeaders ( config . header ?? undefined ) ,
43+ } )
44+
45+ const provider = new WebTracerProvider ( {
46+ resource : buildClientResource ( config ) ,
47+ spanProcessors : [ new BatchSpanProcessor ( exporter ) ] ,
48+ } )
49+
50+ provider . register ( {
51+ contextManager : new ZoneContextManager ( ) ,
52+ } )
53+
54+ registerInstrumentations ( {
55+ instrumentations : [
56+ new FetchInstrumentation ( {
57+ propagateTraceHeaderCorsUrls : / .* / ,
58+ } ) ,
59+ new XMLHttpRequestInstrumentation ( {
60+ propagateTraceHeaderCorsUrls : / .* / ,
61+ } ) ,
62+ ] ,
63+ } )
64+
65+ trace . setGlobalTracerProvider ( provider )
5366
54- }
67+ return provider
68+ }
0 commit comments