Jobs are behaviors that either get triggered by a message, or auto-triggered by the scheduler.
The jobs manager is an event broker. When it comes time to scale horizontally, it will be internally rewritten to use RabbitMQ.
jobs.queue(name[, data]) // add a one-time job
jobs.requeue(job) // remove, then re-add the job to the queue
jobs.markDone(job) // remove the job from the queue
jobs.addHandler(name, job => ...) // add a handler for the job
jobs.removeHandler(handlerId) // remove a handlerExample of setting up jobs:
jobs.queue('verify-profile-dat', { userId: '...', url: '...' })
jobs.queue('clean-unverified-users')Example of handling jobs:
var { hostname } = config
jobs.addHandler('verify-profile-dat', job => {
var { userId, url } = job.data
readDatFile(`${url}/proofs/${hostname}`, (err, data) => {
// ...
jobs.markDone(job)
})
})The scheduler adds cron-style timers/intervals to queue jobs at certain times.
scheduler.add(name, when[, data]) // schedule a job (cron syntax)
scheduler.list([name]) // list active jobs
scheduler.remove(scheduleId) // remove a scheduled jobExample of scheduling jobs:
// should be run during app startup
scheduler.add('clean-unverified-users', '0 0 0 * * *') // run at midnight every day- Name: `verify-profile-dat'
- Task: Read the proof file in the profile, verify the proof, and update the user record.
- Data:
userId: ID of the account that is attached to the profileurl: URL of the profile-dat
- Preconditions:
- User account should have its email verified
- Profile-dat and the proof-file should be locally available
- Name:
clean-dead-archives - Task: Deletes any archives referenced in
dead-archives(no hosting users).
- Name:
clean-unverified-users - Task: Deletes any user records older than a day with
isEmailVerified==false