97 lines
2.4 KiB
TypeScript
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
|