platform/pods/server/src/inspector.ts
Andrey Sobolev 6784168b66
UBERF-8052: Allow easy profiling of transactor (#6502)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
2024-09-10 10:44:10 +05:00

39 lines
981 B
TypeScript

import { PlatformError, unknownError } from '@hcengineering/platform'
import * as inspector from 'node:inspector'
let session: inspector.Session | undefined
export function profileStart (): void {
try {
session = new inspector.Session()
session.connect()
session.post('Profiler.enable')
session.post('Profiler.start')
} catch (err) {
console.error(err)
}
}
export async function profileStop (): Promise<string | undefined> {
return await new Promise<string | undefined>((resolve, reject) => {
if (session == null) {
reject(new PlatformError(unknownError('no session started')))
return
}
try {
session.post('Profiler.stop', (err, profile) => {
if (err != null) {
reject(err)
} else {
const json = JSON.stringify(profile.profile)
session?.disconnect()
session = undefined
resolve(json)
}
})
} catch (err) {
reject(err)
}
})
}