31 lines
832 B
TypeScript
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'))
|
|
}
|