(signal: string)
| 86 | let receivedSignal = false; |
| 87 | |
| 88 | const cleanup = async (signal: string) => { |
| 89 | try { |
| 90 | if (receivedSignal) { |
| 91 | return; |
| 92 | } |
| 93 | receivedSignal = true; |
| 94 | |
| 95 | logger.info(`Received ${signal}, cleaning up...`); |
| 96 | |
| 97 | await repoIndexManager.dispose() |
| 98 | await connectionManager.dispose() |
| 99 | await repoPermissionSyncer.dispose() |
| 100 | await accountPermissionSyncer.dispose() |
| 101 | await auditLogPruner.dispose() |
| 102 | await configManager.dispose() |
| 103 | |
| 104 | await prisma.$disconnect(); |
| 105 | await redis.quit(); |
| 106 | await api.dispose(); |
| 107 | await shutdownPosthog(); |
| 108 | |
| 109 | logger.info('All workers shut down gracefully'); |
| 110 | signals.forEach(sig => process.removeListener(sig, cleanup)); |
| 111 | return 0; |
| 112 | } catch (error) { |
| 113 | Sentry.captureException(error); |
| 114 | logger.error('Error shutting down worker:', error); |
| 115 | return 1; |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | signals.forEach(signal => { |
| 120 | process.on(signal, (err) => { |
no test coverage detected