MCPcopy
hub / github.com/simstudioai/sim / executeJobInline

Function executeJobInline

apps/sim/background/schedule-execution.ts:1164–1416  ·  view source on GitHub ↗
(payload: JobExecutionPayload)

Source from the content-addressed store, hash-verified

1162}
1163
1164export async function executeJobInline(payload: JobExecutionPayload) {
1165 const requestId = generateId().slice(0, 8)
1166 const now = new Date(payload.now)
1167
1168 logger.info(`[${requestId}] Starting job execution`, { scheduleId: payload.scheduleId })
1169
1170 const [jobRecord] = await db
1171 .select()
1172 .from(workflowSchedule)
1173 .where(and(eq(workflowSchedule.id, payload.scheduleId), isNull(workflowSchedule.archivedAt)))
1174 .limit(1)
1175
1176 if (!jobRecord || !jobRecord.prompt || !jobRecord.sourceUserId || !jobRecord.sourceWorkspaceId) {
1177 logger.error(`[${requestId}] Job record missing required fields`, {
1178 scheduleId: payload.scheduleId,
1179 })
1180 await releaseScheduleLock(
1181 payload.scheduleId,
1182 requestId,
1183 now,
1184 `Failed to release job ${payload.scheduleId} after missing fields`,
1185 undefined,
1186 { expectedLastQueuedAt: now }
1187 )
1188 return
1189 }
1190
1191 if (!jobRecord.lastQueuedAt || jobRecord.lastQueuedAt.getTime() !== now.getTime()) {
1192 logger.info(`[${requestId}] Job claim no longer matches payload, skipping execution`, {
1193 scheduleId: payload.scheduleId,
1194 claimedAt: now.toISOString(),
1195 currentLastQueuedAt: jobRecord.lastQueuedAt?.toISOString(),
1196 })
1197 return
1198 }
1199
1200 const activeWorkspace = await getWorkspaceById(jobRecord.sourceWorkspaceId)
1201 if (!activeWorkspace || jobRecord.status === 'disabled') {
1202 logger.info(`[${requestId}] Job is archived, disabled, or workspace is inactive`, {
1203 scheduleId: payload.scheduleId,
1204 })
1205 await releaseScheduleLock(
1206 payload.scheduleId,
1207 requestId,
1208 now,
1209 `Failed to release job ${payload.scheduleId} after archive/disabled check`,
1210 undefined,
1211 { expectedLastQueuedAt: now }
1212 )
1213 return
1214 }
1215
1216 if (jobRecord.status === 'completed') {
1217 logger.info(`[${requestId}] Job already completed, skipping`, {
1218 scheduleId: payload.scheduleId,
1219 })
1220 await releaseScheduleLock(
1221 payload.scheduleId,

Callers 1

processJobItemFunction · 0.90

Calls 15

generateIdFunction · 0.90
getWorkspaceByIdFunction · 0.90
getExecutionTimeoutFunction · 0.90
buildAPIUrlFunction · 0.90
buildAuthHeadersFunction · 0.90
getTimeoutErrorMessageFunction · 0.90
computeNextRunAtFunction · 0.90
toErrorFunction · 0.90
releaseScheduleLockFunction · 0.85
buildJobPromptFunction · 0.85

Tested by

no test coverage detected