/
worker.ts
112 lines (103 loc) · 3.04 KB
/
worker.ts
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import { allJobs } from './tasks/allJobs'
import { makeWorkerUtils, run, quickAddJob } from 'graphile-worker'
import config from '../config/config'
import {
addRenewalJobs,
addRenewalJobsHourly,
addRenewalJobsWeekly,
addRenewalJobsDaily,
} from './tasks/renewal/addRenewalJobs'
import { cryptoRenewalJob } from './tasks/renewal/cryptoRenewalJob'
import { fiatRenewalJob } from './tasks/renewal/fiatRenewalJob'
import { addHookJobs } from './tasks/hooks/addHookJobs'
import { sendHook } from './tasks/hooks/sendHook'
import { sendEmailJob } from './tasks/sendEmail'
import { sendToAllJob } from './tasks/sendToAll'
import { monitor } from './tasks/monitor'
import { checkBalances } from './tasks/checkBalances'
import { Pool } from 'pg'
import { notifyExpiredKeysForNetwork } from './jobs/expiredKeys'
import { notifyExpiringKeysForNetwork } from './jobs/expiringKeys'
import { downloadReceipts } from './tasks/receipts'
import exportKeysJob from './tasks/exportKeysJob'
const crontabProduction = `
*/5 * * * * monitor
*/2 * * * * allJobs
*/4 * * * * addRenewalJobs
30 * * * * addRenewalJobsHourly
15 0 * * * addRenewalJobsDaily
45 6 * * 0 addRenewalJobsWeekly
*/5 * * * * addKeyJobs
*/5 * * * * addHookJobs
0 0 * * * notifyExpiringKeysForNetwork
0 0 * * * notifyExpiredKeysForNetwork
30 */6 * * * checkBalances
`
const cronTabTesting = `
*/1 * * * * monitor
*/2 * * * * allJobs
*/4 * * * * addRenewalJobs
30 * * * * addRenewalJobsHourly
15 0 * * * addRenewalJobsDaily
45 6 * * 0 addRenewalJobsWeekly
*/1 * * * * addKeyJobs
*/1 * * * * addHookJobs
0 0 * * * notifyExpiringKeysForNetwork
0 0 * * * notifyExpiredKeysForNetwork
`
const crontab = config.isProduction ? crontabProduction : cronTabTesting
export const addJob = async (jobName: string, payload: any, opts = {}) => {
// Default priority for tasks is 0, we do not want to make clients wait
return quickAddJob(
{
pgPool: new Pool({
connectionString: config.databaseUrl,
// @ts-expect-error - type is not defined properly
ssl: config.database?.dialectOptions?.ssl,
}),
},
jobName,
payload,
opts
)
}
export async function startWorker() {
const pgPool = new Pool({
connectionString: config.databaseUrl,
// @ts-expect-error - type is not defined properly
ssl: config.database?.dialectOptions?.ssl,
})
// Create worker utils for scheduling tasks
const workerUtils = await makeWorkerUtils({
pgPool,
})
// Jobs to start when worker starts!
await workerUtils.addJob('checkBalances', {})
const runner = await run({
pgPool,
crontab,
concurrency: 5,
noHandleSignals: false,
pollInterval: 1000,
taskList: {
exportKeysJob,
checkBalances,
monitor,
allJobs,
notifyExpiredKeysForNetwork,
notifyExpiringKeysForNetwork,
addRenewalJobs,
addRenewalJobsHourly,
addRenewalJobsDaily,
addRenewalJobsWeekly,
addHookJobs,
sendEmailJob,
sendToAllJob,
sendHook,
fiatRenewalJob,
cryptoRenewalJob,
downloadReceipts,
},
})
await runner.promise
}