move sync automations away from bull and call directly

This commit is contained in:
Peter Clement 2023-05-18 17:01:53 +01:00
parent f680fbd822
commit e1eda14204
3 changed files with 33 additions and 1 deletions

View File

@ -10,6 +10,7 @@ import * as utils from "./utils"
import env from "../environment"
import { context, db as dbCore } from "@budibase/backend-core"
import { Automation, Row, AutomationData, AutomationJob } from "@budibase/types"
import { executeSynchronously } from "../threads/automation"
export const TRIGGER_DEFINITIONS = definitions
const JOB_OPTS = {
@ -118,7 +119,7 @@ export async function externalTrigger(
automation,
}
const job = { data } as AutomationJob
return utils.processEvent(job)
return executeSynchronously(job)
} else {
return automationQueue.add(data, JOB_OPTS)
}

View File

@ -495,6 +495,36 @@ export function execute(job: Job, callback: WorkerCallback) {
})
}
export function executeSynchronously(job: Job) {
const appId = job.data.event.appId
if (!appId) {
throw new Error("Unable to execute, event doesn't contain app ID.")
}
const timeoutPromise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("Timeout exceeded"))
}, job.data.event.timeout || 12000)
})
return context.doInAppContext(appId, async () => {
const envVars = await sdkUtils.getEnvironmentVariables()
// put into automation thread for whole context
return context.doInEnvironmentContext(envVars, async () => {
const automationOrchestrator = new Orchestrator(job)
try {
const response = await Promise.race([
automationOrchestrator.execute(),
timeoutPromise,
])
return response
} catch (err) {
throw err
}
})
})
}
export const removeStalled = async (job: Job) => {
const appId = job.data.event.appId
if (!appId) {

View File

@ -5,6 +5,7 @@ export interface AutomationDataEvent {
appId?: string
metadata?: AutomationMetadata
automation?: Automation
timeout?: number
}
export interface AutomationData {