Skip to content

Commit

Permalink
Merge branch 'bugfix/backport-add-the-error-handling-for-salt-job' in…
Browse files Browse the repository at this point in the history
…to q/2.5
  • Loading branch information
bert-e committed Apr 25, 2020
2 parents 577e757 + 31b2e9c commit b73c967
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 18 deletions.
33 changes: 21 additions & 12 deletions ui/src/ducks/app/salt.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import {
removeJobFromLocalStorage,
markJobCompleteInLocalStorage,
} from '../../services/salt/utils';
import { addNotificationErrorAction } from './notifications';
import { intl } from '../../translations/IntlGlobalProvider';

// Actions
export const ADD_JOB = 'ADD_JOB';
Expand All @@ -44,12 +46,12 @@ export default function reducer(state = defaultState, action = {}) {
case REMOVE_JOB:
return {
...state,
jobs: state.jobs.filter(job => job.jid !== action.payload.jid),
jobs: state.jobs.filter((job) => job.jid !== action.payload.jid),
};
case ADD_JOB_EVENT:
return {
...state,
jobs: state.jobs.map(job =>
jobs: state.jobs.map((job) =>
job.jid === action.payload.jid
? { ...job, events: [...job.events, action.payload.event] }
: job,
Expand All @@ -58,7 +60,7 @@ export default function reducer(state = defaultState, action = {}) {
case JOB_COMPLETED:
return {
...state,
jobs: state.jobs.map(job =>
jobs: state.jobs.map((job) =>
job.jid === action.payload.jid
? {
...job,
Expand All @@ -72,7 +74,7 @@ export default function reducer(state = defaultState, action = {}) {
case SET_JOB_STATUS:
return {
...state,
jobs: state.jobs.map(job =>
jobs: state.jobs.map((job) =>
job.jid === action.payload.jid
? { ...job, status: action.payload.status }
: job,
Expand Down Expand Up @@ -124,13 +126,13 @@ export function setJobStatusAction(jid, status) {
}

// Selectors
export const allJobsSelector = state => state.app.salt.jobs;
export const allJobsSelector = (state) => state.app.salt.jobs;

// Sagas
export function* initialize(payload) {
const savedJobs = listJobsFromLocalStorage();
yield all(savedJobs.map(job => put(addJobAction(job))));
yield all(savedJobs.map(job => call(refreshJobStatus, job)));
yield all(savedJobs.map((job) => put(addJobAction(job))));
yield all(savedJobs.map((job) => call(refreshJobStatus, job)));

// Once state is initialized from localStorage, we can start watching Salt
// Event bus (doing it before may loose some events since no job exists)
Expand Down Expand Up @@ -168,7 +170,14 @@ export function* manageLocalStorage() {

export function* refreshJobStatus(job) {
const result = yield call(ApiSalt.printJob, job.jid);
// TODO: error handling?
if (result.error) {
yield put(
addNotificationErrorAction({
title: intl.translate('salt_job'),
message: JSON.stringify(result.error),
}),
);
}
const status = getJobStatusFromPrintJob(result, job.jid);
yield call(updateJobStatus, job, status);
}
Expand Down Expand Up @@ -201,8 +210,8 @@ function* readJobEvent(job, event) {
}

export function createChannelFromSource(eventSrc) {
const subs = emitter => {
eventSrc.onmessage = msg => {
const subs = (emitter) => {
eventSrc.onmessage = (msg) => {
emitter(msg);
};
eventSrc.onerror = () => {
Expand All @@ -224,7 +233,7 @@ export function* watchSaltEvents({ payload: { url, token } }) {
const data = JSON.parse(event.data);

const jobs = yield select(allJobsSelector);
const relatedJob = jobs.find(job => data.tag.includes(job.jid));
const relatedJob = jobs.find((job) => data.tag.includes(job.jid));

if (relatedJob !== undefined) {
yield all([
Expand Down Expand Up @@ -252,7 +261,7 @@ export function* garbageCollectJobs() {
while (true) {
const jobs = yield select(allJobsSelector);
const toRemove = jobs.filter(checkJobExpiry);
yield all(toRemove.map(job => put(removeJobAction(job))));
yield all(toRemove.map((job) => put(removeJobAction(job))));
yield delay(JOB_GC_DELAY);
}
}
Expand Down
14 changes: 10 additions & 4 deletions ui/src/services/salt/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export function addJobToLocalStorage({
...props
}) {
const jobs = listJobsFromLocalStorage();
const job = jobs.find(item => item.jid === jid);
const job = jobs.find((item) => item.jid === jid);
if (!job) {
jobs.push({ jid, type, completedAt, ...props });
saveJobsToLocalStorage(jobs);
Expand All @@ -27,7 +27,7 @@ export function addJobToLocalStorage({

export function removeJobFromLocalStorage(jid) {
const existingJobs = listJobsFromLocalStorage();
const jobs = existingJobs.filter(job => job.jid !== jid);
const jobs = existingJobs.filter((job) => job.jid !== jid);
if (jobs.length) {
saveJobsToLocalStorage(jobs);
} else {
Expand All @@ -37,7 +37,7 @@ export function removeJobFromLocalStorage(jid) {

export function markJobCompleteInLocalStorage(jid, completedAt) {
const jobs = listJobsFromLocalStorage();
const job = jobs.find(item => item.jid === jid);
const job = jobs.find((item) => item.jid === jid);
if (job) {
job.completedAt = completedAt;
}
Expand All @@ -53,7 +53,7 @@ export function parseJobError(returner) {
const steps = Object.values(returner.return.data)[0];
let firstFailedStepIndex = Infinity;
let firstFailedStepKey;
Object.keys(steps).forEach(key => {
Object.keys(steps).forEach((key) => {
if (!steps[key].result && steps[key].__run_num__ < firstFailedStepIndex) {
firstFailedStepIndex = steps[key].__run_num__;
firstFailedStepKey = key;
Expand Down Expand Up @@ -83,6 +83,12 @@ export function getJobStatusFromPrintJob(result, jid) {
status = { ...status, ...parseJobError(returner) };
}
}
// add error handling when indicating the error inside the JSON
if (job && job['Error']) {
status.completed = true;
const returner = Object.values(job['Result'])[0].return;
status = { ...status, ...parseJobError(returner) };
}

return status;
}
Expand Down
3 changes: 2 additions & 1 deletion ui/src/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,5 +135,6 @@
"please_refer_to": "Please refer to",
"import_solution_hint": "You should import a solution to prepare your environment",
"redirecting": "Redirecting…",
"documentation": "Documentation"
"documentation": "Documentation",
"salt_job": "Salt job"
}
3 changes: 2 additions & 1 deletion ui/src/translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -135,5 +135,6 @@
"please_refer_to": "Veuillez vous référer à",
"import_solution_hint": "Vous devez importer une solution pour préparer votre environnement",
"redirecting": "Redirection…",
"documentation": "Documentation"
"documentation": "Documentation",
"salt_job": "Salt job"
}

0 comments on commit b73c967

Please sign in to comment.