60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
const { createBullBoard } = require("@bull-board/api")
|
|
const { BullAdapter } = require("@bull-board/api/bullAdapter")
|
|
const { KoaAdapter } = require("@bull-board/koa")
|
|
const env = require("../environment")
|
|
const Queue = env.isTest()
|
|
? require("../utilities/queue/inMemoryQueue")
|
|
: require("bull")
|
|
const { JobQueues } = require("../constants")
|
|
const { utils } = require("@budibase/backend-core/redis")
|
|
const { opts, redisProtocolUrl } = utils.getRedisOptions()
|
|
const listeners = require("./listeners")
|
|
|
|
const CLEANUP_PERIOD_MS = 60 * 1000
|
|
const queueConfig = redisProtocolUrl || { redis: opts }
|
|
let cleanupInternal = null
|
|
|
|
let automationQueue = new Queue(JobQueues.AUTOMATIONS, queueConfig)
|
|
listeners.addListeners(automationQueue)
|
|
|
|
async function cleanup() {
|
|
await automationQueue.clean(CLEANUP_PERIOD_MS, "completed")
|
|
}
|
|
|
|
const PATH_PREFIX = "/bulladmin"
|
|
|
|
exports.init = () => {
|
|
// cleanup the events every 5 minutes
|
|
if (!cleanupInternal) {
|
|
cleanupInternal = setInterval(cleanup, CLEANUP_PERIOD_MS)
|
|
// fire off an initial cleanup
|
|
cleanup().catch(err => {
|
|
console.error(`Unable to cleanup automation queue initially - ${err}`)
|
|
})
|
|
}
|
|
// Set up queues for bull board admin
|
|
const queues = [automationQueue]
|
|
const adapters = []
|
|
const serverAdapter = new KoaAdapter()
|
|
for (let queue of queues) {
|
|
adapters.push(new BullAdapter(queue))
|
|
}
|
|
createBullBoard({
|
|
queues: adapters,
|
|
serverAdapter,
|
|
})
|
|
serverAdapter.setBasePath(PATH_PREFIX)
|
|
return serverAdapter.registerPlugin()
|
|
}
|
|
|
|
exports.shutdown = async () => {
|
|
if (automationQueue) {
|
|
clearInterval(cleanupInternal)
|
|
await automationQueue.close()
|
|
automationQueue = null
|
|
}
|
|
console.log("Bull shutdown")
|
|
}
|
|
|
|
exports.queue = automationQueue
|