Pipeline Trigger Dialog

This commit is contained in:
Dunemask 2022-10-23 21:55:30 -04:00
parent fd4dba7140
commit 87caafe36f
19 changed files with 8 additions and 382 deletions

View file

@ -1,5 +0,0 @@
const cap = 10;
const logNow = () => console.log(Date.now());
for (var i = 0; i < cap; i++) setTimeout(logNow, i * 1000);

View file

@ -1,18 +0,0 @@
import {
insertQuery,
selectWhereAnyQuery,
updateWhereAnyQuery,
} from "../lib/database/pg-query.js";
import { readFileSync } from "fs";
var data = JSON.parse(readFileSync("lib/routes/mocks/results.json"));
var table = "test_results";
var queries = data.results.map((r) => insertQuery(table, r));
queries.forEach((q) => console.log(q + ";"));
console.log();
table = "test_catalog";
data = JSON.parse(readFileSync("lib/routes/mocks/catalog.json"));
queries = data["tests:full"].map((r) => insertQuery(table, r));
queries.forEach((q) => console.log(q + ";"));

View file

@ -1,14 +0,0 @@
function jobDisplay({ props }) {
return (
<div className="job">
<h2>Job ID: {props.job.id}</h2>
<h3>Log: </h3>
{props.job.log.map((l, i) => (
<div className="line" key={i}>
{l}
<br />
</div>
))}
</div>
);
}

View file

@ -1,49 +0,0 @@
import { useContext } from "react";
import { Initiator } from "qualiteer/web-clients";
import JobContext, { ACTIONS as jobActions } from "../../ctx/JobContext.jsx";
const cmd = `node other.js`;
export default function Test() {
const { state: jobState, dispatch: jobDispatch } = useContext(JobContext);
function onLog(d) {
const job = jobState.jobs[0];
job.log.push(d);
jobDispatch({ type: jobActions.UPDATE, jobId: jobState.jobs[0].id, job });
console.log(d);
console.log(jobState);
}
async function startJob() {
console.log("Wanting to start");
const url = "https://Qualiteer.elijahparker3.repl.co";
// Create an initiator and make a job request
const primary = new Initiator(url);
const jobRequest = { command: cmd };
const job = await primary.newJob(jobRequest, onLog, () =>
console.log("Primary Job Concluded")
);
jobDispatch({ type: jobActions.CREATE, job: { ...job, log: [] } });
console.log("Started");
}
return (
<div className="Jobs">
<h1>vv Info vv </h1>
<button onClick={startJob}>Start</button>
{jobState.jobs.map((j) =>
j.log.map((l, i) => (
<div className="line" key={i}>
{l}
<br />
</div>
))
)}
</div>
);
/*
}*/
}

View file

@ -1,54 +0,0 @@
import { useContext } from "react";
import { Initiator } from "qualiteer/web-clients";
import JobContext from "../ctx/JobContext.jsx";
const cmd = `node other.js`;
export default function Test() {
const {
state: jobState,
dispatch: jobDispatch,
jobUpdate,
jobCreate,
} = useContext(JobContext);
function onLog(d) {
const job = jobState.jobs[0];
job.log.push(d);
jobUpdate(job.id, job);
console.log(d);
console.log(jobState);
}
async function startJob() {
console.log("Wanting to start");
const url = "https://Qualiteer.elijahparker3.repl.co";
// Create an initiator and make a job request
const primary = new Initiator(url);
const jobRequest = { command: cmd };
const job = await primary.newJob(jobRequest, onLog, () =>
console.log("Primary Job Concluded")
);
jobCreate(job);
console.log("Started");
}
return (
<div className="test">
<h1>vv Info vv </h1>
<button onClick={startJob}>Start</button>
{jobState.jobs.map((j) =>
j.log.map((l, i) => (
<div className="line" key={i}>
{l}
<br />
</div>
))
)}
</div>
);
/*
}*/
}

View file

@ -1,38 +0,0 @@
import { useState } from "react";
import { Initiator } from "qualiteer/web-clients";
const cmd = `node other.js`;
export default function Test() {
const [job, setJob] = useState({ log: ["INTRO"] });
function onLog(d) {
const j = { ...job };
j.log.push(d);
setJob(j);
}
async function startJob() {
console.log("Wanting to start");
const url = "https://Qualiteer.elijahparker3.repl.co";
// Create an initiator and make a job request
const primary = new Initiator(url);
const job = { command: cmd };
await primary.newJob(job, onLog, () =>
console.log("Primary Job Concluded")
);
console.log("Started");
}
return (
<div className="test">
<h1>vv Info vv </h1>
<button onClick={startJob}>Start</button>
{job.log.map((l, i) => (
<div className="line" key={i}>
{l}
<br />
</div>
))}
</div>
);
}

View file

@ -11,6 +11,7 @@ import Dialog from "@mui/material/Dialog";
import Typography from "@mui/material/Typography";
import TextField from "@mui/material/TextField";
import Toolbar from "@mui/material/Toolbar";
import ContentPasteIcon from "@mui/icons-material/ContentPaste";
export function usePipelineTriggerDialog(isOpen = false) {
const [open, setOpen] = useState(isOpen);
@ -75,11 +76,13 @@ export default function PipelineTriggerDialog(props) {
{trigger.testName}
</div>
</Typography>
{trigger.jobReq && (
<TextField
margin="normal"
label="Expires"
label="Job Request"
value={JSON.stringify(trigger.jobReq)}
/>
)}
</Box>
<PipelineTriggerWidget trigger={trigger} close={onClose} />
</DialogContent>

View file

@ -1,24 +0,0 @@
#!/usr/bin/env node
import "dotenv/config"; // Load Envars
import Qualiteer from "qualiteer";
import axios from "axios";
// Start server
const qltr = new Qualiteer();
await qltr.start();
const url = process.env.QUALITEER_EXECUTOR_URL;
const mappingsUrl = "/api/catalog/pipeline-mappings";
const resultsUrl = "/api/results/failing";
const get = (...args) => axios.get(`${url}${args[0]}`, args[1]);
const mappings = await get(resultsUrl, {}).catch((e) => console.log(e));
console.log(mappings.data);
/*var res = await get(resultsUrl);
console.log(res.data);
res = await get(resultsUrl, { headers: { count: true } });
console.log(res.data);*/

View file

@ -1,4 +0,0 @@
export default function failingTest() {
console.log("This came from a failing test!");
return { status: 1, message: "This test always fails :(" };
}

View file

@ -1,4 +0,0 @@
export default function primaryTest() {
console.log("This came from a primary test!");
return { status: 0, pipelineData: "SomeData" };
}

View file

@ -1,94 +0,0 @@
import axios from "axios";
import Rabbiteer from "rabbiteer";
import primary from "./primary.js";
import secondary1 from "./secondary1.js";
import secondary2 from "./secondary2.js";
import tertiary1 from "./tertiary1.js";
import tertiary2 from "./tertiary2.js";
import tertiary3 from "./tertiary3.js";
import single from "./single.js";
import singleAlt from "./single-alt.js";
import failing from "./failing.js";
// Constants
const liveUpdateDelay = 100;
const endLiveCount = 200;
const reportingUrl = `${process.env.QUALITEER_EXECUTOR_URL}/api/dev/rabbit/TestResults`;
// Pull args
const args = process.argv.slice(2);
const test = (args.find((v) => v.includes("test=")) ?? "").replace("test=", "");
const isTriage = (args.find((v) => v.includes("isTriage=")) ?? "").replace(
"isTriage=",
""
);
var pipeline = (args.find((v) => v.includes("pipeline=")) ?? "").replace(
"pipeline=",
""
);
if (pipeline)
pipeline = JSON.parse(Buffer.from(pipeline, "base64").toString("utf8"));
const logNow = () => console.log(Date.now());
const liveIndicator = () => {
for (var i = 0; i < endLiveCount; i++)
setTimeout(logNow, i * liveUpdateDelay);
};
const runTests = () => {
switch (test) {
case "primary":
return primary();
case "secondary1":
return secondary1(pipeline.testData);
case "secondary2":
return secondary2(pipeline.testData);
case "tertiary1":
return tertiary1(pipeline.testData);
case "tertiary2":
return tertiary2(pipeline.testData);
case "tertiary3":
return tertiary3(pipeline.testData);
case "single":
return single();
case "single-alt":
return singleAlt();
case "failing":
return failing();
default:
return single();
}
};
// Run
liveIndicator();
setTimeout(async () => {
const status = runTests();
if (pipeline) pipeline.testData = status.pipelineData;
const testResult = {
...status,
failed: status.status !== 0,
name: test,
pipeline,
triage: isTriage === "true",
};
/*const rbt = new Rabbiteer(null, [], {
autoRabbit: { user: "guest", pass: "guest" },
});
await rbt.connect();
const data = JSON.stringify(testResult);
await rbt.publishMessageWithTimeout("TestResults", data);
rbt.disconnect();
if (status.status === 1) process.exit(1);*/
axios
.post(reportingUrl, { testResult })
.catch((e) => {
console.log(e.response.status);
})
.then(() => {
if (status.status === 1) process.exit(1);
});
}, endLiveCount * liveUpdateDelay);

View file

@ -1,7 +0,0 @@
export default function secondaryTest(pipelineData) {
console.log("This came from a secondary1 test!");
return {
status: +(pipelineData !== "SomeData"),
pipelineData: "SomeOtherData",
};
}

View file

@ -1,7 +0,0 @@
export default function secondaryTest(pipelineData) {
console.log("This came from a secondary2 test!");
return {
status: +(pipelineData !== "SomeData"),
pipelineData: "SomeOtherOtherData",
};
}

View file

@ -1,4 +0,0 @@
export default function singleAltTest() {
console.log("This came from a single test!");
return { status: 0 };
}

View file

@ -1,4 +0,0 @@
export default function singleTest() {
console.log("This came from a single test!");
return { status: 0 };
}

View file

@ -1,4 +0,0 @@
export default function secondaryTest(pipelineData) {
console.log("This came from a tertiary1!");
return { status: +(pipelineData !== "SomeOtherData") };
}

View file

@ -1,4 +0,0 @@
export default function secondaryTest(pipelineData) {
console.log("This came from a tertiary2!");
return { status: +(pipelineData !== "SomeOtherData") };
}

View file

@ -1,4 +0,0 @@
export default function secondaryTest(pipelineData) {
console.log("This came from a tertiary3!");
return { status: +(pipelineData !== "SomeOtherOtherData") };
}

View file

@ -1,39 +0,0 @@
#!/usr/bin/env node
import "dotenv/config"; // Load Envars
import Qualiteer from "qualiteer";
import { Initiator, Executor } from "qualiteer/clients";
// Start server
const qltr = new Qualiteer();
await qltr.start();
const url = process.env.QUALITEER_EXECUTOR_URL;
// Create an initiator and make a job request
const primary = new Initiator(url);
const job = {
pipeline: {
__test: "primary",
triggers: {
secondary1: {
__testDelay: 1000,
tertiary1: {},
tertiary2: {
__testDelay: 8000,
},
},
secondary2: {
__testDelay: 20000,
tertiary3: {
__testDelay: 3000,
},
},
},
},
name: "testing",
image: "node",
};
const launchJob = () =>
primary.newPipelineJob(job, null, () => console.log("Primary Job Concluded"));
launchJob();