Close all tenant DB pools on SIGTERM/SIGINT for clean restarts. Support PM2 cluster invalidate-tenant-cache messages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { app } from './app.js';
|
|
import { env } from './config/env.js';
|
|
import { tenantDb } from './config/database.js';
|
|
import { startSatSyncJob } from './jobs/sat-sync.job.js';
|
|
|
|
const PORT = parseInt(env.PORT, 10);
|
|
|
|
const server = app.listen(PORT, '0.0.0.0', () => {
|
|
console.log(`API Server running on http://0.0.0.0:${PORT}`);
|
|
console.log(`Environment: ${env.NODE_ENV}`);
|
|
|
|
// Iniciar job de sincronización SAT
|
|
if (env.NODE_ENV === 'production') {
|
|
startSatSyncJob();
|
|
}
|
|
});
|
|
|
|
// Graceful shutdown — close all tenant DB pools before exiting
|
|
const gracefulShutdown = async (signal: string) => {
|
|
console.log(`${signal} received. Shutting down gracefully...`);
|
|
server.close(() => {
|
|
console.log('HTTP server closed');
|
|
});
|
|
await tenantDb.shutdown();
|
|
process.exit(0);
|
|
};
|
|
|
|
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
|
|
process.on('SIGINT', () => gracefulShutdown('SIGINT'));
|
|
|
|
// PM2 cluster: cross-worker cache invalidation
|
|
process.on('message', (msg: any) => {
|
|
if (msg?.type === 'invalidate-tenant-cache' && msg.tenantId) {
|
|
tenantDb.invalidatePool(msg.tenantId);
|
|
}
|
|
});
|