move sync automations away from bull and call directly
This commit is contained in:
parent
f680fbd822
commit
e1eda14204
|
@ -10,6 +10,7 @@ import * as utils from "./utils"
|
||||||
import env from "../environment"
|
import env from "../environment"
|
||||||
import { context, db as dbCore } from "@budibase/backend-core"
|
import { context, db as dbCore } from "@budibase/backend-core"
|
||||||
import { Automation, Row, AutomationData, AutomationJob } from "@budibase/types"
|
import { Automation, Row, AutomationData, AutomationJob } from "@budibase/types"
|
||||||
|
import { executeSynchronously } from "../threads/automation"
|
||||||
|
|
||||||
export const TRIGGER_DEFINITIONS = definitions
|
export const TRIGGER_DEFINITIONS = definitions
|
||||||
const JOB_OPTS = {
|
const JOB_OPTS = {
|
||||||
|
@ -118,7 +119,7 @@ export async function externalTrigger(
|
||||||
automation,
|
automation,
|
||||||
}
|
}
|
||||||
const job = { data } as AutomationJob
|
const job = { data } as AutomationJob
|
||||||
return utils.processEvent(job)
|
return executeSynchronously(job)
|
||||||
} else {
|
} else {
|
||||||
return automationQueue.add(data, JOB_OPTS)
|
return automationQueue.add(data, JOB_OPTS)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) => {
|
export const removeStalled = async (job: Job) => {
|
||||||
const appId = job.data.event.appId
|
const appId = job.data.event.appId
|
||||||
if (!appId) {
|
if (!appId) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ export interface AutomationDataEvent {
|
||||||
appId?: string
|
appId?: string
|
||||||
metadata?: AutomationMetadata
|
metadata?: AutomationMetadata
|
||||||
automation?: Automation
|
automation?: Automation
|
||||||
|
timeout?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AutomationData {
|
export interface AutomationData {
|
||||||
|
|
Loading…
Reference in New Issue