initial shutdown functionality

This commit is contained in:
Bojan Kucera 2025-06-07 10:13:41 -04:00
parent 0f510bfa33
commit 8d0da5cf5c
4 changed files with 315 additions and 4 deletions

View file

@ -1,5 +1,5 @@
import { proxyService, ProxySource } from './services/proxy.service.js';
import { getLogger } from '@stock-bot/logger';
import { getLogger, onShutdown, setShutdownTimeout } from '@stock-bot/logger';
// Initialize logger for the demo
const logger = getLogger('proxy-demo');
@ -120,14 +120,60 @@ export {
demonstrateCustomProxySource
};
// Execute the demo with enhanced logging
// Execute the demo with enhanced logging and graceful shutdown
logger.info('🚀 Starting enhanced proxy demo...');
// Configure graceful shutdown
setShutdownTimeout(15000); // 15 seconds shutdown timeout
// Register shutdown handlers
onShutdown(async () => {
logger.info('🔧 Cleaning up proxy service...');
try {
// Clean up proxy service resources if needed
// await proxyService.shutdown();
logger.info('✅ Proxy service cleanup completed');
} catch (error) {
logger.error('❌ Proxy service cleanup failed', { error });
}
});
onShutdown(async () => {
logger.info('🔧 Performing final cleanup...');
// Any additional cleanup can go here
await new Promise(resolve => setTimeout(resolve, 1000)); // Simulate cleanup work
logger.info('✅ Final cleanup completed');
});
// Demonstrate graceful shutdown by setting up a timer to shutdown after demo
const shutdownTimer = setTimeout(() => {
logger.info('⏰ Demo timeout reached, initiating graceful shutdown...');
process.kill(process.pid, 'SIGTERM');
}, 20000); // Shutdown after 20 seconds
// Clear timer if demo completes early
const clearShutdownTimer = () => {
clearTimeout(shutdownTimer);
logger.info('⏰ Demo completed, canceling automatic shutdown timer');
};
demonstrateCustomProxySource()
.then(() => {
logger.info('🎉 Proxy demo completed successfully!');
clearShutdownTimer();
// Demonstrate manual shutdown after a short delay
setTimeout(() => {
logger.info('🔄 Demonstrating manual graceful shutdown in 3 seconds...');
setTimeout(() => {
process.kill(process.pid, 'SIGTERM');
}, 3000);
}, 2000);
})
.catch((error) => {
logger.error('💥 Proxy demo failed', error);
logger.error('💥 Proxy demo failed', { error });
clearShutdownTimer();
setTimeout(() => process.exit(1), 1000);
});
// If this file is run directly, execute the demo