From bdc30da8d9931b80bc756fe65b017b895402f82a Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 10:05:55 +0200 Subject: [PATCH 1/9] service/node resources added to Resources --- .../web/client/source/class/osparc/data/Resources.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/services/web/client/source/class/osparc/data/Resources.js b/services/web/client/source/class/osparc/data/Resources.js index 0fe785aaa79..b6f16468cd4 100644 --- a/services/web/client/source/class/osparc/data/Resources.js +++ b/services/web/client/source/class/osparc/data/Resources.js @@ -142,6 +142,11 @@ qx.Class.define("osparc.data.Resources", { method: "DELETE", url: statics.API + "/projects/{studyId}/nodes/{nodeId}" }, + getNodeResources: { + useCache: false, + method: "GET", + url: statics.API + "/projects/{studyId}/nodes/{nodeId}/resources" + }, addTag: { useCache: false, method: "PUT", @@ -257,6 +262,10 @@ qx.Class.define("osparc.data.Resources", { method: "GET", url: statics.API + "/catalog/services/{key}/{version}" }, + getResources: { + method: "GET", + url: statics.API + "/catalog/services/{key}/{version}/resources" + }, patch: { method: "PATCH", url: statics.API + "/catalog/services/{key}/{version}" From 07893ada38fd226fb9863146514d715371fbab73 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 10:19:19 +0200 Subject: [PATCH 2/9] fetch node/service resources --- .../source/class/osparc/servicecard/Large.js | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/services/web/client/source/class/osparc/servicecard/Large.js b/services/web/client/source/class/osparc/servicecard/Large.js index 5c120e72a4b..72f58eeb6a4 100644 --- a/services/web/client/source/class/osparc/servicecard/Large.js +++ b/services/web/client/source/class/osparc/servicecard/Large.js @@ -127,6 +127,9 @@ qx.Class.define("osparc.servicecard.Large", { description.addAt(editInTitle, 0); this._add(description); + const resources = this.__createResources(); + this._add(resources); + const rawMetadata = this.__createRawMetadata(); const more = new osparc.desktop.PanelView(this.tr("raw metadata"), rawMetadata).set({ caretSize: 14 @@ -282,6 +285,46 @@ qx.Class.define("osparc.servicecard.Large", { return osparc.servicecard.Utils.createDescription(this.getService(), maxHeight); }, + __createResources: function() { + const form = new qx.ui.form.Form(); + let promise = null; + if (this.getInstanceUuid()) { + const params = { + url: { + studyId: this.getStudy().getUuid(), + nodeId: this.getInstanceUuid() + } + }; + promise = osparc.data.Resources.fetch("studies", "getNodeResources", params); + } else { + const params = { + url: { + key: this.getService()["key"], + version: this.getService()["version"] + } + }; + promise = osparc.data.Resources.fetch("services", "getResources", params); + } + promise + .then(serviceResources => { + console.log(serviceResources); + /* + for (let [key, value] of Object.entries(fileMetadata)) { + const entry = new qx.ui.form.TextField(); + form.add(entry, key, null, key); + if (value) { + entry.setValue(value.toString()); + } + } + */ + }) + .catch(err => console.error(err)); + + const formRenderer = new qx.ui.form.renderer.Single(form); + formRenderer.setEnabled(false); + return formRenderer; + }, + __createRawMetadata: function() { const container = new qx.ui.container.Scroll(); container.add(new osparc.ui.basic.JsonTreeWidget(this.getService(), "serviceDescriptionSettings")); From 193cc6c5ab2dc8ecf0f84db86cceabb8b8e7eca2 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 10:57:56 +0200 Subject: [PATCH 3/9] fix Colleen Clancys --- .../web/client/source/class/osparc/component/form/Auto.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/web/client/source/class/osparc/component/form/Auto.js b/services/web/client/source/class/osparc/component/form/Auto.js index 376d34222e8..77fd3592248 100644 --- a/services/web/client/source/class/osparc/component/form/Auto.js +++ b/services/web/client/source/class/osparc/component/form/Auto.js @@ -529,6 +529,12 @@ qx.Class.define("osparc.component.form.Auto", { if (s.set.filter) { s.set.filter = RegExp(s.filter); } + if ("minimum" in s.set) { + control.setMinimum(s.set["minimum"]); + } + if ("maximum" in s.set) { + control.setMaximum(s.set["maximum"]); + } control.set(s.set); } control.key = key; From 0367f57dfa3522a3e57b0894173eb6fc588eaba3 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 11:35:13 +0200 Subject: [PATCH 4/9] showing service resources --- .../source/class/osparc/servicecard/Large.js | 28 ++++------ .../source/class/osparc/servicecard/Utils.js | 52 +++++++++++++++++++ 2 files changed, 61 insertions(+), 19 deletions(-) diff --git a/services/web/client/source/class/osparc/servicecard/Large.js b/services/web/client/source/class/osparc/servicecard/Large.js index 72f58eeb6a4..802a4dbda63 100644 --- a/services/web/client/source/class/osparc/servicecard/Large.js +++ b/services/web/client/source/class/osparc/servicecard/Large.js @@ -286,7 +286,8 @@ qx.Class.define("osparc.servicecard.Large", { }, __createResources: function() { - const form = new qx.ui.form.Form(); + const resourcesLayout = osparc.servicecard.Utils.createResourcesInfo(); + resourcesLayout.exclude(); let promise = null; if (this.getInstanceUuid()) { const params = { @@ -298,31 +299,20 @@ qx.Class.define("osparc.servicecard.Large", { promise = osparc.data.Resources.fetch("studies", "getNodeResources", params); } else { const params = { - url: { - key: this.getService()["key"], - version: this.getService()["version"] - } + url: osparc.data.Resources.getServiceUrl( + this.getService()["key"], + this.getService()["version"] + ) }; promise = osparc.data.Resources.fetch("services", "getResources", params); } promise .then(serviceResources => { - console.log(serviceResources); - /* - for (let [key, value] of Object.entries(fileMetadata)) { - const entry = new qx.ui.form.TextField(); - form.add(entry, key, null, key); - if (value) { - entry.setValue(value.toString()); - } - } - */ + resourcesLayout.show(); + osparc.servicecard.Utils.resourcesToResourcesInfo(resourcesLayout, serviceResources); }) .catch(err => console.error(err)); - - const formRenderer = new qx.ui.form.renderer.Single(form); - formRenderer.setEnabled(false); - return formRenderer; + return resourcesLayout; }, __createRawMetadata: function() { diff --git a/services/web/client/source/class/osparc/servicecard/Utils.js b/services/web/client/source/class/osparc/servicecard/Utils.js index 5237d051c96..0430cfb7872 100644 --- a/services/web/client/source/class/osparc/servicecard/Utils.js +++ b/services/web/client/source/class/osparc/servicecard/Utils.js @@ -193,6 +193,58 @@ qx.Class.define("osparc.servicecard.Utils", { return descriptionLayout; }, + createResourcesInfo: function() { + const resourcesLayout = new qx.ui.container.Composite(new qx.ui.layout.VBox(5).set({ + alignY: "middle" + })); + + const label = new qx.ui.basic.Label(qx.locale.Manager.tr("Resources")).set({ + font: "title-12" + }); + resourcesLayout.add(label); + + const grid = new qx.ui.layout.Grid(5, 3); + grid.setColumnAlign(0, "right", "middle"); + grid.setColumnAlign(1, "left", "middle"); + const resourcesInfo = new qx.ui.container.Composite(grid).set({ + allowGrowX: false, + alignX: "center", + alignY: "middle" + }); + resourcesLayout.add(resourcesInfo); + + return resourcesLayout; + }, + + resourcesToResourcesInfo: function(resourcesLayout, resourcesInfo) { + const layout = resourcesLayout.getChildren()[1]; + let row = 0; + Object.keys(resourcesInfo).forEach(resourceKey => { + const resourceInfo = resourcesInfo[resourceKey]; + layout.add(new qx.ui.basic.Label(resourceKey).set({ + font: "title-12" + }), { + row, + column: 0 + }); + Object.keys(resourceInfo).forEach(resourceInfoKey => { + layout.add(new qx.ui.basic.Label(resourceInfoKey).set({ + font: "title-12" + }), { + row, + column: 1 + }); + layout.add(new qx.ui.basic.Label(resourceInfo[resourceInfoKey]).set({ + font: "text-12" + }), { + row, + column: 2 + }); + }); + row++; + }); + }, + createExtraInfo: function(extraInfos) { const grid = new qx.ui.layout.Grid(5, 3); grid.setColumnAlign(0, "right", "middle"); From 98a7a85a9ffe8581fd4836fb352fecf1f725f188 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 11:37:33 +0200 Subject: [PATCH 5/9] minor --- .../client/source/class/osparc/servicecard/Utils.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/services/web/client/source/class/osparc/servicecard/Utils.js b/services/web/client/source/class/osparc/servicecard/Utils.js index 0430cfb7872..25cbe7da207 100644 --- a/services/web/client/source/class/osparc/servicecard/Utils.js +++ b/services/web/client/source/class/osparc/servicecard/Utils.js @@ -220,26 +220,30 @@ qx.Class.define("osparc.servicecard.Utils", { const layout = resourcesLayout.getChildren()[1]; let row = 0; Object.keys(resourcesInfo).forEach(resourceKey => { + let column = 0; const resourceInfo = resourcesInfo[resourceKey]; layout.add(new qx.ui.basic.Label(resourceKey).set({ font: "title-12" }), { row, - column: 0 + column }); + column++; Object.keys(resourceInfo).forEach(resourceInfoKey => { layout.add(new qx.ui.basic.Label(resourceInfoKey).set({ font: "title-12" }), { row, - column: 1 + column }); - layout.add(new qx.ui.basic.Label(resourceInfo[resourceInfoKey]).set({ + column++; + layout.add(new qx.ui.basic.Label(String(resourceInfo[resourceInfoKey])).set({ font: "text-12" }), { row, - column: 2 + column }); + column++; }); row++; }); From 1c4968153a90b491c5ca7febbacbd33f921327f0 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 11:39:34 +0200 Subject: [PATCH 6/9] cosmetics --- services/web/client/source/class/osparc/servicecard/Utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/client/source/class/osparc/servicecard/Utils.js b/services/web/client/source/class/osparc/servicecard/Utils.js index 25cbe7da207..65482449d2f 100644 --- a/services/web/client/source/class/osparc/servicecard/Utils.js +++ b/services/web/client/source/class/osparc/servicecard/Utils.js @@ -208,7 +208,7 @@ qx.Class.define("osparc.servicecard.Utils", { grid.setColumnAlign(1, "left", "middle"); const resourcesInfo = new qx.ui.container.Composite(grid).set({ allowGrowX: false, - alignX: "center", + alignX: "left", alignY: "middle" }); resourcesLayout.add(resourcesInfo); From e5d24f2cdc58f6c77d1ab41f958df7db1cd9509a Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 11:58:52 +0200 Subject: [PATCH 7/9] showing also nodesInStudy --- .../osparc/component/node/BaseNodeView.js | 2 +- .../osparc/component/widget/NodesTree.js | 2 +- .../osparc/component/workbench/WorkbenchUI.js | 2 +- .../osparc/dashboard/ResourceMoreOptions.js | 2 +- .../source/class/osparc/data/Resources.js | 19 ++++++++++++++----- .../source/class/osparc/servicecard/Large.js | 14 ++++++++++++-- .../client/source/class/osparc/store/Store.js | 4 ++++ 7 files changed, 34 insertions(+), 11 deletions(-) diff --git a/services/web/client/source/class/osparc/component/node/BaseNodeView.js b/services/web/client/source/class/osparc/component/node/BaseNodeView.js index 58fe90bf0eb..4c186d80d6f 100644 --- a/services/web/client/source/class/osparc/component/node/BaseNodeView.js +++ b/services/web/client/source/class/osparc/component/node/BaseNodeView.js @@ -180,7 +180,7 @@ qx.Class.define("osparc.component.node.BaseNodeView", { }, __openServiceDetails: function() { - const serviceDetails = new osparc.servicecard.Large(this.getNode().getMetaData(), this.getNode().getNodeId()); + const serviceDetails = new osparc.servicecard.Large(this.getNode().getMetaData(), this.getNode().getNodeId(), this.getStudy()); const title = this.tr("Service information"); const width = 600; const height = 700; diff --git a/services/web/client/source/class/osparc/component/widget/NodesTree.js b/services/web/client/source/class/osparc/component/widget/NodesTree.js index d115134cc46..8aa642eee0f 100644 --- a/services/web/client/source/class/osparc/component/widget/NodesTree.js +++ b/services/web/client/source/class/osparc/component/widget/NodesTree.js @@ -244,7 +244,7 @@ qx.Class.define("osparc.component.widget.NodesTree", { osparc.ui.window.Window.popUpInWindow(studyDetails, title, width, height); } else { const node = study.getWorkbench().getNode(nodeId); - const serviceDetails = new osparc.servicecard.Large(node.getMetaData(), nodeId); + const serviceDetails = new osparc.servicecard.Large(node.getMetaData(), nodeId, study); const title = this.tr("Service information"); const width = 600; const height = 700; diff --git a/services/web/client/source/class/osparc/component/workbench/WorkbenchUI.js b/services/web/client/source/class/osparc/component/workbench/WorkbenchUI.js index 0de61e14437..db8485380f9 100644 --- a/services/web/client/source/class/osparc/component/workbench/WorkbenchUI.js +++ b/services/web/client/source/class/osparc/component/workbench/WorkbenchUI.js @@ -1645,7 +1645,7 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", { __openNodeInfo: function(nodeId) { if (nodeId) { const node = this.getStudy().getWorkbench().getNode(nodeId); - const serviceDetails = new osparc.servicecard.Large(node.getMetaData(), nodeId); + const serviceDetails = new osparc.servicecard.Large(node.getMetaData(), nodeId, this.getStudy()); const title = this.tr("Service information"); const width = 600; const height = 700; diff --git a/services/web/client/source/class/osparc/dashboard/ResourceMoreOptions.js b/services/web/client/source/class/osparc/dashboard/ResourceMoreOptions.js index d0415b71260..e0f421d36a7 100644 --- a/services/web/client/source/class/osparc/dashboard/ResourceMoreOptions.js +++ b/services/web/client/source/class/osparc/dashboard/ResourceMoreOptions.js @@ -200,7 +200,7 @@ qx.Class.define("osparc.dashboard.ResourceMoreOptions", { const title = this.tr("Information"); const icon = "@FontAwesome5Solid/info"; const resourceData = this.__resourceData; - const infoCard = osparc.utils.Resources.isService(resourceData) ? new osparc.servicecard.Large(resourceData, null, false) : new osparc.studycard.Large(resourceData, false); + const infoCard = osparc.utils.Resources.isService(resourceData) ? new osparc.servicecard.Large(resourceData, null, null, false) : new osparc.studycard.Large(resourceData, false); infoCard.addListener("openAccessRights", () => this.openAccessRights()); infoCard.addListener("openClassifiers", () => this.openClassfiers()); infoCard.addListener("openQuality", () => this.openQuality()); diff --git a/services/web/client/source/class/osparc/data/Resources.js b/services/web/client/source/class/osparc/data/Resources.js index b6f16468cd4..46b1e5d88f2 100644 --- a/services/web/client/source/class/osparc/data/Resources.js +++ b/services/web/client/source/class/osparc/data/Resources.js @@ -142,11 +142,6 @@ qx.Class.define("osparc.data.Resources", { method: "DELETE", url: statics.API + "/projects/{studyId}/nodes/{nodeId}" }, - getNodeResources: { - useCache: false, - method: "GET", - url: statics.API + "/projects/{studyId}/nodes/{nodeId}/resources" - }, addTag: { useCache: false, method: "PUT", @@ -159,6 +154,20 @@ qx.Class.define("osparc.data.Resources", { } } }, + /* + * NODES + */ + "nodesInStudy": { + idField: "nodeId", + useCache: false, + endpoints: { + getResources: { + useCache: false, + method: "GET", + url: statics.API + "/projects/{studyId}/nodes/{nodeId}/resources" + } + } + }, /* * SNAPSHOTS */ diff --git a/services/web/client/source/class/osparc/servicecard/Large.js b/services/web/client/source/class/osparc/servicecard/Large.js index 802a4dbda63..21ad1b9016d 100644 --- a/services/web/client/source/class/osparc/servicecard/Large.js +++ b/services/web/client/source/class/osparc/servicecard/Large.js @@ -24,7 +24,7 @@ qx.Class.define("osparc.servicecard.Large", { * @param instanceUuid {String} uuid of the service instance * @param openOptions {Boolean} open edit options in new window or fire event */ - construct: function(serviceData, instanceUuid = null, openOptions = true) { + construct: function(serviceData, instanceUuid = null, study = null, openOptions = true) { this.base(arguments); this.set({ @@ -39,6 +39,10 @@ qx.Class.define("osparc.servicecard.Large", { this.setInstanceUuid(instanceUuid); } + if (study) { + this.setStudy(study); + } + if (openOptions !== undefined) { this.setOpenOptions(openOptions); } @@ -72,6 +76,12 @@ qx.Class.define("osparc.servicecard.Large", { nullable: true }, + study: { + check: "osparc.data.model.Study", + init: null, + nullable: true + }, + openOptions: { check: "Boolean", init: true, @@ -296,7 +306,7 @@ qx.Class.define("osparc.servicecard.Large", { nodeId: this.getInstanceUuid() } }; - promise = osparc.data.Resources.fetch("studies", "getNodeResources", params); + promise = osparc.data.Resources.fetch("nodesInStudy", "getResources", params); } else { const params = { url: osparc.data.Resources.getServiceUrl( diff --git a/services/web/client/source/class/osparc/store/Store.js b/services/web/client/source/class/osparc/store/Store.js index 8403c28b742..0e84eaaef84 100644 --- a/services/web/client/source/class/osparc/store/Store.js +++ b/services/web/client/source/class/osparc/store/Store.js @@ -62,6 +62,10 @@ qx.Class.define("osparc.store.Store", { check: "Array", init: [] }, + nodesInStudy: { + check: "Array", + init: [] + }, snapshots: { check: "Array", init: [], From cd07bd3b68cbae874bbb8653b14f47f989639529 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 12:15:17 +0200 Subject: [PATCH 8/9] fix Store issues --- .../source/class/osparc/data/Resources.js | 17 ++++++++++++----- .../source/class/osparc/servicecard/Large.js | 4 ++-- .../client/source/class/osparc/store/Store.js | 6 +++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/services/web/client/source/class/osparc/data/Resources.js b/services/web/client/source/class/osparc/data/Resources.js index 46b1e5d88f2..e869c8bda47 100644 --- a/services/web/client/source/class/osparc/data/Resources.js +++ b/services/web/client/source/class/osparc/data/Resources.js @@ -157,7 +157,7 @@ qx.Class.define("osparc.data.Resources", { /* * NODES */ - "nodesInStudy": { + "nodesInStudyResources": { idField: "nodeId", useCache: false, endpoints: { @@ -168,6 +168,17 @@ qx.Class.define("osparc.data.Resources", { } } }, + "serviceResources": { + idField: ["key", "version"], + useCache: false, + endpoints: { + getResources: { + useCache: false, + method: "GET", + url: statics.API + "/catalog/services/{key}/{version}/resources" + } + } + }, /* * SNAPSHOTS */ @@ -271,10 +282,6 @@ qx.Class.define("osparc.data.Resources", { method: "GET", url: statics.API + "/catalog/services/{key}/{version}" }, - getResources: { - method: "GET", - url: statics.API + "/catalog/services/{key}/{version}/resources" - }, patch: { method: "PATCH", url: statics.API + "/catalog/services/{key}/{version}" diff --git a/services/web/client/source/class/osparc/servicecard/Large.js b/services/web/client/source/class/osparc/servicecard/Large.js index 21ad1b9016d..c5396e9546a 100644 --- a/services/web/client/source/class/osparc/servicecard/Large.js +++ b/services/web/client/source/class/osparc/servicecard/Large.js @@ -306,7 +306,7 @@ qx.Class.define("osparc.servicecard.Large", { nodeId: this.getInstanceUuid() } }; - promise = osparc.data.Resources.fetch("nodesInStudy", "getResources", params); + promise = osparc.data.Resources.fetch("nodesInStudyResources", "getResources", params); } else { const params = { url: osparc.data.Resources.getServiceUrl( @@ -314,7 +314,7 @@ qx.Class.define("osparc.servicecard.Large", { this.getService()["version"] ) }; - promise = osparc.data.Resources.fetch("services", "getResources", params); + promise = osparc.data.Resources.fetch("serviceResources", "getResources", params); } promise .then(serviceResources => { diff --git a/services/web/client/source/class/osparc/store/Store.js b/services/web/client/source/class/osparc/store/Store.js index 0e84eaaef84..c9ce4224717 100644 --- a/services/web/client/source/class/osparc/store/Store.js +++ b/services/web/client/source/class/osparc/store/Store.js @@ -62,7 +62,11 @@ qx.Class.define("osparc.store.Store", { check: "Array", init: [] }, - nodesInStudy: { + nodesInStudyResources: { + check: "Array", + init: [] + }, + serviceResources: { check: "Array", init: [] }, From ac0a06fe01f92371315eb6ff58d9e8569cb675b9 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Fri, 22 Apr 2022 12:23:43 +0200 Subject: [PATCH 9/9] show ram in GB --- .../client/source/class/osparc/servicecard/Utils.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/web/client/source/class/osparc/servicecard/Utils.js b/services/web/client/source/class/osparc/servicecard/Utils.js index 65482449d2f..42d3078de6c 100644 --- a/services/web/client/source/class/osparc/servicecard/Utils.js +++ b/services/web/client/source/class/osparc/servicecard/Utils.js @@ -222,7 +222,11 @@ qx.Class.define("osparc.servicecard.Utils", { Object.keys(resourcesInfo).forEach(resourceKey => { let column = 0; const resourceInfo = resourcesInfo[resourceKey]; - layout.add(new qx.ui.basic.Label(resourceKey).set({ + let label = resourceKey; + if (resourceKey === "RAM") { + label += " (GB)"; + } + layout.add(new qx.ui.basic.Label(label).set({ font: "title-12" }), { row, @@ -237,7 +241,11 @@ qx.Class.define("osparc.servicecard.Utils", { column }); column++; - layout.add(new qx.ui.basic.Label(String(resourceInfo[resourceInfoKey])).set({ + let value = resourceInfo[resourceInfoKey]; + if (resourceKey === "RAM") { + value = osparc.utils.Utils.bytesToGB(value); + } + layout.add(new qx.ui.basic.Label(String(value)).set({ font: "text-12" }), { row,