Files
system-monitor/backend/api/server/location-stats.get.ts
2025-12-28 17:35:46 +09:00

29 lines
1.0 KiB
TypeScript

import { query } from '../../utils/db'
export default defineEventHandler(async () => {
const stats = await query(`
SELECT
t.physical_location,
COUNT(DISTINCT t.target_id) as server_count,
ROUND(AVG(s.cpu_temp)::numeric, 1) as avg_temp,
ROUND(SUM(n.speed_recv)::numeric, 0) as total_rx,
ROUND(SUM(n.speed_sent)::numeric, 0) as total_tx
FROM server_targets t
LEFT JOIN server_snapshots s ON t.target_id = s.target_id
AND s.collected_at::timestamp >= NOW() - INTERVAL '10 minutes'
LEFT JOIN server_networks n ON t.target_id = n.target_id
AND n.collected_at::timestamp >= NOW() - INTERVAL '10 minutes'
WHERE t.is_active = 1
GROUP BY t.physical_location
ORDER BY t.physical_location
`)
return stats.map((row: any) => ({
location: row.physical_location || '미지정',
serverCount: Number(row.server_count) || 0,
avgTemp: row.avg_temp ? parseFloat(row.avg_temp) : null,
totalRx: Number(row.total_rx) || 0,
totalTx: Number(row.total_tx) || 0
}))
})