48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
const http = require('http');
|
|
const app = require('./app');
|
|
const db = require('./config/db');
|
|
const config = require('./config');
|
|
const { startSchedulers, stopSchedulers } = require('./schedulers');
|
|
|
|
const server = http.createServer(app);
|
|
|
|
// start server
|
|
server.listen(config.port, () => {
|
|
console.log(`[SERVER] Listening on :${config.port}`);
|
|
if (config.cronEnabled) {
|
|
startSchedulers().catch(err => {
|
|
console.error('[CRON] Failed to start schedulers:', err);
|
|
});
|
|
} else {
|
|
console.log('[CRON] Disabled by config (CRON_ENABLED=false)');
|
|
}
|
|
});
|
|
|
|
// graceful shutdown
|
|
const shutdown = async (signal) => {
|
|
console.log(`[SERVER] ${signal} received. Shutting down...`);
|
|
try {
|
|
await stopSchedulers();
|
|
server.close(err => {
|
|
if (err) {
|
|
console.error('[SERVER] Close error:', err);
|
|
process.exit(1);
|
|
}
|
|
if (db && db.end) {
|
|
try { db.end(); } catch (e) { /* ignore */ }
|
|
}
|
|
console.log('[SERVER] Bye.');
|
|
process.exit(0);
|
|
});
|
|
// hard timeout
|
|
setTimeout(() => process.exit(0), 10000).unref();
|
|
} catch (e) {
|
|
console.error('[SERVER] Shutdown error:', e);
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
['SIGINT','SIGTERM'].forEach(sig => process.on(sig, () => shutdown(sig)));
|
|
|
|
module.exports = server;
|