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