extend: 'Ext.data.Model',
fields: [
'node', { type: 'integer', name: 'nodeid' }, 'ring0_addr', 'ring1_addr',
- { type: 'integer', name: 'quorum_votes' }
+ { type: 'integer', name: 'quorum_votes' },
],
proxy: {
type: 'proxmox',
- url: "/api2/json/cluster/config/nodes"
+ url: "/api2/json/cluster/config/nodes",
},
- idProperty: 'nodeid'
+ idProperty: 'nodeid',
});
Ext.define('pve-cluster-info', {
extend: 'Ext.data.Model',
proxy: {
type: 'proxmox',
- url: "/api2/json/cluster/config/join"
- }
+ url: "/api2/json/cluster/config/join",
+ },
});
Ext.define('PVE.ClusterAdministration', {
preferred_node: {
name: '',
fp: '',
- addr: ''
+ addr: '',
},
isInCluster: false,
- nodecount: 0
- }
+ nodecount: 0,
+ },
},
items: [
autoStart: true,
interval: 15 * 1000,
storeid: 'pve-cluster-info',
- model: 'pve-cluster-info'
+ model: 'pve-cluster-info',
});
view.store.on('load', this.onLoad, this);
view.on('destroy', view.store.stopUpdate);
},
- onLoad: function(store, records, success) {
- var vm = this.getViewModel();
- if (!success || !records || !records[0].data) {
+ onLoad: function(store, records, success, operation) {
+ let vm = this.getViewModel();
+
+ let data = records?.[0]?.data;
+ if (!success || !data || !data.nodelist?.length) {
+ let error = operation.getError();
+ if (error) {
+ let msg = Proxmox.Utils.getResponseErrorMessage(error);
+ if (error.status !== 424 && !msg.match(/node is not in a cluster/i)) {
+ // an actual error, not just the "not in a cluster one", so show it!
+ Proxmox.Utils.setErrorMask(this.getView(), msg);
+ }
+ }
vm.set('totem', {});
vm.set('isInCluster', false);
vm.set('nodelist', []);
vm.set('preferred_node', {
name: '',
addr: '',
- fp: ''
+ fp: '',
});
return;
}
- var data = records[0].data;
vm.set('totem', data.totem);
vm.set('isInCluster', !!data.totem.cluster_name);
vm.set('nodelist', data.nodelist);
- var nodeinfo = Ext.Array.findBy(data.nodelist, function (el) {
- return el.name === data.preferred_node;
- });
+ let nodeinfo = data.nodelist.find(el => el.name === data.preferred_node);
let links = {};
let ring_addr = [];
addr: nodeinfo.pve_addr,
peerLinks: links,
ring_addr: ring_addr,
- fp: nodeinfo.pve_fp
+ fp: nodeinfo.pve_fp,
});
},
onCreate: function() {
- var view = this.getView();
+ let view = this.getView();
view.store.stopUpdate();
- var win = Ext.create('PVE.ClusterCreateWindow', {
+ Ext.create('PVE.ClusterCreateWindow', {
autoShow: true,
listeners: {
destroy: function() {
view.store.startUpdate();
- }
- }
+ },
+ },
});
},
onClusterInfo: function() {
- var vm = this.getViewModel();
- var win = Ext.create('PVE.ClusterInfoWindow', {
+ let vm = this.getViewModel();
+ Ext.create('PVE.ClusterInfoWindow', {
+ autoShow: true,
joinInfo: {
ipAddress: vm.get('preferred_node.addr'),
fingerprint: vm.get('preferred_node.fp'),
peerLinks: vm.get('preferred_node.peerLinks'),
ring_addr: vm.get('preferred_node.ring_addr'),
- totem: vm.get('totem')
- }
+ totem: vm.get('totem'),
+ },
});
- win.show();
},
onJoin: function() {
- var view = this.getView();
+ let view = this.getView();
view.store.stopUpdate();
- var win = Ext.create('PVE.ClusterJoinNodeWindow', {
+ Ext.create('PVE.ClusterJoinNodeWindow', {
autoShow: true,
listeners: {
destroy: function() {
view.store.startUpdate();
- }
- }
+ },
+ },
});
- }
+ },
},
tbar: [
{
reference: 'createButton',
handler: 'onCreate',
bind: {
- disabled: '{isInCluster}'
- }
+ disabled: '{isInCluster}',
+ },
},
{
text: gettext('Join Information'),
reference: 'addButton',
handler: 'onClusterInfo',
bind: {
- disabled: '{!isInCluster}'
- }
+ disabled: '{!isInCluster}',
+ },
},
{
text: gettext('Join Cluster'),
reference: 'joinButton',
handler: 'onJoin',
bind: {
- disabled: '{isInCluster}'
- }
- }
+ disabled: '{isInCluster}',
+ },
+ },
],
layout: 'hbox',
bodyPadding: 5,
fieldLabel: gettext('Cluster Name'),
bind: {
value: '{totem.cluster_name}',
- hidden: '{!isInCluster}'
+ hidden: '{!isInCluster}',
},
- flex: 1
+ flex: 1,
},
{
xtype: 'displayfield',
fieldLabel: gettext('Config Version'),
bind: {
value: '{totem.config_version}',
- hidden: '{!isInCluster}'
+ hidden: '{!isInCluster}',
},
- flex: 1
+ flex: 1,
},
{
xtype: 'displayfield',
labelWidth: 120,
bind: {
value: '{nodecount}',
- hidden: '{!isInCluster}'
+ hidden: '{!isInCluster}',
},
- flex: 1
+ flex: 1,
},
{
xtype: 'displayfield',
value: gettext('Standalone node - no cluster defined'),
bind: {
- hidden: '{isInCluster}'
+ hidden: '{isInCluster}',
},
- flex: 1
- }
- ]
+ flex: 1,
+ },
+ ],
},
{
xtype: 'grid',
interval: 5 * 1000,
autoStart: true,
storeid: 'pve-cluster-nodes',
- model: 'pve-cluster-nodes'
+ model: 'pve-cluster-nodes',
});
view.setStore(Ext.create('Proxmox.data.DiffStore', {
rstore: view.rstore,
sorters: {
property: 'nodeid',
- order: 'DESC'
- }
+ direction: 'ASC',
+ },
}));
Proxmox.Utils.monStoreErrors(view, view.rstore);
view.rstore.on('load', this.onLoad, this);
},
onLoad: function(store, records, success) {
- var view = this.getView();
- var vm = this.getViewModel();
+ let view = this.getView();
+ let vm = this.getViewModel();
if (!success || !records || !records.length) {
vm.set('nodecount', 0);
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) => {
+ let linkIndex = view.columns.length;
+ 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
+ // save offset at which link columns start, so we can address them directly below
if (i < linkIndex) {
linkIndex = i;
}
if (linknum > 7) {
return;
}
- view.columns[linkIndex+linknum].setHidden(false);
- }
+ view.columns[linkIndex + linknum].setHidden(false);
+ },
);
- }
+ },
},
columns: {
items: [
{
header: gettext('Nodename'),
hidden: false,
- dataIndex: 'name'
+ dataIndex: 'name',
},
{
header: gettext('ID'),
width: 100,
flex: 0,
hidden: false,
- dataIndex: 'nodeid'
+ dataIndex: 'nodeid',
},
{
header: gettext('Votes'),
width: 100,
flex: 0,
hidden: false,
- dataIndex: 'quorum_votes'
+ dataIndex: 'quorum_votes',
},
{
header: Ext.String.format(gettext('Link {0}'), 0),
dataIndex: 'ring0_addr',
- linkNumber: 0
+ linkNumber: 0,
},
{
header: Ext.String.format(gettext('Link {0}'), 1),
dataIndex: 'ring1_addr',
- linkNumber: 1
+ linkNumber: 1,
},
{
header: Ext.String.format(gettext('Link {0}'), 2),
dataIndex: 'ring2_addr',
- linkNumber: 2
+ linkNumber: 2,
},
{
header: Ext.String.format(gettext('Link {0}'), 3),
dataIndex: 'ring3_addr',
- linkNumber: 3
+ linkNumber: 3,
},
{
header: Ext.String.format(gettext('Link {0}'), 4),
dataIndex: 'ring4_addr',
- linkNumber: 4
+ linkNumber: 4,
},
{
header: Ext.String.format(gettext('Link {0}'), 5),
dataIndex: 'ring5_addr',
- linkNumber: 5
+ linkNumber: 5,
},
{
header: Ext.String.format(gettext('Link {0}'), 6),
dataIndex: 'ring6_addr',
- linkNumber: 6
+ linkNumber: 6,
},
{
header: Ext.String.format(gettext('Link {0}'), 7),
dataIndex: 'ring7_addr',
- linkNumber: 7
- }
+ linkNumber: 7,
+ },
],
defaults: {
flex: 1,
hidden: true,
- minWidth: 150
- }
- }
- }
- ]
+ minWidth: 150,
+ },
+ },
+ },
+ ],
});