@defra-fish/payment-mop-up-job
Version:
Process incomplete web-sales
32 lines (27 loc) • 1.11 kB
JavaScript
import { execute } from './processors/processor.js'
import { DEFAULT_INCOMPLETE_PURCHASE_AGE_MINUTES, DEFAULT_SCAN_DURATION_HOURS } from './constants.js'
import { DistributedLock, airbrake } from '@defra-fish/connectors-lib'
const incompletePurchaseAgeMinutes = Number(process.env.INCOMPLETE_PURCHASE_AGE_MINUTES || DEFAULT_INCOMPLETE_PURCHASE_AGE_MINUTES)
const scanDurationHours = Number(process.env.SCAN_DURATION_HOURS || DEFAULT_SCAN_DURATION_HOURS)
const lock = new DistributedLock('payment-mop-up-etl', 5 * 60 * 1000)
airbrake.initialise()
lock
.obtainAndExecute({
onLockObtained: async () => {
await execute(incompletePurchaseAgeMinutes, scanDurationHours)
},
onLockError: async e => {
console.log('Unable to obtain a lock for the payment mop-up job, skipping execution.', e)
process.exit(0)
},
maxWaitSeconds: 0
})
.catch(console.error)
.finally(airbrake.flush)
const shutdown = async code => {
await airbrake.flush()
await lock.release()
process.exit(code)
}
process.on('SIGINT', () => shutdown(130))
process.on('SIGTERM', () => shutdown(137))