diff --git a/services/static-webserver/client/source/class/osparc/data/Resources.js b/services/static-webserver/client/source/class/osparc/data/Resources.js index c0198d8e59a6..3e9b538aeecb 100644 --- a/services/static-webserver/client/source/class/osparc/data/Resources.js +++ b/services/static-webserver/client/source/class/osparc/data/Resources.js @@ -350,9 +350,9 @@ qx.Class.define("osparc.data.Resources", { "runs": { useCache: false, // handled in osparc.store.Jobs endpoints: { - getPageLatestActive: { + getPageLatest: { method: "GET", - url: statics.API + "/computations/-/iterations/latest?offset={offset}&limit={limit}&order_by=%7B%22field%22:%22submitted_at%22,%22direction%22:%22desc%22%7D&filter_only_running=true" + url: statics.API + "/computations/-/iterations/latest?offset={offset}&limit={limit}&order_by=%7B%22field%22:%22submitted_at%22,%22direction%22:%22desc%22%7D&filter_only_running={runningOnly}" }, getPageHistory: { method: "GET", diff --git a/services/static-webserver/client/source/class/osparc/jobs/ActivityOverview.js b/services/static-webserver/client/source/class/osparc/jobs/ActivityOverview.js index 49eb6785bbb5..348ba4e5c873 100644 --- a/services/static-webserver/client/source/class/osparc/jobs/ActivityOverview.js +++ b/services/static-webserver/client/source/class/osparc/jobs/ActivityOverview.js @@ -55,7 +55,8 @@ qx.Class.define("osparc.jobs.ActivityOverview", { const projectUuid = projectData["uuid"]; const includeChildren = true; - const runsTable = new osparc.jobs.RunsTable(projectUuid, includeChildren); + const runningOnly = false; + const runsTable = new osparc.jobs.RunsTable(projectUuid, includeChildren, runningOnly); const columnModel = runsTable.getTableColumnModel(); // Hide project name column columnModel.setColumnVisible(osparc.jobs.RunsTable.COLS.PROJECT_NAME.column, false); diff --git a/services/static-webserver/client/source/class/osparc/jobs/RunsBrowser.js b/services/static-webserver/client/source/class/osparc/jobs/RunsBrowser.js index 99e7ac2a4dbe..1c8907451770 100644 --- a/services/static-webserver/client/source/class/osparc/jobs/RunsBrowser.js +++ b/services/static-webserver/client/source/class/osparc/jobs/RunsBrowser.js @@ -25,16 +25,17 @@ qx.Class.define("osparc.jobs.RunsBrowser", { this._setLayout(new qx.ui.layout.VBox(10)); const jobsFilter = this.getChildControl("jobs-filter"); - const jobsTable = this.getChildControl("runs-table"); + const runningCB = this.getChildControl("running-only-cb"); + const runsTable = this.getChildControl("runs-table"); jobsFilter.getChildControl("textfield").addListener("input", e => { const filterText = e.getData(); - jobsTable.getTableModel().setFilters({ - text: filterText, - }); + runsTable.getTableModel().setFilterString(filterText); }); - this.__reloadInterval = setInterval(() => this.getChildControl("runs-table").reloadRuns(), 10*1000); + runningCB.bind("value", runsTable, "runningOnly"); + + this.__reloadInterval = setInterval(() => this.reloadRuns(), 10*1000); }, events: { @@ -60,10 +61,18 @@ qx.Class.define("osparc.jobs.RunsBrowser", { flex: 1 }); break; + case "running-only-cb": + control = new qx.ui.form.CheckBox().set({ + value: true, + label: qx.locale.Manager.tr("Active only"), + }); + this.getChildControl("header-filter").add(control); + break; case "runs-table": { const projectUuid = null; const includeChildren = false; - control = new osparc.jobs.RunsTable(projectUuid, includeChildren); + const runningOnly = true; + control = new osparc.jobs.RunsTable(projectUuid, includeChildren, runningOnly); control.addListener("runSelected", e => this.fireDataEvent("runSelected", e.getData())); this._add(control); break; diff --git a/services/static-webserver/client/source/class/osparc/jobs/RunsTable.js b/services/static-webserver/client/source/class/osparc/jobs/RunsTable.js index 5be49374d69d..851fb42b4278 100644 --- a/services/static-webserver/client/source/class/osparc/jobs/RunsTable.js +++ b/services/static-webserver/client/source/class/osparc/jobs/RunsTable.js @@ -19,10 +19,17 @@ qx.Class.define("osparc.jobs.RunsTable", { extend: qx.ui.table.Table, - construct: function(projectUuid = null, includeChildren = false) { + construct: function(projectUuid = null, includeChildren = false, runningOnly = true) { this.base(arguments); + this.set({ + projectUuid, + runningOnly, + }); + const model = new osparc.jobs.RunsTableModel(projectUuid, includeChildren); + this.bind("projectUuid", model, "projectUuid"); + this.bind("runningOnly", model, "runningOnly"); this.setTableModel(model); this.set({ @@ -47,6 +54,22 @@ qx.Class.define("osparc.jobs.RunsTable", { this.__attachHandlers(); }, + properties: { + projectUuid: { + check: "String", + init: null, + nullable: true, + event: "changeProjectUuid", + }, + + runningOnly: { + check: "Boolean", + init: true, + nullable: false, + event: "changeRunningOnly", + }, + }, + events: { "runSelected": "qx.event.type.Data", }, diff --git a/services/static-webserver/client/source/class/osparc/jobs/RunsTableModel.js b/services/static-webserver/client/source/class/osparc/jobs/RunsTableModel.js index 2ffcf8dc641b..8128363b802c 100644 --- a/services/static-webserver/client/source/class/osparc/jobs/RunsTableModel.js +++ b/services/static-webserver/client/source/class/osparc/jobs/RunsTableModel.js @@ -22,9 +22,12 @@ qx.Class.define("osparc.jobs.RunsTableModel", { construct: function(projectUuid = null, includeChildren = false) { this.base(arguments); - this.__projectUuid = projectUuid; this.__includeChildren = includeChildren; + this.set({ + projectUuid, + }); + const jobsCols = osparc.jobs.RunsTable.COLS; const colLabels = Object.values(jobsCols).map(col => col.label); const colIDs = Object.values(jobsCols).map(col => col.id); @@ -38,6 +41,22 @@ qx.Class.define("osparc.jobs.RunsTableModel", { }, properties: { + projectUuid: { + check: "String", + init: null, + nullable: true, + event: "changeProjectUuid", + apply: "reloadData", + }, + + runningOnly: { + check: "Boolean", + init: true, + nullable: false, + event: "changeRunningOnly", + apply: "reloadData", + }, + isFetching: { check: "Boolean", init: false, @@ -51,6 +70,12 @@ qx.Class.define("osparc.jobs.RunsTableModel", { direction: "desc" } }, + + filterString: { + nullable: true, + check : "String", + init: "", + }, }, statics: { @@ -58,19 +83,19 @@ qx.Class.define("osparc.jobs.RunsTableModel", { }, members: { - __projectUuid: null, __includeChildren: false, // overridden _loadRowCount() { const offset = 0; const limit = 1; + const orderBy = this.getOrderBy(); const resolveWResponse = true; let promise; - if (this.__projectUuid) { - promise = osparc.store.Jobs.getInstance().fetchJobsHistory(this.__projectUuid, this.__includeChildren, offset, limit, JSON.stringify(this.getOrderBy()), resolveWResponse); + if (this.getProjectUuid()) { + promise = osparc.store.Jobs.getInstance().fetchJobsHistory(this.getProjectUuid(), this.__includeChildren, offset, limit, orderBy, resolveWResponse); } else { - promise = osparc.store.Jobs.getInstance().fetchJobsActive(offset, limit, JSON.stringify(this.getOrderBy()), resolveWResponse); + promise = osparc.store.Jobs.getInstance().fetchJobsActive(this.getRunningOnly(), offset, limit, orderBy, resolveWResponse); } promise .then(resp => { @@ -88,11 +113,12 @@ qx.Class.define("osparc.jobs.RunsTableModel", { const lastRow = Math.min(qxLastRow, this._rowCount - 1); // Returns a request promise with given offset and limit const getFetchPromise = (offset, limit) => { + const orderBy = this.getOrderBy(); let promise; - if (this.__projectUuid) { - promise = osparc.store.Jobs.getInstance().fetchJobsHistory(this.__projectUuid, this.__includeChildren, offset, limit, JSON.stringify(this.getOrderBy())); + if (this.getProjectUuid()) { + promise = osparc.store.Jobs.getInstance().fetchJobsHistory(this.getProjectUuid(), this.__includeChildren, offset, limit, orderBy); } else { - promise = osparc.store.Jobs.getInstance().fetchJobsActive(offset, limit, JSON.stringify(this.getOrderBy())); + promise = osparc.store.Jobs.getInstance().fetchJobsActive(this.getRunningOnly(), offset, limit, orderBy); } return promise .then(jobs => { diff --git a/services/static-webserver/client/source/class/osparc/store/Jobs.js b/services/static-webserver/client/source/class/osparc/store/Jobs.js index 4b551fee386d..e8e0ea4a5e4e 100644 --- a/services/static-webserver/client/source/class/osparc/store/Jobs.js +++ b/services/static-webserver/client/source/class/osparc/store/Jobs.js @@ -38,6 +38,7 @@ qx.Class.define("osparc.store.Jobs", { members: { fetchJobsActive: function( + runningOnly = true, offset = 0, limit = this.self().SERVER_MAX_LIMIT, orderBy = { @@ -48,6 +49,7 @@ qx.Class.define("osparc.store.Jobs", { ) { const params = { url: { + runningOnly, offset, limit, orderBy: JSON.stringify(orderBy), @@ -56,9 +58,11 @@ qx.Class.define("osparc.store.Jobs", { const options = { resolveWResponse: true }; - return osparc.data.Resources.fetch("runs", "getPageLatestActive", params, options) + return osparc.data.Resources.fetch("runs", "getPageLatest", params, options) .then(jobsResp => { - this.fireDataEvent("changeJobsActive", jobsResp["_meta"]["total"]); + if (runningOnly) { + this.fireDataEvent("changeJobsActive", jobsResp["_meta"]["total"]); + } const jobsActive = []; if ("data" in jobsResp) { jobsResp["data"].forEach(jobActiveData => {