[pve-devel] [RFC manager 5/6] gui/cluster: show all links (up to 8) in cluster overview
Stefan Reiter
s.reiter at proxmox.com
Wed Jan 29 11:27:22 CET 2020
Show only links found on the cluster.
'enableColumnHide' is set to false, since it causes confusing behaviour
for the user, considering we'd overwrite part of their choices every 5
seconds.
Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---
www/manager6/Utils.js | 10 +++
www/manager6/dc/Cluster.js | 128 +++++++++++++++++++++++++++++--------
2 files changed, 111 insertions(+), 27 deletions(-)
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 3c2a34d8..a14498fc 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1318,6 +1318,16 @@ Ext.define('PVE.Utils', { utilities: {
container.updateLayout();
container.updateLayout();
},
+
+ forEachCorosyncLink: function(nodeinfo, cb) {
+ let re = /(?:ring|link)(\d+)_addr/;
+ Ext.iterate(nodeinfo, (prop, val) => {
+ let match = re.exec(prop);
+ if (match) {
+ cb(Number(match[1]), val);
+ }
+ });
+ },
},
singleton: true,
diff --git a/www/manager6/dc/Cluster.js b/www/manager6/dc/Cluster.js
index 5b9a46e3..963da098 100644
--- a/www/manager6/dc/Cluster.js
+++ b/www/manager6/dc/Cluster.js
@@ -85,10 +85,14 @@ Ext.define('PVE.ClusterAdministration', {
return el.name === data.preferred_node;
});
+ var links = [];
+ PVE.Utils.forEachCorosyncLink(nodeinfo,
+ (num, link) => links.push(link));
+
vm.set('preferred_node', {
name: data.preferred_node,
addr: nodeinfo.pve_addr,
- ring_addr: [ nodeinfo.ring0_addr, nodeinfo.ring1_addr ],
+ ring_addr: links,
fp: nodeinfo.pve_fp
});
},
@@ -202,6 +206,8 @@ Ext.define('PVE.ClusterAdministration', {
{
xtype: 'grid',
title: gettext('Cluster Nodes'),
+ autoScroll: true,
+ enableColumnHide: false,
controller: {
xclass: 'Ext.app.ViewController',
@@ -227,41 +233,109 @@ Ext.define('PVE.ClusterAdministration', {
},
onLoad: function(store, records, success) {
+ var view = this.getView();
var vm = this.getViewModel();
- if (!success || !records) {
+
+ if (!success || !records || !records.length) {
vm.set('nodecount', 0);
return;
}
vm.set('nodecount', records.length);
+
+ // show/hide columns according to used links
+ var linkIndex = view.columns.length;
+ var columns = Ext.each(view.columns, (col, i) => {
+ if (col.linkNumber !== undefined) {
+ col.setHidden(true);
+
+ // save offset at which link columns start, so we
+ // can address them directly below
+ if (i < linkIndex) {
+ linkIndex = i;
+ }
+ }
+ });
+
+ PVE.Utils.forEachCorosyncLink(records[0].data,
+ (linknum, val) => {
+ if (linknum > 7) {
+ return;
+ }
+ view.columns[linkIndex+linknum].setHidden(false);
+ }
+ );
}
},
- columns: [
- {
- header: gettext('Nodename'),
- flex: 2,
- dataIndex: 'name'
- },
- {
- header: gettext('ID'),
- flex: 1,
- dataIndex: 'nodeid'
- },
- {
- header: gettext('Votes'),
+ columns: {
+ items: [
+ {
+ header: gettext('Nodename'),
+ hidden: false,
+ dataIndex: 'name'
+ },
+ {
+ header: gettext('ID'),
+ minWidth: 100,
+ width: 100,
+ flex: 0,
+ hidden: false,
+ dataIndex: 'nodeid'
+ },
+ {
+ header: gettext('Votes'),
+ minWidth: 100,
+ width: 100,
+ flex: 0,
+ hidden: false,
+ dataIndex: 'quorum_votes'
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 0),
+ dataIndex: 'ring0_addr',
+ linkNumber: 0
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 1),
+ dataIndex: 'ring1_addr',
+ linkNumber: 1
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 2),
+ dataIndex: 'ring2_addr',
+ linkNumber: 2
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 3),
+ dataIndex: 'ring3_addr',
+ linkNumber: 3
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 4),
+ dataIndex: 'ring4_addr',
+ linkNumber: 4
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 5),
+ dataIndex: 'ring5_addr',
+ linkNumber: 5
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 6),
+ dataIndex: 'ring6_addr',
+ linkNumber: 6
+ },
+ {
+ header: Ext.String.format(gettext('Link {0}'), 7),
+ dataIndex: 'ring7_addr',
+ linkNumber: 7
+ }
+ ],
+ defaults: {
flex: 1,
- dataIndex: 'quorum_votes'
- },
- {
- header: Ext.String.format(gettext('Link {0}'), 0),
- flex: 2,
- dataIndex: 'ring0_addr'
- },
- {
- header: Ext.String.format(gettext('Link {0}'), 1),
- flex: 2,
- dataIndex: 'ring1_addr'
+ hidden: true,
+ minWidth: 150
}
- ]
+ }
}
]
});
--
2.20.1
More information about the pve-devel
mailing list