Skip to content

Commit

Permalink
Add retryCount and retryTimeout options #64
Browse files Browse the repository at this point in the history
  • Loading branch information
aelassas committed Dec 1, 2023
1 parent bf54912 commit 86cbbfe
Show file tree
Hide file tree
Showing 14 changed files with 373 additions and 52 deletions.
1 change: 1 addition & 0 deletions src/backend/Wexflow.Backend/css/designer.css
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,7 @@ color: #393C44;
font-size: 14px;
font-weight: bold;
color: #253134;
margin-top: 3px;
}

.inputtext {
Expand Down
6 changes: 6 additions & 0 deletions src/backend/Wexflow.Backend/designer.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,12 @@
<input id='wfapproval' class="inputtext" type='checkbox' />
<p id='wfenablepj-label' class="inputlabel">EnableParallelJobs</p>
<input id='wfenablepj' class="inputtext" type='checkbox' checked />

<p id="wfretrycount-label" class="inputlabel">Task Retries</p>
<input id="wfretrycount" class="form-control inputtext" type="text" autocomplete="off" value="0" />
<p id="wfretrytimeout-label" class="inputlabel">Task Retries Timeout</p>
<input id="wfretrytimeout" class="form-control inputtext" type="text" autocomplete="off" value="1500" />

<p class="inputlabel">
<span id="wf-local-vars-label">Local Variables</span>
<input type="button" id="wf-add-var" value="New Variable" class="btn btn-secondary" />
Expand Down
66 changes: 60 additions & 6 deletions src/backend/Wexflow.Backend/js/designer.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,17 @@
document.getElementById("wfenabled-label").innerHTML = language.get("wfenabled-label");
document.getElementById("wfapproval-label").innerHTML = language.get("wfapproval-label");
document.getElementById("wfenablepj-label").innerHTML = language.get("wfenablepj-label");

document.getElementById("wfretrycount-label").innerHTML = language.get("wfretrycount-label");
document.getElementById("wfretrytimeout-label").innerHTML = language.get("wfretrytimeout-label");
document.getElementById("wfretrycount-label").title = language.get("wfretrycount-title");
document.getElementById("wfretrytimeout-label").title = language.get("wfretrytimeout-title");

document.getElementById("wf-local-vars-label").innerHTML = language.get("wf-local-vars-label");
document.getElementById("wf-add-var").value = language.get("wf-add-var");
document.getElementById("removeblock").innerHTML = language.get("removeblock");
document.getElementById("removeworkflow").innerHTML = language.get("removeworkflow");

let removeVariableButtons = document.getElementsByClassName("wf-remove-var");
for (let i = 0; i < removeVariableButtons.length; i++) {
removeVariableButtons[i].innerHTML = language.get("wf-remove-var");
Expand Down Expand Up @@ -293,7 +300,7 @@

searchtasks.onkeyup = function (event) {
event.preventDefault();
if (event.keyCode === 13) { // Enter
if (event.key === 'Enter') { // Enter
loadTasks();
}
};
Expand Down Expand Up @@ -352,6 +359,8 @@
"IsEnabled": document.getElementById("wfenabled").checked,
"IsApproval": document.getElementById("wfapproval").checked,
"EnableParallelJobs": document.getElementById("wfenablepj").checked,
"RetryCount": document.getElementById("wfretrycount").value,
"RetryTimeout": document.getElementById("wfretrytimeout").value,
"LocalVariables": []
},
"Tasks": []
Expand Down Expand Up @@ -590,6 +599,8 @@
"IsEnabled": document.getElementById("wfenabled").checked,
"IsApproval": document.getElementById("wfapproval").checked,
"EnableParallelJobs": document.getElementById("wfenablepj").checked,
"RetryCount": document.getElementById("wfretrycount").value,
"RetryTimeout": document.getElementById("wfretrytimeout").value,
"LocalVariables": []
},
"Tasks": []
Expand Down Expand Up @@ -644,6 +655,8 @@
"IsEnabled": document.getElementById("wfenabled").checked,
"IsApproval": document.getElementById("wfapproval").checked,
"EnableParallelJobs": document.getElementById("wfenablepj").checked,
"RetryCount": document.getElementById("wfretrycount").value,
"RetryTimeout": document.getElementById("wfretrytimeout").value,
"LocalVariables": []
},
"Tasks": []
Expand Down Expand Up @@ -880,7 +893,6 @@
self.parentNode.parentNode.nextSibling.firstChild.innerHTML += settingValueHtml;
self.parentNode.parentNode.nextSibling.querySelector(".wf-setting-type").value = settingType;


// bind events
let settingValueInput = self.parentNode.parentNode.nextSibling.querySelector(".wf-setting-value");
if (settingValueInput) {
Expand Down Expand Up @@ -1832,7 +1844,6 @@
}
};


wfclose.onclick = function () {
if (wfpropHidden === false) {
document.getElementById("wfpropwrap").style.right = -wfpropwidth + "px";
Expand Down Expand Up @@ -1863,6 +1874,8 @@
"IsEnabled": document.getElementById("wfenabled").checked,
"IsApproval": document.getElementById("wfapproval").checked,
"EnableParallelJobs": document.getElementById("wfenablepj").checked,
"RetryCount": document.getElementById("wfretrycount").value,
"RetryTimeout": document.getElementById("wfretrytimeout").value,
"LocalVariables": []
},
"Tasks": []
Expand Down Expand Up @@ -1899,6 +1912,24 @@
document.getElementById("wfenablepj").onchange = function () {
workflow.WorkflowInfo.EnableParallelJobs = this.checked;
};
document.getElementById("wfretrycount").onchange = function () {
if (isInt(this.value) === false) {
this.style.borderColor = "#FF0000";
} else {
this.style.borderColor = "#CCCCCC";
}

workflow.WorkflowInfo.RetryCount = this.value;
};
document.getElementById("wfretrytimeout").onchange = function () {
if (isInt(this.value) === false) {
this.style.borderColor = "#FF0000";
} else {
this.style.borderColor = "#CCCCCC";
}

workflow.WorkflowInfo.RetryTimeout = this.value;
};

// main function for updating tasks
function updateTasks() {
Expand Down Expand Up @@ -2071,6 +2102,16 @@
}, workflow, auth);
};

if (isInt(document.getElementById("wfretrycount").value) === false) {
window.Common.toastInfo(language.get("toast-workflow-retry-count-error"));
return;
}

if (isInt(document.getElementById("wfretrytimeout").value) === false) {
window.Common.toastInfo(language.get("toast-workflow-retry-timeout-error"));
return;
}

let wfIdStr = document.getElementById("wfid").value;
if (isInt(wfIdStr)) {
let workflowId = parseInt(wfIdStr);
Expand Down Expand Up @@ -2209,7 +2250,7 @@
initialWorkflow = JSON.parse(JSON.stringify(workflow));
removeworkflow.style.display = "block";
jsonEditorChanged = false;
openJsonView(JSON.stringify(workflow, null, '\t'));
//openJsonView(JSON.stringify(workflow, null, '\t'));
if (callback) {
callback();
} else {
Expand Down Expand Up @@ -2945,7 +2986,15 @@
let graph = val;

let xmlVal = '<Workflow xmlns="urn:wexflow-schema" id="' + workflow.WorkflowInfo.Id + '" name="' + window.Common.escape(workflow.WorkflowInfo.Name) + '" description="' + window.Common.escape(workflow.WorkflowInfo.Description) + '">\r\n';
xmlVal += '\t<Settings>\r\n\t\t<Setting name="launchType" value="' + launchType(workflow.WorkflowInfo.LaunchType) + '" />' + (workflow.WorkflowInfo.Period !== '' && workflow.WorkflowInfo.Period !== '00:00:00' ? ('\r\n\t\t<Setting name="period" value="' + workflow.WorkflowInfo.Period + '" />') : '') + (workflow.WorkflowInfo.CronExpression !== '' && workflow.WorkflowInfo.CronExpression !== null ? ('\r\n\t\t<Setting name="cronExpression" value="' + workflow.WorkflowInfo.CronExpression + '" />') : '') + '\r\n\t\t<Setting name="enabled" value="' + workflow.WorkflowInfo.IsEnabled + '" />\r\n\t\t<Setting name="approval" value="' + workflow.WorkflowInfo.IsApproval + '" />\r\n\t\t<Setting name="enableParallelJobs" value="' + workflow.WorkflowInfo.EnableParallelJobs + '" />\r\n\t</Settings>\r\n';
xmlVal += '\t<Settings>\r\n\t\t<Setting name="launchType" value="' + launchType(workflow.WorkflowInfo.LaunchType) + '" />'
+ (workflow.WorkflowInfo.Period !== '' && workflow.WorkflowInfo.Period !== '00:00:00' ? ('\r\n\t\t<Setting name="period" value="' + workflow.WorkflowInfo.Period + '" />') : '')
+ (workflow.WorkflowInfo.CronExpression !== '' && workflow.WorkflowInfo.CronExpression !== null ? ('\r\n\t\t<Setting name="cronExpression" value="' + workflow.WorkflowInfo.CronExpression + '" />') : '')
+ '\r\n\t\t<Setting name="enabled" value="' + workflow.WorkflowInfo.IsEnabled + '" />\r\n\t\t<Setting name="approval" value="'
+ workflow.WorkflowInfo.IsApproval + '" />'
+ '\r\n\t\t<Setting name="enableParallelJobs" value="' + workflow.WorkflowInfo.EnableParallelJobs + '" />'
+ '\r\n\t\t<Setting name="retryCount" value="' + workflow.WorkflowInfo.RetryCount + '" />'
+ '\r\n\t\t<Setting name="retryTimeout" value="' + workflow.WorkflowInfo.RetryTimeout + '" />'
+ '\r\n\t</Settings>\r\n';
if (workflow.WorkflowInfo.LocalVariables.length > 0) {
xmlVal += '\t<LocalVariables>\r\n';
for (let i = 0; i < workflow.WorkflowInfo.LocalVariables.length; i++) {
Expand Down Expand Up @@ -3160,6 +3209,9 @@
document.getElementById("wfapproval").checked = workflow.WorkflowInfo.IsApproval;
document.getElementById("wfenablepj").checked = workflow.WorkflowInfo.EnableParallelJobs;

document.getElementById("wfretrycount").value = workflow.WorkflowInfo.RetryCount;
document.getElementById("wfretrytimeout").value = workflow.WorkflowInfo.RetryTimeout;

// Local variables
document.getElementsByClassName("wf-local-vars")[0].innerHTML = "";
if (workflow.WorkflowInfo.LocalVariables.length > 0) {
Expand Down Expand Up @@ -3380,7 +3432,7 @@
searchworkflows.select();
searchworkflows.onkeyup = function (event) {
event.preventDefault();
if (event.keyCode === 13) { // Enter
if (event.key === 'Enter') { // Enter
let jbox = document.getElementsByClassName("jBox-content")[0];

window.Common.get(uri + "/search?s=" + searchworkflows.value,
Expand Down Expand Up @@ -3580,6 +3632,8 @@
"IsEnabled": document.getElementById("wfenabled").checked,
"IsApproval": document.getElementById("wfapproval").checked,
"EnableParallelJobs": document.getElementById("wfenablepj").checked,
"RetryCount": document.getElementById("wfretrycount").value,
"RetryTimeout": document.getElementById("wfretrytimeout").value,
"LocalVariables": []
},
"Tasks": []
Expand Down
27 changes: 24 additions & 3 deletions src/backend/Wexflow.Backend/js/language.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
languages["en"]["job-part-1"] = "The job ";
languages["en"]["job-approved"] = " was approved.";
languages["en"]["job-rejected"] = " was rejected.";
languages["en"]["workflows-server-error"] = "An error occurred while retrieving workflows. Check that Wexflow server is running correctly."
languages["en"]["workflows-server-error"] = "An error occurred while retrieving workflows. Check that Wexflow server is running correctly.";
languages["en"]["job-approved-error-part-1"] = "An error occurred while approving the job ";
languages["en"]["job-rejected-error-part-1"] = "An error occurred while rejecting the job ";
languages["en"]["job-approved-error-part-2"] = " of the workflow ";
Expand Down Expand Up @@ -236,6 +236,13 @@
languages["en"]["th-approved-on"] = "Approved on";
languages["en"]["toast-save-and-run"] = "Workflow saved and started successfully.";

languages["en"]["wfretrycount-label"] = "Task Retries";
languages["en"]["wfretrytimeout-label"] = "Task Retries Timeout";
languages["en"]["wfretrycount-title"] = "Number of task retries in case of failure";
languages["en"]["wfretrytimeout-title"] = "Waiting time between two tries in milliseconds";
languages["en"]["toast-workflow-retry-count-error"] = "Task Retries is invalid.";
languages["en"]["toast-workflow-retry-timeout-error"] = "Task Retries Timeout is invalid.";

//
// fr
//
Expand Down Expand Up @@ -296,7 +303,7 @@
languages["fr"]["job-part-1"] = "Le job ";
languages["fr"]["job-approved"] = " a été approuvé.";
languages["fr"]["job-rejected"] = " a été rejeté.";
languages["fr"]["workflows-server-error"] = "Une erreur s'est produite lors de la récupération de workflows. Vérifiez que le serveur tourne."
languages["fr"]["workflows-server-error"] = "Une erreur s'est produite lors de la récupération de workflows. Vérifiez que le serveur tourne.";
languages["fr"]["job-approved-error-part-1"] = "Une erreur s'est produite lors de l'approbation du job ";
languages["fr"]["job-rejected-error-part-1"] = "Une erreur s'est produite lors du rejet du job ";
languages["fr"]["job-approved-error-part-2"] = " du workflow ";
Expand Down Expand Up @@ -460,6 +467,13 @@
languages["fr"]["th-approved-on"] = "Approuvé le";
languages["fr"]["toast-save-and-run"] = "Workflow enregistré et démarré avec succès.";

languages["fr"]["wfretrycount-label"] = "Nombre de tentatives des tâches";
languages["fr"]["wfretrytimeout-label"] = "Timeout des tentatives des tâches";
languages["fr"]["wfretrycount-title"] = "Nombre de tentatives de tâche en cas d'échec";
languages["fr"]["wfretrytimeout-title"] = "Délai d'attente de tâche entre deux tentatives en millisecondes";
languages["fr"]["toast-workflow-retry-count-error"] = "Le nombre d'essais n'est pas au bon format.";
languages["fr"]["toast-workflow-retry-timeout-error"] = "Le nombre d'essais n'est pas au bon format.";

//
// da
//
Expand Down Expand Up @@ -520,7 +534,7 @@
languages["da"]["job-part-1"] = "Jobbet";
languages["da"]["job-approved"] = "blev godkendt.";
languages["da"]["job-rejected"] = "blev afvist.";
languages["da"]["workflows-server-error"] = "Der opstod en fejl under hentning af workflows. Kontroller, at Wexflow-server kører korrekt."
languages["da"]["workflows-server-error"] = "Der opstod en fejl under hentning af workflows. Kontroller, at Wexflow-server kører korrekt.";
languages["da"]["job-approved-error-part-1"] = "Der opstod en fejl under godkendelse af jobbet";
languages["da"]["job-rejected-error-part-1"] = "En fejl opstod under afvisning af jobbet";
languages["da"]["job-approved-error-part-2"] = "af opgavern";
Expand Down Expand Up @@ -684,6 +698,13 @@
languages["da"]["th-approved-on"] = "Godkendt på";
languages["da"]["toast-save-and-run"] = "Workflow gemt og startet med succes.";

languages["da"]["wfretrycount-label"] = "Opgaveforsøg igen";
languages["da"]["wfretrytimeout-label"] = "Timeout for Opgaveforsøg igen";
languages["da"]["wfretrycount-title"] = "Antal mislykkede opgaveforsøg";
languages["da"]["wfretrytimeout-title"] = "Ventetid mellem to forsøg i millisekunder";
languages["da"]["toast-workflow-retry-count-error"] = "Opgaveforsøg er ugyldige.";
languages["da"]["toast-workflow-retry-timeout-error"] = "Timeout for opgavegenforsøg er ugyldig.";

return {
codes: codes,
languages: languages
Expand Down
Loading

0 comments on commit 86cbbfe

Please sign in to comment.