|
| 1 | +import { Queue } from './queue' |
| 2 | +import { logger, logSchema } from './monitoring' |
| 3 | +import adminApp from './admin-app' |
| 4 | +import { getConfig } from './config' |
| 5 | + |
| 6 | +export async function main() { |
| 7 | + const { requestTraceHeader, adminPort, host } = getConfig() |
| 8 | + |
| 9 | + logger.info('[Queue] Starting Queue Worker') |
| 10 | + const queue = await Queue.init() |
| 11 | + |
| 12 | + const server = adminApp({ |
| 13 | + logger, |
| 14 | + disableRequestLogging: true, |
| 15 | + requestIdHeader: requestTraceHeader, |
| 16 | + }) |
| 17 | + |
| 18 | + process.on('SIGTERM', async () => { |
| 19 | + logger.info('[Worker] Stopping') |
| 20 | + await server.close() |
| 21 | + await Queue.stop() |
| 22 | + }) |
| 23 | + |
| 24 | + await server.listen({ port: adminPort, host }) |
| 25 | + |
| 26 | + return new Promise<void>((resolve, reject) => { |
| 27 | + queue.on('error', (err) => { |
| 28 | + logger.info('[Queue] Error', err) |
| 29 | + reject(err) |
| 30 | + }) |
| 31 | + |
| 32 | + queue.on('stopped', () => { |
| 33 | + logger.info('[Queue] Stopping') |
| 34 | + resolve() |
| 35 | + }) |
| 36 | + }) |
| 37 | +} |
| 38 | + |
| 39 | +process.on('uncaughtException', (e) => { |
| 40 | + logSchema.error(logger, 'uncaught exception', { |
| 41 | + type: 'uncaughtException', |
| 42 | + error: e, |
| 43 | + }) |
| 44 | + logger.flush() |
| 45 | + process.exit(1) |
| 46 | +}) |
| 47 | + |
| 48 | +main() |
| 49 | + .then(() => { |
| 50 | + logger.info('[Queue] Worker Exited Successfully') |
| 51 | + }) |
| 52 | + .catch(() => { |
| 53 | + process.exit(1) |
| 54 | + }) |
0 commit comments