]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/dc/Summary.js
gui: let users choose the number of columns
[pve-manager.git] / www / manager6 / dc / Summary.js
index f984f58f1df026b4c76cd6062c3b7795c6007564..5e613eb11743f04bb11aceff420c199f0e630364 100644 (file)
@@ -4,13 +4,13 @@ Ext.define('PVE.dc.Summary', {
 
     scrollable: true,
 
-    bodyPadding: '10 0 0 0',
+    bodyPadding: 5,
 
     layout: 'column',
 
     defaults: {
-       width: 762,
-       padding: '0 0 10 10'
+       padding: 5,
+       columnWidth: 1,
     },
 
     items: [
@@ -25,8 +25,8 @@ Ext.define('PVE.dc.Summary', {
        {
            title: gettext('Resources'),
            xtype: 'panel',
-           height: 250,
-           bodyPadding: '0 0 10 0',
+           minHeight: 250,
+           bodyPadding: 5,
            layout: 'hbox',
            defaults: {
                xtype: 'proxmoxGauge',
@@ -51,9 +51,34 @@ Ext.define('PVE.dc.Summary', {
            itemId: 'nodeview',
            xtype: 'pveDcNodeView',
            height: 250
+       },
+       {
+           title: gettext('Subscriptions'),
+           height: 220,
+           items: [
+               {
+                   itemId: 'subscriptions',
+                   xtype: 'pveHealthWidget',
+                   userCls: 'pointer',
+                   listeners: {
+                       element: 'el',
+                       click: function() {
+                           if (this.component.userCls === 'pointer') {
+                               window.open('https://www.proxmox.com/en/proxmox-ve/pricing', '_blank');
+                           }
+                       }
+                   }
+               }
+           ]
        }
     ],
 
+    listeners: {
+       resize: function(panel) {
+           PVE.Utils.updateColumns(panel);
+       },
+    },
+
     initComponent: function() {
         var me = this;
 
@@ -200,10 +225,76 @@ Ext.define('PVE.dc.Summary', {
        var dcHealth = me.getComponent('dcHealth');
        me.mon(rstore, 'load', dcHealth.updateStatus, dcHealth);
 
+       var subs = me.down('#subscriptions');
+       me.mon(rstore, 'load', function(store, records, success) {
+           var i;
+           var level;
+           var mixed = false;
+           for (i = 0; i < records.length; i++) {
+               if (records[i].get('type') !== 'node') {
+                   continue;
+               }
+               var node = records[i];
+               if (node.get('status') === 'offline') {
+                   continue;
+               }
+
+               var curlevel = node.get('level');
+
+               if (curlevel === '') { // no subscription trumps all, set and break
+                   level = '';
+                   break;
+               }
+
+               if (level === undefined) { // save level
+                   level = curlevel;
+               } else if (level !== curlevel) { // detect different levels
+                   mixed = true;
+               }
+           }
+
+           var data = {
+               title: Proxmox.Utils.unknownText,
+               text: Proxmox.Utils.unknownText,
+               iconCls: PVE.Utils.get_health_icon(undefined, true)
+           };
+           if (level === '') {
+               data = {
+                   title: gettext('No Subscription'),
+                   iconCls: PVE.Utils.get_health_icon('critical', true),
+                   text: gettext('You have at least one node without subscription.')
+               };
+               subs.setUserCls('pointer');
+           } else if (mixed) {
+               data = {
+                   title: gettext('Mixed Subscriptions'),
+                   iconCls: PVE.Utils.get_health_icon('warning', true),
+                   text: gettext('Warning: Your subscription levels are not the same.')
+               };
+               subs.setUserCls('pointer');
+           } else if (level) {
+               data = {
+                   title: PVE.Utils.render_support_level(level),
+                   iconCls: PVE.Utils.get_health_icon('good', true),
+                   text: gettext('Your subscription status is valid.')
+               };
+               subs.setUserCls('');
+           }
+
+           subs.setData(data);
+       });
+
        me.on('destroy', function(){
            rstore.stopUpdate();
        });
 
+       me.mon(sp, 'statechange', function(provider, key, value) {
+           if (key !== 'summarycolumns') {
+               return;
+           }
+           PVE.Utils.updateColumns(me);
+       });
+
        rstore.startUpdate();
     }