]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ha/GroupEdit.js
use BondModeSelector & BondPolicySelector from widget toolkit
[pve-manager.git] / www / manager6 / ha / GroupEdit.js
CommitLineData
78fa6280
DM
1Ext.define('PVE.ha.GroupInputPanel', {
2 extend: 'PVE.panel.InputPanel',
c8802a60 3 onlineHelp: 'ha_manager_groups',
78fa6280
DM
4
5 groupId: undefined,
2c195fdd 6
78fa6280
DM
7 onGetValues: function(values) {
8 var me = this;
9
d5e771ce 10 if (me.isCreate) {
78fa6280
DM
11 values.type = 'group';
12 }
13
14 return values;
15 },
16
17 initComponent : function() {
18 var me = this;
19
1a4667e6
TL
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: {
bf96f60d 81 xtype: 'proxmoxintegerfield',
1a4667e6
TL
82 minValue: 0,
83 maxValue: 1000,
7471035d 84 isFormField: false,
1a4667e6
TL
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
78fa6280
DM
153 me.column1 = [
154 {
d5e771ce 155 xtype: me.isCreate ? 'textfield' : 'displayfield',
78fa6280 156 name: 'group',
78fa6280
DM
157 value: me.groupId || '',
158 fieldLabel: 'ID',
159 vtype: 'StorageId',
160 allowBlank: false
161 },
1a4667e6 162 nodefield
78fa6280
DM
163 ];
164
165 me.column2 = [
166 {
167 xtype: 'pvecheckbox',
168 name: 'restricted',
169 uncheckedValue: 0,
185a77e5 170 fieldLabel: 'restricted'
78fa6280
DM
171 },
172 {
173 xtype: 'pvecheckbox',
174 name: 'nofailback',
175 uncheckedValue: 0,
185a77e5 176 fieldLabel: 'nofailback'
22f2f9d6 177 }
78fa6280
DM
178 ];
179
180 me.columnB = [
181 {
182 xtype: 'textfield',
183 name: 'comment',
184 fieldLabel: gettext('Comment')
1a4667e6
TL
185 },
186 nodegrid
78fa6280
DM
187 ];
188
189 me.callParent();
190 }
191});
192
193Ext.define('PVE.ha.GroupEdit', {
194 extend: 'PVE.window.Edit',
195
196 groupId: undefined,
197
198 initComponent : function() {
199 var me = this;
200
d5e771ce 201 me.isCreate = !me.groupId;
78fa6280 202
d5e771ce 203 if (me.isCreate) {
78fa6280
DM
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', {
d5e771ce 212 isCreate: me.isCreate,
78fa6280
DM
213 groupId: me.groupId
214 });
215
216 Ext.apply(me, {
217 subject: gettext('HA Group'),
218 items: [ ipanel ]
219 });
220
221 me.callParent();
222
d5e771ce 223 if (!me.isCreate) {
78fa6280
DM
224 me.load({
225 success: function(response, options) {
226 var values = response.result.data;
227
78fa6280
DM
228 ipanel.setValues(values);
229 }
230 });
231 }
232 }
233});