Files
fullstack-starter/src/server/plugins/shutdown.ts
T

31 lines
832 B
TypeScript

import { closeBatteryPool } from '@/server/battery/mysql'
import { getLogger } from '@/server/logger'
export default () => {
if (import.meta.dev) return
const logger = getLogger(['shutdown'])
let exiting = false
const shutdown = async (signal: NodeJS.Signals) => {
if (exiting) {
logger.warn('Forcing exit on repeated signal', { signal })
process.exit(0)
}
exiting = true
logger.info('Draining for shutdown', { signal, graceMs: 500 })
await Bun.sleep(500)
try {
await closeBatteryPool()
logger.info('Battery MySQL pool closed, exiting')
} catch (error) {
logger.error('DB pool close failed during shutdown', { error })
}
process.exit(0)
}
process.on('SIGINT', () => void shutdown('SIGINT'))
process.on('SIGTERM', () => void shutdown('SIGTERM'))
}