forked from tsai/budibase
4 changed files with 122 additions and 22 deletions
@ -0,0 +1,78 @@ |
|||
import { Queue, Job, JobId } from "bull" |
|||
import { AutomationEvent } from "../definitions/automations" |
|||
import * as automation from "../threads/automation" |
|||
|
|||
export const addListeners = (queue: Queue) => { |
|||
logging(queue) |
|||
// handleStalled(queue)
|
|||
} |
|||
|
|||
const handleStalled = (queue: Queue) => { |
|||
queue.on("active", async (job: Job) => { |
|||
await automation.removeStalled(job as AutomationEvent) |
|||
}) |
|||
} |
|||
|
|||
const logging = (queue: Queue) => { |
|||
if (process.env.NODE_DEBUG?.includes("bull")) { |
|||
queue |
|||
.on("error", (error: any) => { |
|||
// An error occurred.
|
|||
console.error(`automation-event=error error=${JSON.stringify(error)}`) |
|||
}) |
|||
.on("waiting", (jobId: JobId) => { |
|||
// A Job is waiting to be processed as soon as a worker is idling.
|
|||
console.log(`automation-event=waiting jobId=${jobId}`) |
|||
}) |
|||
.on("active", (job: Job, jobPromise: any) => { |
|||
// A job has started. You can use `jobPromise.cancel()`` to abort it.
|
|||
console.log(`automation-event=active jobId=${job.id}`) |
|||
}) |
|||
.on("stalled", (job: Job) => { |
|||
// A job has been marked as stalled. This is useful for debugging job
|
|||
// workers that crash or pause the event loop.
|
|||
console.error( |
|||
`automation-event=stalled jobId=${job.id} job=${JSON.stringify(job)}` |
|||
) |
|||
}) |
|||
.on("progress", (job: Job, progress: any) => { |
|||
// A job's progress was updated!
|
|||
console.log( |
|||
`automation-event=progress jobId=${job.id} progress=${progress}` |
|||
) |
|||
}) |
|||
.on("completed", (job: Job, result) => { |
|||
// A job successfully completed with a `result`.
|
|||
console.log( |
|||
`automation-event=completed jobId=${job.id} result=${result}` |
|||
) |
|||
}) |
|||
.on("failed", (job, err: any) => { |
|||
// A job failed with reason `err`!
|
|||
console.log(`automation-event=failed jobId=${job.id} error=${err}`) |
|||
}) |
|||
.on("paused", () => { |
|||
// The queue has been paused.
|
|||
console.log(`automation-event=paused`) |
|||
}) |
|||
.on("resumed", (job: Job) => { |
|||
// The queue has been resumed.
|
|||
console.log(`automation-event=paused jobId=${job.id}`) |
|||
}) |
|||
.on("cleaned", (jobs: Job[], type: string) => { |
|||
// Old jobs have been cleaned from the queue. `jobs` is an array of cleaned
|
|||
// jobs, and `type` is the type of jobs cleaned.
|
|||
console.log( |
|||
`automation-event=cleaned length=${jobs.length} type=${type}` |
|||
) |
|||
}) |
|||
.on("drained", () => { |
|||
// Emitted every time the queue has processed all the waiting jobs (even if there can be some delayed jobs not yet processed)
|
|||
console.log(`automation-event=drained`) |
|||
}) |
|||
.on("removed", (job: Job) => { |
|||
// A job successfully removed.
|
|||
console.log(`automation-event=removed jobId=${job.id}`) |
|||
}) |
|||
} |
|||
} |
|||
Loading…
Reference in new issue