43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
import { Router } from 'express'
|
|
import { prisma } from '../db.js'
|
|
import { authRequired } from '../middleware.js'
|
|
|
|
const router = Router()
|
|
router.use(authRequired)
|
|
|
|
// 服务器节点列表: 元数据 + 最新快照
|
|
router.get('/servers', async (_req, res, next) => {
|
|
try {
|
|
const rows = await prisma.serverNode.findMany({
|
|
orderBy: { name: 'asc' },
|
|
})
|
|
res.json({ items: rows })
|
|
} catch (e) { next(e) }
|
|
})
|
|
|
|
// 节点时序: ?uuid=...&hours=24
|
|
router.get('/servers/:uuid/history', async (req, res, next) => {
|
|
try {
|
|
const hours = Math.min(Math.max(Number(req.query.hours) || 24, 1), 168)
|
|
const since = new Date(Date.now() - hours * 3600 * 1000)
|
|
const rows = await prisma.serverNodeHistory.findMany({
|
|
where: { uuid: req.params.uuid, period: { gte: since } },
|
|
orderBy: { period: 'asc' },
|
|
take: 2000,
|
|
})
|
|
res.json({ items: rows })
|
|
} catch (e) { next(e) }
|
|
})
|
|
|
|
// 服务健康列表
|
|
router.get('/services', async (_req, res, next) => {
|
|
try {
|
|
const rows = await prisma.serviceCheck.findMany({
|
|
orderBy: { name: 'asc' },
|
|
})
|
|
res.json({ items: rows })
|
|
} catch (e) { next(e) }
|
|
})
|
|
|
|
export default router
|