โ† ะะฐะทะฐะด
const config = require('./config'); const { app, server } = require('./app'); const scheduler = require('./services/scheduler'); const db = require('./services/db'); const logger = require('./utils/logger'); scheduler.start(); server.listen(config.port, '0.0.0.0', () => { logger.info(`Server running on port ${config.port}`); logger.info(`WebSocket server ready on ws://0.0.0.0:${config.port}`); }); // โ”€โ”€ Graceful Shutdown โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ function gracefulShutdown(signal) { logger.info(`${signal} received. Shutting down gracefully...`); server.close(() => { logger.info('HTTP server closed.'); db.$disconnect() .then(() => { logger.info('Database connection closed.'); process.exit(0); }) .catch(err => { logger.error(`DB disconnect error: ${err.message}`); process.exit(1); }); }); // Force shutdown after 10s if graceful fails setTimeout(() => { logger.error('Forced shutdown after timeout.'); process.exit(1); }, 10000); } process.on('SIGTERM', () => gracefulShutdown('SIGTERM')); process.on('SIGINT', () => gracefulShutdown('SIGINT'));