Merge pull request #12725 from Budibase/run-js-traces

Add some more spans to the JS runner
This commit is contained in:
Sam Rose 2024-01-08 15:44:48 +00:00 committed by GitHub
commit 84d9a69cdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 26 deletions

View File

@ -12,9 +12,13 @@ export function init() {
const perRequestLimit = env.JS_PER_REQUEST_TIME_LIMIT_MS const perRequestLimit = env.JS_PER_REQUEST_TIME_LIMIT_MS
let track: TrackerFn = f => f() let track: TrackerFn = f => f()
if (perRequestLimit) { if (perRequestLimit) {
tracer.trace<any>("runJS.setupTracker", {}, span => {
const bbCtx = context.getCurrentContext() const bbCtx = context.getCurrentContext()
if (bbCtx) { if (bbCtx) {
if (!bbCtx.jsExecutionTracker) { if (!bbCtx.jsExecutionTracker) {
span?.addTags({
createdExecutionTracker: true,
})
bbCtx.jsExecutionTracker = bbCtx.jsExecutionTracker =
timers.ExecutionTimeTracker.withLimit(perRequestLimit) timers.ExecutionTimeTracker.withLimit(perRequestLimit)
} }
@ -27,22 +31,33 @@ export function init() {
// We call checkLimit() here to prevent paying the cost of creating // We call checkLimit() here to prevent paying the cost of creating
// a new VM context below when we don't need to. // a new VM context below when we don't need to.
bbCtx.jsExecutionTracker.checkLimit() bbCtx.jsExecutionTracker.checkLimit()
track = bbCtx.jsExecutionTracker.track.bind(bbCtx.jsExecutionTracker) track = bbCtx.jsExecutionTracker.track.bind(
bbCtx.jsExecutionTracker
)
} }
})
} }
ctx = { ctx = tracer.trace("runJS.ctxClone", {}, span => {
return {
...ctx, ...ctx,
alert: undefined, alert: undefined,
setInterval: undefined, setInterval: undefined,
setTimeout: undefined, setTimeout: undefined,
} }
})
tracer.trace("runJS.vm.createContext", {}, span => {
vm.createContext(ctx) vm.createContext(ctx)
})
return track(() => return track(() =>
tracer.trace("runJS.vm.runInNewContext", {}, span =>
vm.runInNewContext(js, ctx, { vm.runInNewContext(js, ctx, {
timeout: env.JS_PER_EXECUTION_TIME_LIMIT_MS, timeout: env.JS_PER_EXECUTION_TIME_LIMIT_MS,
}) })
) )
)
}) })
}) })
} }