brf/server/routes/api/process.ts
2025-12-18 07:31:37 +01:00

97 lines
2.4 KiB
TypeScript

import process from 'node:process'
import os from 'node:os'
import env from '../../env.ts'
import { Type, type FastifyPluginCallbackTypebox } from '@fastify/type-provider-typebox'
const ProcessSchema = Type.Object({
env: Type.String(),
version: Type.String(),
uptime: Type.Number(),
memoryUsage: Type.Object({
rss: Type.Number(),
heapTotal: Type.Number(),
heapUsed: Type.Number(),
external: Type.Number(),
arrayBuffers: Type.Number(),
}),
resourceUsage: Type.Object({
userCPUTime: Type.Number(),
systemCPUTime: Type.Number(),
maxRSS: Type.Number(),
sharedMemorySize: Type.Number(),
unsharedDataSize: Type.Number(),
unsharedStackSize: Type.Number(),
minorPageFault: Type.Number(),
majorPageFault: Type.Number(),
swappedOut: Type.Number(),
fsRead: Type.Number(),
fsWrite: Type.Number(),
ipcSent: Type.Number(),
ipcReceived: Type.Number(),
signalsCount: Type.Number(),
voluntaryContextSwitches: Type.Number(),
involuntaryContextSwitches: Type.Number(),
}),
})
const OSSchema = Type.Object({
freemem: Type.Number(),
totalmem: Type.Number(),
arch: Type.String(),
homedir: Type.String(),
hostname: Type.String(),
loadavg: Type.Array(Type.Number()),
machine: Type.String(),
platform: Type.String(),
release: Type.String(),
type: Type.String(),
uptime: Type.Number(),
version: Type.String(),
})
const processPlugin: FastifyPluginCallbackTypebox = (fastify, _options, done) => {
fastify.addHook('onRequest', fastify.auth)
fastify.route({
method: 'GET',
url: '/',
schema: {
response: {
200: Type.Object({
process: ProcessSchema,
os: OSSchema,
}),
},
},
handler() {
return {
process: {
env: env.NODE_ENV,
version: process.version,
uptime: process.uptime(),
memoryUsage: process.memoryUsage(),
resourceUsage: process.resourceUsage(),
},
os: {
freemem: os.freemem(),
totalmem: os.totalmem(),
arch: os.arch(),
homedir: os.homedir(),
hostname: os.hostname(),
loadavg: os.loadavg(),
machine: os.machine(),
platform: os.platform(),
release: os.release(),
type: os.type(),
uptime: os.uptime(),
version: os.version(),
},
}
},
})
done()
}
export default processPlugin