← Back
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'));

📜 Git History

06783dafix: options-screener-v2 — 9 bug fixes, 5 strategy improvements, 2 infra enhancements3 months ago
163bb5dfeat: migrate to options-screener-v2 folder to isolate deployment4 months ago
Show last diff
Loading...