Files
system-monitor/backend/api/server/history/containers.get.ts
2025-12-28 16:27:46 +09:00

61 lines
1.3 KiB
TypeScript

import { query } from '../../../utils/db'
export default defineEventHandler(async (event) => {
const queryParams = getQuery(event)
const targetId = queryParams.target_id as string
const period = (queryParams.period as string) || '1h'
if (!targetId) {
throw createError({
statusCode: 400,
message: 'target_id is required'
})
}
const periodMap: Record<string, string> = {
'1h': '1 hour',
'2h': '2 hours',
'3h': '3 hours',
'4h': '4 hours',
'5h': '5 hours',
'6h': '6 hours',
'12h': '12 hours',
'18h': '18 hours',
'24h': '24 hours',
'7d': '7 days',
'30d': '30 days'
}
const interval = periodMap[period] || '1 hour'
let containers: any[] = []
try {
containers = await query(`
SELECT
container_id,
container_name,
container_status,
cpu_percent,
memory_usage,
memory_limit,
memory_percent,
uptime,
network_rx,
network_tx,
collected_at
FROM server_containers
WHERE target_id = $1
AND collected_at::timestamp >= NOW() - INTERVAL '${interval}'
ORDER BY collected_at ASC, container_name ASC
`, [targetId])
} catch (e) {
containers = []
}
return {
target_id: targetId,
period,
data: containers
}
})