import { Manager } from "socket.io-client"; import modes from "../modes.js"; import events from "../events.js"; export { default as events } from "../events.js"; export { default as modes } from "../modes.js"; export default class Initiator { constructor(url, options = {}) { this.url = url; this.mode = modes.INIT; this.onLog = options.onLog ?? ((d) => console.log(`job: ${d}`)); this.onClose = options.onClose ?? (() => {}); this.onCreate = options.onCreate ?? ((id) => console.log(`job id: ${id}`)); this.onPipelineClose = options.onPipelineClose ?? (() => { console.log("job pipeline closed"); }); this.sk = null; } async newJob(jobRequest, onLog, onClose, onCreate) { const mgr = new Manager(this.url, { query: { mode: this.mode, job: JSON.stringify(jobRequest) }, }); onLog = onLog ?? this.onLog.bind(this); onClose = onClose ?? this.onClose.bind(this); onCreate = onCreate ?? this.onCreate.bind(this); this.sk = mgr.socket("/"); this.sk.on(events.JOB_LOG, onLog); this.sk.on(events.JOB_CLS, onClose); return new Promise((res) => this.sk.on(events.JOB_CRT, function onJobCreate(id) { onCreate(id); res({ ...jobRequest, id }); }) ); } async newPipelineJob( jobRequest, onLog, onClose, onCreate, onPipelineTrigger, onPipelineClose ) { const mgr = new Manager(this.url, { query: { mode: this.mode, job: JSON.stringify(jobRequest) }, }); onLog = onLog ?? this.onLog.bind(this); onClose = onClose ?? this.onClose.bind(this); onCreate = onCreate ?? this.onCreate.bind(this); onPipelineTrigger = onPipelineTrigger ?? ((trigger) => { console.log("job trg:", trigger); const testName = trigger.pipelineTriggers; const pipelineData = trigger.pipelineData; const pipelineTriggers = trigger.newPipelineTriggers; const jobReq = { ...jobRequest, testName, pipelineData, pipelineTriggers, }; setTimeout( () => this.newPipelineJob( jobReq, onLog, onClose, onCreate, onPipelineTrigger, onPipelineClose ), trigger.pipelineDelay ); }); onPipelineClose = onPipelineClose ?? this.onPipelineClose.bind(this); 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) => this.sk.on(events.JOB_CRT, function onJobCreate(id) { onCreate(id); res({ ...jobRequest, id }); }) ); } }