@@ -3,35 +3,26 @@ import type { Instrumentation } from '@opentelemetry/instrumentation'
33import { GET_TRACER , SHUTDOWN_TRACERS } from '../constants.js'
44
55export interface TracerProviderOptions {
6- /**
7- * The request headers (checked for presence of the `x-nf-enable-tracing` header)
8- */
9- headers : Headers
106 serviceName : string
117 serviceVersion : string
128 deploymentEnvironment : string
139 siteUrl : string
1410 siteId : string
1511 siteName : string
1612 instrumentations ?: ( Instrumentation | Promise < Instrumentation > ) [ ]
17- extraSpanProcessors ?: ( SpanProcessor | Promise < SpanProcessor > ) [ ]
13+ spanProcessors ?: ( SpanProcessor | Promise < SpanProcessor > ) [ ]
1814}
1915
2016export const createTracerProvider = async ( options : TracerProviderOptions ) => {
21- if ( ! options . headers . has ( 'x-nf-enable-tracing' ) ) {
22- return
23- }
2417 const { version : nodeVersion } = await import ( 'node:process' )
18+
2519 // remove the v prefix from the version to match the spec
2620 const runtimeVersion = nodeVersion . slice ( 1 )
2721
2822 const { Resource } = await import ( '@opentelemetry/resources' )
29- const { NodeTracerProvider, SimpleSpanProcessor } = await import ( '@opentelemetry/sdk-trace-node' )
30-
23+ const { NodeTracerProvider } = await import ( '@opentelemetry/sdk-trace-node' )
3124 const { registerInstrumentations } = await import ( '@opentelemetry/instrumentation' )
3225
33- const { NetlifySpanExporter } = await import ( '../exporters/netlify.js' )
34-
3526 const resource = new Resource ( {
3627 'service.name' : options . serviceName ,
3728 'service.version' : options . serviceVersion ,
@@ -43,12 +34,11 @@ export const createTracerProvider = async (options: TracerProviderOptions) => {
4334 'netlify.site.name' : options . siteName ,
4435 } )
4536
37+ const spanProcessors = await Promise . all ( options . spanProcessors ?? [ await getBaseSpanProcessor ( ) ] )
38+
4639 const nodeTracerProvider = new NodeTracerProvider ( {
4740 resource,
48- spanProcessors : [
49- new SimpleSpanProcessor ( new NetlifySpanExporter ( ) ) ,
50- ...( await Promise . all ( options . extraSpanProcessors ?? [ ] ) ) ,
51- ] ,
41+ spanProcessors,
5242 } )
5343
5444 nodeTracerProvider . register ( )
@@ -86,3 +76,10 @@ export const createTracerProvider = async (options: TracerProviderOptions) => {
8676 } ,
8777 } )
8878}
79+
80+ export const getBaseSpanProcessor = async ( ) : Promise < SpanProcessor > => {
81+ const { SimpleSpanProcessor } = await import ( '@opentelemetry/sdk-trace-node' )
82+ const { NetlifySpanExporter } = await import ( '../exporters/netlify.js' )
83+
84+ return new SimpleSpanProcessor ( new NetlifySpanExporter ( ) )
85+ }
0 commit comments