]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ha/GroupEdit.js
4570b6a298100bc8fccc598fef989a65e7be05f4
[pve-manager.git] / www / manager6 / ha / GroupEdit.js
1 Ext.define('PVE.ha.GroupInputPanel', {
2 extend: 'PVE.panel.InputPanel',
3 onlineHelp: 'ha_manager_groups',
4
5 groupId: undefined,
6
7 onGetValues: function(values) {
8 var me = this;
9
10 if (me.isCreate) {
11 values.type = 'group';
12 }
13
14 return values;
15 },
16
17 initComponent : function() {
18 var me = this;
19
20 var update_nodefield, update_node_selection;
21
22 var sm = Ext.create('Ext.selection.CheckboxModel', {
23 mode: 'SIMPLE',
24 listeners: {
25 selectionchange: function(model, selected) {
26 update_nodefield(selected);
27 }
28 }
29 });
30
31 // use already cached data to avoid an API call
32 var data = PVE.data.ResourceStore.getNodes();
33
34 var store = Ext.create('Ext.data.Store', {
35 fields: [ 'node', 'mem', 'cpu', 'priority' ],
36 data: data,
37 proxy: {
38 type: 'memory',
39 reader: {type: 'json'}
40 },
41 sorters: [
42 {
43 property : 'node',
44 direction: 'ASC'
45 }
46 ]
47 });
48
49 var nodegrid = Ext.createWidget('grid', {
50 store: store,
51 border: true,
52 height: 300,
53 selModel: sm,
54 columns: [
55 {
56 header: gettext('Node'),
57 flex: 1,
58 dataIndex: 'node'
59 },
60 {
61 header: gettext('Memory usage') + " %",
62 renderer: PVE.Utils.render_mem_usage_percent,
63 sortable: true,
64 width: 150,
65 dataIndex: 'mem'
66 },
67 {
68 header: gettext('CPU usage'),
69 renderer: PVE.Utils.render_cpu,
70 sortable: true,
71 width: 150,
72 dataIndex: 'cpu'
73 },
74 {
75 header: 'Priority',
76 xtype: 'widgetcolumn',
77 dataIndex: 'priority',
78 sortable: true,
79 stopSelection: true,
80 widget: {
81 xtype: 'proxmoxintegerfield',
82 minValue: 0,
83 maxValue: 1000,
84 isFormField: false,
85 listeners: {
86 change: function(numberfield, value, old_value) {
87 var record = numberfield.getWidgetRecord();
88 record.set('priority', value);
89 update_nodefield(sm.getSelection());
90 }
91 }
92 }
93 }
94 ]
95 });
96
97 var nodefield = Ext.create('Ext.form.field.Hidden', {
98 name: 'nodes',
99 value: '',
100 listeners: {
101 change: function (nodefield, value) {
102 update_node_selection(value);
103 }
104 },
105 isValid: function () {
106 var value = nodefield.getValue();
107 return (value && 0 !== value.length);
108 }
109 });
110
111 update_node_selection = function(string) {
112 sm.deselectAll(true);
113
114 string.split(',').forEach(function (e, idx, array) {
115 var res = e.split(':');
116
117 store.each(function(record) {
118 var node = record.get('node');
119
120 if (node == res[0]) {
121 sm.select(record, true);
122 record.set('priority', res[1]);
123 record.commit();
124 }
125 });
126 });
127 nodegrid.reconfigure(store);
128
129 };
130
131 update_nodefield = function(selected) {
132 var nodes = '';
133 var first_iteration = true;
134 Ext.Array.each(selected, function(record) {
135 if (!first_iteration) {
136 nodes += ',';
137 }
138 first_iteration = false;
139
140 nodes += record.data.node;
141 if (record.data.priority) {
142 nodes += ':' + record.data.priority;
143 }
144 });
145
146 // nodefield change listener calls us again, which results in a
147 // endless recursion, suspend the event temporary to avoid this
148 nodefield.suspendEvent('change');
149 nodefield.setValue(nodes);
150 nodefield.resumeEvent('change');
151 };
152
153 me.column1 = [
154 {
155 xtype: me.isCreate ? 'textfield' : 'displayfield',
156 name: 'group',
157 value: me.groupId || '',
158 fieldLabel: 'ID',
159 vtype: 'StorageId',
160 allowBlank: false
161 },
162 nodefield
163 ];
164
165 me.column2 = [
166 {
167 xtype: 'proxmoxcheckbox',
168 name: 'restricted',
169 uncheckedValue: 0,
170 fieldLabel: 'restricted'
171 },
172 {
173 xtype: 'proxmoxcheckbox',
174 name: 'nofailback',
175 uncheckedValue: 0,
176 fieldLabel: 'nofailback'
177 }
178 ];
179
180 me.columnB = [
181 {
182 xtype: 'textfield',
183 name: 'comment',
184 fieldLabel: gettext('Comment')
185 },
186 nodegrid
187 ];
188
189 me.callParent();
190 }
191 });
192
193 Ext.define('PVE.ha.GroupEdit', {
194 extend: 'Proxmox.window.Edit',
195
196 groupId: undefined,
197
198 initComponent : function() {
199 var me = this;
200
201 me.isCreate = !me.groupId;
202
203 if (me.isCreate) {
204 me.url = '/api2/extjs/cluster/ha/groups';
205 me.method = 'POST';
206 } else {
207 me.url = '/api2/extjs/cluster/ha/groups/' + me.groupId;
208 me.method = 'PUT';
209 }
210
211 var ipanel = Ext.create('PVE.ha.GroupInputPanel', {
212 isCreate: me.isCreate,
213 groupId: me.groupId
214 });
215
216 Ext.apply(me, {
217 subject: gettext('HA Group'),
218 items: [ ipanel ]
219 });
220
221 me.callParent();
222
223 if (!me.isCreate) {
224 me.load({
225 success: function(response, options) {
226 var values = response.result.data;
227
228 ipanel.setValues(values);
229 }
230 });
231 }
232 }
233 });