feat: add admin operations suite
Local Build and Deploy / deploy (push) Successful in 50s

This commit is contained in:
Simo committed 2026-07-12 20:11:28 +02:00
1 parent 21a61068fb
commit 60278b9e71
38 files changed
+3452

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
import net from 'node:net'
import { NextResponse } from 'next/server'
import { env } from '@/env'
import { withAdmin } from '@/lib/api-handler'
import { PERMS } from '@/lib/permissions'
import { prisma } from '@/lib/prisma'
function checkRcon(): Promise<boolean> {
return new Promise((resolve) => {
const host = env.RCON_HOST
const port = env.RCON_PORT
const socket = new net.Socket()
const timeout = setTimeout(() => {
socket.destroy()
resolve(false)
}, 3000)
socket.connect(port, host, () => {
clearTimeout(timeout)
socket.destroy()
resolve(true)
})
socket.on('error', () => {
clearTimeout(timeout)
socket.destroy()
resolve(false)
})
})
}
export const GET = withAdmin({ permission: PERMS.DEVOPS_VIEW }, async () => {
// DB health
let dbOk = false
let dbLatency = 0
try {
const start = Date.now()
await prisma.$queryRaw`SELECT 1`
dbLatency = Date.now() - start
dbOk = true
} catch {
dbOk = false
}
// Emulator health (RCON TCP check)
const emulator = await checkRcon()
// Online users
const onlineUsers = await prisma.user.count({ where: { online: '1' } })
return NextResponse.json({
database: dbOk,
dbLatency,
emulator,
onlineUsers,
timestamp: new Date().toISOString(),
})
})