Files
guanwang/server/api/health.get.ts

22 lines
1001 B
TypeScript

import { accessSync, constants, mkdirSync, statfsSync } from 'node:fs'
import { dirname, resolve } from 'node:path'
export default defineEventHandler(() => {
const config = useRuntimeConfig()
useDatabase().prepare('SELECT 1').get()
const databaseDirectory = dirname(resolve(process.cwd(), config.databasePath))
const uploadsDirectory = resolve(process.cwd(), 'data', 'uploads')
mkdirSync(uploadsDirectory, { recursive: true })
accessSync(databaseDirectory, constants.R_OK | constants.W_OK)
accessSync(uploadsDirectory, constants.R_OK | constants.W_OK)
const disk = statfsSync(resolve(process.cwd(), 'data'))
const freeBytes = Number(disk.bavail) * Number(disk.bsize)
if (freeBytes < 256 * 1024 * 1024) throw createError({ statusCode: 503, statusMessage: '可用磁盘空间不足' })
return {
status: 'ok',
timestamp: new Date().toISOString(),
version: process.env.APP_VERSION || 'development',
checks: { database: 'ok', uploads: 'writable', freeBytes },
}
})