-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
36 lines (32 loc) · 1.18 KB
/
index.js
File metadata and controls
36 lines (32 loc) · 1.18 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
const express = require('express');
const app = express();
const cron = require('node-cron');
const config = require('config');
const PhantomWorker = require('./src/PhantomWorker');
const Randomizer = require('./src/Randomizer');
const workers = config.get('workers');
const logger = require('./src/Logger');
logger.info('Running...');
workers.forEach(({ tasks }, i) => {
const num = i + 1;
tasks.forEach((task) => {
logger.info(`[Worker #${num}]`, `task: ${task.name}, cron: ${task.schedule}, p: ${task.probability || 100}%`);
cron.schedule(task.schedule, async () => {
try {
const phantomWorker = new PhantomWorker(num);
const randomizer = new Randomizer();
logger.info(`[Worker #${num}]`, task.name);
const shouldBeInvoked = randomizer.getProbabilityResult(task.probability);
if (shouldBeInvoked) {
await phantomWorker.resolveTask(task.name)
} else {
logger.info(`[Worker #${num}] omitted`);
}
} catch (error) {
logger.error(error);
}
});
})
})
app.get('/', (_req, res) => res.send(workers.map(x => ({ ...x, authentication: undefined }))));
app.listen(process.env.PORT || 3000);