51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
const triggers = require("./triggers")
|
|
const actions = require("./actions")
|
|
const env = require("../environment")
|
|
const workerFarm = require("worker-farm")
|
|
const singleThread = require("./thread")
|
|
const { getAPIKey, update, Properties } = require("../utilities/usageQuota")
|
|
|
|
let workers = workerFarm(require.resolve("./thread"))
|
|
|
|
function runWorker(job) {
|
|
return new Promise((resolve, reject) => {
|
|
workers(job, err => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve()
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
async function updateQuota(automation) {
|
|
const appId = automation.appId
|
|
const apiObj = await getAPIKey(appId)
|
|
// this will fail, causing automation to escape if limits reached
|
|
await update(apiObj.apiKey, Properties.AUTOMATION, 1)
|
|
return apiObj.apiKey
|
|
}
|
|
|
|
/**
|
|
* This module is built purely to kick off the worker farm and manage the inputs/outputs
|
|
*/
|
|
module.exports.init = async function () {
|
|
await actions.init()
|
|
triggers.automationQueue.process(async job => {
|
|
try {
|
|
if (env.USE_QUOTAS) {
|
|
job.data.automation.apiKey = await updateQuota(job.data.automation)
|
|
}
|
|
if (env.isProd()) {
|
|
await runWorker(job)
|
|
} else {
|
|
await singleThread(job)
|
|
}
|
|
} catch (err) {
|
|
console.error(
|
|
`${job.data.automation.appId} automation ${job.data.automation._id} was unable to run - ${err}`
|
|
)
|
|
}
|
|
})
|
|
}
|