98 lines
2.3 KiB
TypeScript
98 lines
2.3 KiB
TypeScript
import process from 'node:process'
|
|
import os from 'node:os'
|
|
import * as z from 'zod'
|
|
import type { FastifyPluginCallbackZod } from 'fastify-type-provider-zod'
|
|
import env from '../../env.ts'
|
|
|
|
const ProcessSchema = z.object({
|
|
env: z.string(),
|
|
version: z.string(),
|
|
uptime: z.number(),
|
|
memoryUsage: z.object({
|
|
rss: z.number(),
|
|
heapTotal: z.number(),
|
|
heapUsed: z.number(),
|
|
external: z.number(),
|
|
arrayBuffers: z.number(),
|
|
}),
|
|
resourceUsage: z.object({
|
|
userCPUTime: z.number(),
|
|
systemCPUTime: z.number(),
|
|
maxRSS: z.number(),
|
|
sharedMemorySize: z.number(),
|
|
unsharedDataSize: z.number(),
|
|
unsharedStackSize: z.number(),
|
|
minorPageFault: z.number(),
|
|
majorPageFault: z.number(),
|
|
swappedOut: z.number(),
|
|
fsRead: z.number(),
|
|
fsWrite: z.number(),
|
|
ipcSent: z.number(),
|
|
ipcReceived: z.number(),
|
|
signalsCount: z.number(),
|
|
voluntaryContextSwitches: z.number(),
|
|
involuntaryContextSwitches: z.number(),
|
|
}),
|
|
})
|
|
|
|
const OSSchema = z.object({
|
|
freemem: z.number(),
|
|
totalmem: z.number(),
|
|
arch: z.string(),
|
|
homedir: z.string(),
|
|
hostname: z.string(),
|
|
loadavg: z.array(z.number()),
|
|
machine: z.string(),
|
|
platform: z.string(),
|
|
release: z.string(),
|
|
type: z.string(),
|
|
uptime: z.number(),
|
|
version: z.string(),
|
|
})
|
|
|
|
const processPlugin: FastifyPluginCallbackZod = (fastify, _options, done) => {
|
|
fastify.addHook('onRequest', fastify.auth)
|
|
|
|
fastify.route({
|
|
method: 'GET',
|
|
url: '/',
|
|
schema: {
|
|
response: {
|
|
200: z.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
|