]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/NodeSelector.js
ext6migrate: fix NodeSelector
[pve-manager.git] / www / manager6 / form / NodeSelector.js
1 Ext.define('PVE.form.NodeSelector', {
2 extend: 'PVE.form.ComboGrid',
3 alias: ['widget.pveNodeSelector'],
4
5 // invalidate nodes which are offline
6 onlineValidator: false,
7
8 selectCurNode: false,
9
10 // only allow those nodes (array)
11 allowedNodes: undefined,
12 // set default value to empty array, else it inits it with
13 // null and after the store load it is an empty array,
14 // triggering dirtychange
15 value: [],
16 valueField: 'node',
17 displayField: 'node',
18 store: {
19 fields: [ 'node', 'cpu', 'maxcpu', 'mem', 'maxmem', 'uptime' ],
20 proxy: {
21 type: 'pve',
22 url: '/api2/json/nodes'
23 },
24 sorters: [
25 {
26 property : 'node',
27 direction: 'ASC'
28 },
29 {
30 property : 'mem',
31 direction: 'DESC'
32 }
33 ]
34 },
35
36 listConfig: {
37 columns: [
38 {
39 header: gettext('Node'),
40 dataIndex: 'node',
41 sortable: true,
42 hideable: false,
43 flex: 1
44 },
45 {
46 header: gettext('Memory usage'),
47 renderer: PVE.Utils.render_mem_usage,
48 sortable: true,
49 width: 100,
50 dataIndex: 'mem'
51 },
52 {
53 header: gettext('CPU usage'),
54 renderer: PVE.Utils.render_cpu,
55 sortable: true,
56 width: 100,
57 dataIndex: 'cpu'
58 }
59 ],
60 },
61
62 validator: function(value) {
63 /*jslint confusion: true */
64 var me = this;
65 if (!me.onlineValidator || (me.allowBlank && !value)) {
66 return true;
67 }
68
69 var offline = [];
70 var notAllowed = [];
71
72 Ext.Array.each(value.split(/\s*,\s*/), function(node) {
73 var rec = me.store.findRecord(me.valueField, node);
74 if (!(rec && rec.data) || !Ext.isNumeric(rec.data.mem)) {
75 offline.push(node);
76 } else if (me.allowedNodes && !Ext.Array.contains(me.allowedNodes, node)) {
77 notAllowed.push(node);
78 }
79 });
80
81 if (notAllowed.length !== 0) {
82 return "Node " + notAllowed.join(', ') + " is not allowed for this action!";
83 }
84
85 if (offline.length !== 0) {
86 return "Node " + offline.join(', ') + " seems to be offline!";
87 }
88 return true;
89 },
90
91 initComponent: function() {
92 var me = this;
93
94 if (me.selectCurNode && PVE.curSelectedNode.data.node) {
95 me.preferredValue = PVE.curSelectedNode.data.node;
96 }
97
98 me.callParent();
99 me.getStore().load();
100 }
101 });