Skip to content

Commit 4c57c6a

Browse files
author
Shaurya Singh
committed
fix: embed workers in server process to process queued jobs
1 parent 7ae02af commit 4c57c6a

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

src/queue/worker.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,25 @@ exportWorker.on('failed', (job, err) => {
5959
console.error(`❌ Export ${job?.id} failed:`, err.message);
6060
});
6161

62-
// Graceful shutdown
63-
process.on('SIGTERM', async () => {
64-
console.log('SIGTERM received, closing workers...');
65-
await analysisWorker.close();
66-
await exportWorker.close();
67-
process.exit(0);
68-
});
69-
70-
process.on('SIGINT', async () => {
71-
console.log('SIGINT received, closing workers...');
72-
await analysisWorker.close();
73-
await exportWorker.close();
74-
process.exit(0);
75-
});
76-
77-
// Start workers
62+
// Only add signal handlers when running as standalone worker
7863
if (require.main === module) {
79-
console.log('🚀 Workers started');
64+
console.log('🚀 Workers started (standalone mode)');
8065
console.log(` - Analysis worker (concurrency: ${workerOptions.concurrency})`);
8166
console.log(` - Export worker (concurrency: ${workerOptions.concurrency})`);
67+
68+
process.on('SIGTERM', async () => {
69+
console.log('SIGTERM received, closing workers...');
70+
await analysisWorker.close();
71+
await exportWorker.close();
72+
process.exit(0);
73+
});
74+
75+
process.on('SIGINT', async () => {
76+
console.log('SIGINT received, closing workers...');
77+
await analysisWorker.close();
78+
await exportWorker.close();
79+
process.exit(0);
80+
});
8281
}
8382

8483
export default { analysisWorker, exportWorker };

src/server.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import jobsRoutes from './routes/jobs';
1414
import outputsRoutes from './routes/outputs';
1515
import exportsRoutes from './routes/exports';
1616

17+
// Workers - embedded in same process for simplified deployment
18+
import { analysisWorker, exportWorker } from './queue/worker';
19+
1720
const fastify = Fastify({
1821
logger: config.NODE_ENV === 'development' ? {
1922
transport: {
@@ -116,6 +119,11 @@ async function start() {
116119
║ Docs: See README.md ║
117120
╚═══════════════════════════════════════════════╝
118121
`);
122+
123+
// Log that workers are running
124+
console.log('🔧 Workers embedded in server process:');
125+
console.log(' - Analysis worker: running');
126+
console.log(' - Export worker: running');
119127
} catch (error) {
120128
fastify.log.error(error);
121129
process.exit(1);
@@ -126,8 +134,12 @@ async function start() {
126134
const signals = ['SIGINT', 'SIGTERM'];
127135
signals.forEach((signal) => {
128136
process.on(signal, async () => {
129-
console.log(`\n${signal} received, closing server...`);
130-
await fastify.close();
137+
console.log(`\n${signal} received, closing server and workers...`);
138+
await Promise.all([
139+
fastify.close(),
140+
analysisWorker.close(),
141+
exportWorker.close(),
142+
]);
131143
process.exit(0);
132144
});
133145
});

0 commit comments

Comments
 (0)