diff --git a/lib/sockets/clients/Initiator.js b/lib/sockets/clients/Initiator.js
index 2600444..93cc77b 100644
--- a/lib/sockets/clients/Initiator.js
+++ b/lib/sockets/clients/Initiator.js
@@ -17,6 +17,7 @@ export default class Initiator {
(() => {
console.log("job pipeline closed");
});
+ this.sk = null;
}
async newJob(jobRequest, onLog, onClose, onCreate) {
@@ -26,11 +27,11 @@ export default class Initiator {
onLog = onLog ?? this.onLog.bind(this);
onClose = onClose ?? this.onClose.bind(this);
onCreate = onCreate ?? this.onCreate.bind(this);
- const sk = mgr.socket("/");
- sk.on(events.JOB_LOG, onLog);
- sk.on(events.JOB_CLS, onClose);
+ this.sk = mgr.socket("/");
+ this.sk.on(events.JOB_LOG, onLog);
+ this.sk.on(events.JOB_CLS, onClose);
return new Promise((res) =>
- sk.on(events.JOB_CRT, function onJobCreate(id) {
+ this.sk.on(events.JOB_CRT, function onJobCreate(id) {
onCreate(id);
res({ ...jobRequest, id });
})
@@ -78,13 +79,13 @@ export default class Initiator {
);
});
onPipelineClose = onPipelineClose ?? this.onPipelineClose.bind(this);
- const sk = mgr.socket("/");
- sk.on(events.JOB_LOG, onLog);
- sk.on(events.JOB_CLS, onClose);
- sk.on(events.PPL_TRG, onPipelineTrigger);
- sk.on(events.PPL_CLS, onPipelineClose);
+ this.sk = mgr.socket("/");
+ this.sk.on(events.JOB_LOG, onLog);
+ this.sk.on(events.JOB_CLS, onClose);
+ this.sk.on(events.PPL_TRG, onPipelineTrigger);
+ this.sk.on(events.PPL_CLS, onPipelineClose);
return new Promise((res) =>
- sk.on(events.JOB_CRT, function onJobCreate(id) {
+ this.sk.on(events.JOB_CRT, function onJobCreate(id) {
onCreate(id);
res({ ...jobRequest, id });
})
diff --git a/src/ctx/JobContext.jsx b/src/ctx/JobContext.jsx
index b84cc76..073b748 100644
--- a/src/ctx/JobContext.jsx
+++ b/src/ctx/JobContext.jsx
@@ -43,12 +43,12 @@ const reducer = (state, action) => {
return { ...state, jobs };
case ACTIONS.UPDATE:
- jobIndex = jobs.find((j) => j.id === (action.job.id ?? action.jobId));
+ jobIndex = jobs.findIndex((j) => j.jobId === (action.job.jobId ?? action.jobId));
jobs[jobIndex] = { ...jobs[jobIndex], ...action.job };
return { ...state, jobs };
case ACTIONS.DELETE:
- jobIndex = jobs.find((j) => j.id === action.jobId);
+ jobIndex = jobs.findIndex((j) => j.jobId === action.jobId);
jobs.splice(jobIndex, 1);
return { ...state, jobs };
@@ -66,6 +66,25 @@ export const JobProvider = ({ children }) => {
dispatch({ type: ACTIONS.CREATE, job: { ...job, log: [] } });
const jobDelete = (jobId) => dispatch({ type: ACTIONS.DELETE, jobId });
+ function jobCancel(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 jobDestroy(jobId){
+ const job = state.jobs.find((j)=>j.jobId===jobId);
+ if(job.initiator.sk && job.status !== jobStatus.OK && job.status !== jobStatus.ERROR && job.status !== jobStatus.CANCELED){
+ job.initiator.sk.close();
+ }
+
+ jobDelete(jobId);
+ }
+
function retryAll(failing) {
// Query Full Locator
console.log("Would retry all failing tests!");
@@ -89,6 +108,7 @@ export const JobProvider = ({ children }) => {
jobId,
isPipeline: false,
builderCache,
+ initiator: i,
};
const request = {
@@ -141,6 +161,8 @@ export const JobProvider = ({ children }) => {
retryAll,
retrySingle,
jobFactory,
+ jobCancel,
+ jobDestroy
};
const contextValue = useMemo(() => context, [state, dispatch]);
diff --git a/src/ctx/StoreContext.jsx b/src/ctx/StoreContext.jsx
index 974f295..550762a 100644
--- a/src/ctx/StoreContext.jsx
+++ b/src/ctx/StoreContext.jsx
@@ -9,11 +9,11 @@ const localStorage = { setItem: () => {}, getItem: () => {} };
const localSettings = localStorage.getItem("settings");
const defaultSettings = {
- focusJob: true,
+ focusJob: false,
simplifiedControls: false,
logAppDetails: true,
defaultRegion: "us",
- defaultPage: "failing",
+ defaultPage: "jobs",
};
const settings = localSettings ? JSON.parse(localSettings) : defaultSettings;
diff --git a/src/views/Views.jsx b/src/views/Views.jsx
index 68c5e3a..79d82eb 100644
--- a/src/views/Views.jsx
+++ b/src/views/Views.jsx
@@ -33,7 +33,7 @@ export default function Views() {