-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathworker.js
More file actions
56 lines (45 loc) · 1.81 KB
/
worker.js
File metadata and controls
56 lines (45 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const { Worker } = require('bullmq');
const { connection } = require('./lib/queues');
const fetch = require('node-fetch');
// Equipment Logic Worker
const equipmentWorker = new Worker('equipment-logic', async job => {
try {
console.log(`Processing job ${job.id}: Equipment ${job.data.equipmentId}`);
// Use the API endpoint to process the equipment
const equipmentId = job.data.equipmentId;
const appUrl = process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000";
const secretKey = process.env.SERVER_ACTION_SECRET_KEY || "yoursecretkey";
console.log(`Calling API to process equipment ${equipmentId}`);
const response = await fetch(`${appUrl}/api/cron-run-logic?secretKey=${secretKey}&equipmentId=${equipmentId}`, {
method: 'GET'
});
if (!response.ok) {
throw new Error(`API call failed: ${response.status} ${response.statusText}`);
}
const result = await response.json();
console.log(`Equipment ${equipmentId} processed with result:`,
result.success ? 'SUCCESS' : 'FAILURE');
return result;
} catch (error) {
console.error(`Error processing equipment ${job.data.equipmentId}:`, error);
throw error; // This will trigger a retry based on the queue settings
}
}, {
connection,
// Set concurrency to process multiple jobs simultaneously
concurrency: 5
});
// Handle worker events
equipmentWorker.on('completed', job => {
console.log(`Job ${job.id} completed successfully`);
});
equipmentWorker.on('failed', (job, error) => {
console.error(`Job ${job?.id} failed with error:`, error);
});
// Graceful shutdown
process.on('SIGTERM', async () => {
console.log('Worker shutting down...');
await equipmentWorker.close();
process.exit(0);
});
console.log('Equipment logic worker started and waiting for jobs...');