import { Router, Request, Response } from 'express'; import { DockerManager } from '../services/dockerManager.js'; import { logger } from '../utils/logger.js'; const router = Router(); const dockerManager = new DockerManager(); // Get overall server status router.get('/', async (req: Request, res: Response) => { try { const [gameServers, systemStats, runningContainers] = await Promise.all([ dockerManager.listGameServers(), dockerManager.getSystemStats(), dockerManager.getRunningContainers() ]); const activePorts = new Set(); runningContainers.forEach((container: any) => { if (container.Ports) { container.Ports.forEach((port: any) => { if (port.PublicPort) { activePorts.add(port.PublicPort); } }); } }); res.json({ timestamp: new Date().toISOString(), status: 'operational', gameServers: { available: gameServers.available, running: gameServers.running.length, runningServers: gameServers.running }, activePorts: Array.from(activePorts).sort(), systemStats, containers: { total: runningContainers.length, running: runningContainers.filter((c: any) => c.State === 'running').length } }); } catch (error) { logger.error('Error getting server status:', error); res.status(500).json({ error: 'Failed to get server status' }); } }); // Get active ports and services router.get('/ports', async (req: Request, res: Response) => { try { const containers = await dockerManager.getRunningContainers(); const portMappings: { [key: number]: string } = {}; containers.forEach((container: any) => { if (container.Ports && container.State === 'running') { container.Ports.forEach((port: any) => { if (port.PublicPort) { const serviceName = container.Labels?.['game-server'] || container.Names[0]?.replace('/', '') || 'unknown'; portMappings[port.PublicPort] = serviceName; } }); } }); res.json({ activePorts: portMappings, totalPorts: Object.keys(portMappings).length }); } catch (error) { logger.error('Error getting port information:', error); res.status(500).json({ error: 'Failed to get port information' }); } }); export { router as statusRouter };