Skip to content

Commit c7e3811

Browse files
authored
fix(webapp): correctly associate event-loop-blocked spans with parent span context (#2435)
1 parent bf2120d commit c7e3811

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

apps/webapp/app/env.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,8 @@ const EnvironmentSchema = z.object({
10601060

10611061
// AI Run Filter
10621062
AI_RUN_FILTER_MODEL: z.string().optional(),
1063+
1064+
EVENT_LOOP_MONITOR_THRESHOLD_MS: z.coerce.number().int().default(100),
10631065
});
10641066

10651067
export type Environment = z.infer<typeof EnvironmentSchema>;

apps/webapp/app/eventLoopMonitor.server.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { createHook } from "node:async_hooks";
22
import { singleton } from "./utils/singleton";
33
import { 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

911
function 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

Comments
 (0)