11import  {  createHook  }  from  "node:async_hooks" ; 
22import  {  singleton  }  from  "./utils/singleton" ; 
33import  {  tracer  }  from  "./v3/tracer.server" ; 
4+ import  {  env  }  from  "./env.server" ; 
5+ import  {  context ,  Context  }  from  "@opentelemetry/api" ; 
46
5- const  THRESHOLD_NS  =  1e8 ;   // 100ms 
7+ const  THRESHOLD_NS  =  env . EVENT_LOOP_MONITOR_THRESHOLD_MS   *   1e6 ; 
68
7- const  cache  =  new  Map < number ,  {  type : string ;  start ?: [ number ,  number ]  } > ( ) ; 
9+ const  cache  =  new  Map < number ,  {  type : string ;  start ?: [ number ,  number ] ;   parentCtx ?:  Context  } > ( ) ; 
810
911function  init ( asyncId : number ,  type : string ,  triggerAsyncId : number ,  resource : any )  { 
1012  cache . set ( asyncId ,  { 
@@ -26,6 +28,7 @@ function before(asyncId: number) {
2628  cache . set ( asyncId ,  { 
2729    ...cached , 
2830    start : process . hrtime ( ) , 
31+     parentCtx : context . active ( ) , 
2932  } ) ; 
3033} 
3134
@@ -47,13 +50,17 @@ function after(asyncId: number) {
4750  if  ( diffNs  >  THRESHOLD_NS )  { 
4851    const  time  =  diffNs  /  1e6 ;  // in ms 
4952
50-     const  newSpan  =  tracer . startSpan ( "event-loop-blocked" ,  { 
51-       startTime : new  Date ( new  Date ( ) . getTime ( )  -  time ) , 
52-       attributes : { 
53-         asyncType : cached . type , 
54-         label : "EventLoopMonitor" , 
53+     const  newSpan  =  tracer . startSpan ( 
54+       "event-loop-blocked" , 
55+       { 
56+         startTime : new  Date ( new  Date ( ) . getTime ( )  -  time ) , 
57+         attributes : { 
58+           asyncType : cached . type , 
59+           label : "EventLoopMonitor" , 
60+         } , 
5561      } , 
56-     } ) ; 
62+       cached . parentCtx 
63+     ) ; 
5764
5865    newSpan . end ( ) ; 
5966  } 
0 commit comments