Revamp Job flow

This commit is contained in:
Elijah Dunemask 2022-10-15 11:47:47 +00:00
parent 945afdfbbe
commit 4a0a4b29a5
86 changed files with 592 additions and 608 deletions

View file

@ -0,0 +1,63 @@
import { useContext } from "react";
import { v4 as uuidv4 } from "uuid";
import JobContext from "@qltr/jobctx";
import Initiator from "@qltr/initiator";
import { jobStatus, socketUrl } from "./job-config.js";
export function useOneshotCore() {
const { state, jobUpdate, jobCreate, jobDelete } = useContext(JobContext);
function oneshotCancel(jobId) {
const job = state.jobs.find((j) => j.jobId === jobId);
if (job.initiator.sk) job.initiator.sk.close();
job.status = jobStatus.CANCELED;
jobUpdate({ ...job }, jobId);
}
function oneshotDestroy(jobId) {
const job = state.jobs.find((j) => j.jobId === jobId);
const { status } = job;
const isTriggered = !!job.initiator.sk;
const isCompleted = status === jobStatus.OK || status === jobStatus.ERROR;
const isCanceled = status === jobStatus.CANCELED;
if (isTriggered && !isCompleted && !isCanceled) job.initiator.sk.close();
jobDelete(jobId);
}
function oneshotStart(builderCache) {
const { testNames, isTriage } = builderCache;
const initiator = new Initiator(socketUrl);
const jobId = uuidv4();
const job = {
name: jobId,
status: jobStatus.PENDING,
jobId,
isPipeline: false,
builderCache,
initiator,
};
const request = { testNames, type: "single", isTriage };
jobCreate(job);
const onLog = (d) => {
const job = state.jobs.find((j) => j.jobId === jobId);
job.log.push(d);
job.status = jobStatus.ACTIVE;
jobUpdate({ ...job }, jobId);
};
const onClose = (c) => {
const job = state.jobs.find((j) => j.jobId === jobId);
job.exitcode = c;
job.status = c === 0 ? jobStatus.OK : jobStatus.ERROR;
jobUpdate({ ...job }, jobId);
};
const started = initiator.newJob(request, onLog, onClose, () => {});
started.then(() => jobUpdate({ status: jobStatus.ACTIVE }, jobId));
return jobId;
}
return { oneshotStart, oneshotCancel, oneshotDestroy };
}