/
app.es6
54 lines (47 loc) · 1.44 KB
/
app.es6
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
/* eslint object-property-newline:0 */
import Foreman from './src/foreman'
import SnoozeWorker from './src/workers/snooze'
import SendLaterWorker from './src/workers/send-later'
import SendRemindersWorker from './src/workers/send-reminders'
import {setupMonitoring} from './src/monitoring'
const {DatabaseConnector, Logger} = require('cloud-core')
global.Promise = require('bluebird');
global.Logger = Logger.createLogger('cloud-workers')
let foremans = []
async function start() {
const db = await DatabaseConnector.forShared();
const logger = global.Logger;
logger.info("Starting Cloud Workers")
foremans = [
new Foreman({db, logger,
pluginId: "thread-snooze",
WorkerClass: SnoozeWorker,
}),
new Foreman({db, logger,
pluginId: "send-later",
WorkerClass: SendLaterWorker,
}),
new Foreman({db, logger,
pluginId: "send-reminders",
WorkerClass: SendRemindersWorker,
}),
]
foremans.forEach(f => f.run()) // Don't await
}
let restartTimeout = null;
async function restart() {
global.Logger.warn("Restarting app due to unhandled error")
clearTimeout(restartTimeout);
foremans.forEach(f => f.stop());
restartTimeout = setTimeout(() => {
start();
}, 30 * 1000);
}
const onUnhandledError = (err) => {
restart();
global.Logger.error(err)
}
process.on('uncaughtException', onUnhandledError)
process.on('unhandledRejection', onUnhandledError)
setupMonitoring(global.Logger);
start();