scrollable: true,
- bodyPadding: '10 0 0 0',
+ bodyPadding: 5,
layout: 'column',
defaults: {
- width: 762,
- padding: '0 0 10 10'
+ padding: 5,
+ columnWidth: 1,
},
items: [
{
title: gettext('Resources'),
xtype: 'panel',
- height: 250,
- bodyPadding: '0 0 10 0',
+ minHeight: 250,
+ bodyPadding: 5,
layout: 'hbox',
defaults: {
xtype: 'proxmoxGauge',
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;
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();
}