initial shutdown functionality
This commit is contained in:
parent
0f510bfa33
commit
8d0da5cf5c
4 changed files with 315 additions and 4 deletions
54
apps/data-service/src/graceful-shutdown-test.ts
Normal file
54
apps/data-service/src/graceful-shutdown-test.ts
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import { getLogger, onShutdown, setShutdownTimeout, initiateShutdown } from '@stock-bot/logger';
|
||||
|
||||
const logger = getLogger('shutdown-test');
|
||||
|
||||
logger.info('🚀 Starting graceful shutdown test...');
|
||||
|
||||
// Configure shutdown
|
||||
setShutdownTimeout(10000); // 10 seconds
|
||||
|
||||
// Register multiple shutdown handlers
|
||||
onShutdown(async () => {
|
||||
logger.info('🔧 Shutdown handler 1: Cleaning up resources...');
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
logger.info('✅ Shutdown handler 1 completed');
|
||||
});
|
||||
|
||||
onShutdown(async () => {
|
||||
logger.info('🔧 Shutdown handler 2: Closing connections...');
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
logger.info('✅ Shutdown handler 2 completed');
|
||||
});
|
||||
|
||||
onShutdown(() => {
|
||||
logger.info('🔧 Shutdown handler 3: Final cleanup (sync)');
|
||||
logger.info('✅ Shutdown handler 3 completed');
|
||||
});
|
||||
|
||||
// Simulate some work
|
||||
let counter = 0;
|
||||
const workInterval = setInterval(() => {
|
||||
counter++;
|
||||
logger.info(`🔄 Working... ${counter}`);
|
||||
|
||||
if (counter >= 5) {
|
||||
logger.info('🎯 Work completed, triggering graceful shutdown in 2 seconds...');
|
||||
setTimeout(async () => {
|
||||
logger.info('📡 Initiating manual graceful shutdown...');
|
||||
try {
|
||||
await initiateShutdown();
|
||||
} catch (error) {
|
||||
logger.error('Manual shutdown failed', { error });
|
||||
process.exit(1);
|
||||
}
|
||||
}, 2000);
|
||||
clearInterval(workInterval);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
// Log process info
|
||||
logger.info('📊 Process info', {
|
||||
pid: process.pid,
|
||||
platform: process.platform,
|
||||
node: process.version
|
||||
});
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue