]> git.proxmox.com Git - proxmox-widget-toolkit.git/commitdiff
panel: add StatusView from PVE
authorDominik Csapak <d.csapak@proxmox.com>
Mon, 19 Apr 2021 11:00:44 +0000 (13:00 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 22 Apr 2021 11:25:22 +0000 (13:25 +0200)
with 2 minor fixups:
* one lint error
* binding of the 'updateValues' function in the event
  (we want to avoid breaking this when used in a context where
  a controller exists, in that case using a string will only look in
  the controller and not in the component itself anymore, so use
  the function directly)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/Makefile
src/panel/StatusView.js [new file with mode: 0644]

index f97c74a2757e84904c8f73e10c6cbb3a66e5560b..9e3ad4ec416c5241ea1271f719c3655873d70b25 100644 (file)
@@ -53,6 +53,7 @@ JSSRC=                                        \
        panel/ACMEAccount.js            \
        panel/ACMEPlugin.js             \
        panel/ACMEDomains.js            \
+       panel/StatusView.js             \
        window/Edit.js                  \
        window/PasswordEdit.js          \
        window/SafeDestroy.js           \
diff --git a/src/panel/StatusView.js b/src/panel/StatusView.js
new file mode 100644 (file)
index 0000000..059508a
--- /dev/null
@@ -0,0 +1,125 @@
+Ext.define('Proxmox.panel.StatusView', {
+    extend: 'Ext.panel.Panel',
+    alias: 'widget.pmxStatusView',
+
+    layout: {
+       type: 'column',
+    },
+
+    title: gettext('Status'),
+
+    getRecordValue: function(key, store) {
+       if (!key) {
+           throw "no key given";
+       }
+       var me = this;
+
+       if (store === undefined) {
+           store = me.getStore();
+       }
+
+       var rec = store.getById(key);
+       if (rec) {
+           return rec.data.value;
+       }
+
+       return '';
+    },
+
+    fieldRenderer: function(val, max) {
+       if (max === undefined) {
+           return val;
+       }
+
+       if (!Ext.isNumeric(max) || max === 1) {
+           return Proxmox.Utils.render_usage(val);
+       }
+       return Proxmox.Utils.render_size_usage(val, max);
+    },
+
+    fieldCalculator: function(used, max) {
+       if (!Ext.isNumeric(max) && Ext.isNumeric(used)) {
+           return used;
+       } else if (!Ext.isNumeric(used)) {
+           /* we come here if the field is from a node
+            * where the records are not mem and maxmem
+            * but mem.used and mem.total
+            */
+           if (used.used !== undefined &&
+               used.total !== undefined) {
+               return used.used/used.total;
+           }
+       }
+
+       return used/max;
+    },
+
+    updateField: function(field) {
+       var me = this;
+       var renderer = me.fieldRenderer;
+       if (Ext.isFunction(field.renderer)) {
+           renderer = field.renderer;
+       }
+       if (field.multiField === true) {
+           field.updateValue(renderer.call(field, me.getStore().getRecord()));
+       } else if (field.textField !== undefined) {
+           field.updateValue(renderer.call(field, me.getRecordValue(field.textField)));
+       } else if (field.valueField !== undefined) {
+           var used = me.getRecordValue(field.valueField);
+           /* string and int */
+           var max = field.maxField !== undefined ? me.getRecordValue(field.maxField) : 1;
+
+           var calculate = me.fieldCalculator;
+
+           if (Ext.isFunction(field.calculate)) {
+               calculate = field.calculate;
+           }
+           field.updateValue(renderer.call(field, used, max), calculate(used, max));
+       }
+    },
+
+    getStore: function() {
+       var me = this;
+       if (!me.rstore) {
+           throw "there is no rstore";
+       }
+
+       return me.rstore;
+    },
+
+    updateTitle: function() {
+       var me = this;
+       me.setTitle(me.getRecordValue('name'));
+    },
+
+    updateValues: function(store, records, success) {
+       if (!success) {
+           return; // do not update if store load was not successful
+       }
+       var me = this;
+       var itemsToUpdate = me.query('pmxInfoWidget');
+
+       itemsToUpdate.forEach(me.updateField, me);
+
+       me.updateTitle(store);
+    },
+
+    initComponent: function() {
+       var me = this;
+
+       if (!me.rstore) {
+           throw "no rstore given";
+       }
+
+       if (!me.title) {
+           throw "no title given";
+       }
+
+       Proxmox.Utils.monStoreErrors(me, me.rstore);
+
+       me.callParent();
+
+       me.mon(me.rstore, 'load', me.updateValues, me);
+    },
+
+});