@@ -20,6 +20,7 @@ import {
2020import  { 
2121  BatchSpanProcessor , 
2222  NodeTracerProvider , 
23+   ReadableSpan , 
2324  SimpleSpanProcessor , 
2425  SpanExporter , 
2526}  from  "@opentelemetry/sdk-trace-node" ; 
@@ -112,6 +113,8 @@ export class TracingSDK {
112113      . merge ( 
113114        new  Resource ( { 
114115          [ SemanticResourceAttributes . CLOUD_PROVIDER ] : "trigger.dev" , 
116+           [ SemanticResourceAttributes . SERVICE_NAME ] :
117+             getEnvVar ( "OTEL_SERVICE_NAME" )  ??  "trigger.dev" , 
115118          [ SemanticInternalAttributes . TRIGGER ] : true , 
116119          [ SemanticInternalAttributes . CLI_VERSION ] : VERSION , 
117120        } ) 
@@ -256,3 +259,49 @@ function setLogLevel(level: TracingDiagnosticLogLevel) {
256259
257260  diag . setLogger ( new  DiagConsoleLogger ( ) ,  diagLogLevel ) ; 
258261} 
262+ 
263+ class  ExternalSpanExporterWrapper  { 
264+   constructor ( 
265+     private  underlyingExporter : SpanExporter , 
266+     private  externalTraceId : string 
267+   )  { } 
268+ 
269+   private  transformSpan ( span : ReadableSpan ) : ReadableSpan  |  undefined  { 
270+     if  ( span . attributes [ SemanticInternalAttributes . SPAN_PARTIAL ] )  { 
271+       // Skip partial spans 
272+       return ; 
273+     } 
274+ 
275+     const  spanContext  =  span . spanContext ( ) ; 
276+ 
277+     return  { 
278+       ...span , 
279+       spanContext : ( )  =>  ( {  ...spanContext ,  traceId : this . externalTraceId  } ) , 
280+       parentSpanId : span . attributes [ SemanticInternalAttributes . SPAN_ATTEMPT ] 
281+         ? undefined 
282+         : span . parentSpanId , 
283+     } ; 
284+   } 
285+ 
286+   export ( spans : any [ ] ,  resultCallback : ( result : any )  =>  void ) : void   { 
287+     try  { 
288+       const  modifiedSpans  =  spans . map ( this . transformSpan . bind ( this ) ) ; 
289+       this . underlyingExporter . export ( 
290+         modifiedSpans . filter ( Boolean )  as  ReadableSpan [ ] , 
291+         resultCallback 
292+       ) ; 
293+     }  catch  ( e )  { 
294+       console . error ( e ) ; 
295+     } 
296+   } 
297+ 
298+   shutdown ( ) : Promise < void >  { 
299+     return  this . underlyingExporter . shutdown ( ) ; 
300+   } 
301+ 
302+   forceFlush ?( ) : Promise < void >  { 
303+     return  this . underlyingExporter . forceFlush 
304+       ? this . underlyingExporter . forceFlush ( ) 
305+       : Promise . resolve ( ) ; 
306+   } 
307+ } 
0 commit comments