From 204bcbb7c1cd1d0d36e81ff4c26af29b51087471 Mon Sep 17 00:00:00 2001 From: Dunemask Date: Sat, 6 Aug 2022 22:09:37 +0000 Subject: [PATCH] Live Job Update for failing tests --- lib/database/queries/alerting.js | 4 ++-- src/views/failing/Failing.jsx | 20 +++++++++++++++++--- src/views/failing/FailingBox.jsx | 11 +++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/database/queries/alerting.js b/lib/database/queries/alerting.js index 4bb0ce5..9e02639 100644 --- a/lib/database/queries/alerting.js +++ b/lib/database/queries/alerting.js @@ -11,8 +11,8 @@ const PG_DISABLED = process.env.POSTGRES_DISABLED; const silencedMock = () => { return [{ - name: `single`, - class: `single.js`, + name: `failing`, + class: `failing.js`, method: "FAKEMETHOD", id: 0, silencedUntil: new Date().toJSON(), diff --git a/src/views/failing/Failing.jsx b/src/views/failing/Failing.jsx index e737e75..c00034b 100644 --- a/src/views/failing/Failing.jsx +++ b/src/views/failing/Failing.jsx @@ -1,6 +1,6 @@ import { useState, useContext } from "react"; import { useNavigate } from "react-router-dom"; -import {useCurrentlyFailing} from "../../Queries.jsx"; +import {useCurrentlyFailing, useSilencedAlerts} from "../../Queries.jsx"; import StoreContext from "../../ctx/StoreContext.jsx"; import JobContext from "../../ctx/JobContext.jsx"; import SilenceDialog from "../alerting/SilenceDialog.jsx"; @@ -29,7 +29,7 @@ export default function Failing() { silenceRequest, } = useContext(StoreContext); const {isLoading, data: failing} = useCurrentlyFailing(); - + const {isSilencedLoading, data:silencedAlerts} = useSilencedAlerts(); const [silenceEntry, setSilenceEntry] = useState({ open: false }); const closeSilence = () => setSilenceEntry({ ...silenceEntry, open: false }); @@ -56,9 +56,22 @@ export default function Failing() { navigate(`/qualiteer/jobs#${jobId}`); }; + const failingTestsWithJobs = () => { + const silences = silencedAlerts ?? []; + for(var test of failing){ + if(test.isCompound) continue; + const job = jobState.jobs.find((j)=>j.builderCache.testNames.includes(test.name)) + if(job) test.job = job; + const silence = silences.find((s)=>s.name === test.name || s.class === test.class) + + if(silence) test.silencedUntil = silence; + } + return failing; + } + return (
- {isLoading? null :failing.map((v, i) => ( + {isLoading? null :failingTestsWithJobs().map((v, i) => ( ))} @@ -97,6 +110,7 @@ export default function Failing() { ): null} + {(failing ?? []).length ===0? null :( { - const jobId = retrySingle(failingTest); + const jobId = jobFactory({testNames: [testName], isTriage: true}); if (store.focusJob) navigate(`/qualiteer/jobs#${jobId}`); }; const jobOnClick = () => { - switch (testJobStatus) { + if(!job) return retryTest; + switch (job.status) { case jobStatus.OK: return null; case jobStatus.ERROR: @@ -101,7 +103,8 @@ export default function FailingBox(props) { }; function jobIcon() { - switch (testJobStatus) { + if(!job) return ; + switch (job.status) { case jobStatus.OK: return ; case jobStatus.ERROR: