]>
Commit | Line | Data |
---|---|---|
ac3c553c DM |
1 | Ext.define('PVE.qemu.HDThrottleInputPanel', { |
2 | extend: 'PVE.panel.InputPanel', | |
3 | alias: 'widget.PVE.qemu.HDThrottleInputPanel', | |
4 | ||
5 | insideWizard: false, | |
6 | ||
7 | unused: false, // ADD usused disk imaged | |
8 | ||
9 | vmconfig: {}, // used to select usused disks | |
10 | ||
11 | onGetValues: function(values) { | |
12 | var me = this; | |
13 | ||
14 | var confid = me.confid; | |
15 | ||
16 | var names = ['mbps_rd', 'mbps_wr', 'iops_rd', 'iops_wr']; | |
17 | Ext.Array.each(names, function(name) { | |
18 | if (values[name]) { | |
19 | me.drive[name] = values[name]; | |
20 | } else { | |
21 | delete me.drive[name]; | |
22 | } | |
23 | var burst_name = name + '_max'; | |
24 | if (values[burst_name] && values[name]) { | |
25 | me.drive[burst_name] = values[burst_name]; | |
26 | } else { | |
27 | delete me.drive[burst_name]; | |
28 | } | |
29 | }); | |
30 | ||
31 | var params = {}; | |
32 | ||
33 | params[confid] = PVE.Parser.printQemuDrive(me.drive); | |
34 | ||
35 | return params; | |
36 | }, | |
37 | ||
38 | setDrive: function(drive) { | |
39 | var me = this; | |
40 | ||
41 | me.drive = drive; | |
42 | ||
43 | var values = {}; | |
44 | ||
45 | values.mbps_rd = drive.mbps_rd; | |
46 | values.mbps_wr = drive.mbps_wr; | |
47 | values.iops_rd = drive.iops_rd; | |
48 | values.iops_wr = drive.iops_wr; | |
49 | values.mbps_rd_max = drive.mbps_rd_max; | |
50 | values.mbps_wr_max = drive.mbps_wr_max; | |
51 | values.iops_rd_max = drive.iops_rd_max; | |
52 | values.iops_wr_max = drive.iops_wr_max; | |
53 | ||
54 | me.setValues(values); | |
55 | }, | |
56 | ||
57 | initComponent : function() { | |
58 | var me = this; | |
59 | ||
60 | me.drive = {}; | |
61 | ||
62 | me.column1 = []; | |
63 | me.column2 = []; | |
64 | ||
65 | var width2 = 140; | |
66 | ||
67 | me.mbps_rd = Ext.widget('numberfield', { | |
68 | name: 'mbps_rd', | |
69 | minValue: 1, | |
70 | step: 1, | |
71 | fieldLabel: gettext('Read limit') + ' (MB/s)', | |
72 | labelWidth: width2, | |
73 | emptyText: gettext('unlimited') | |
74 | }); | |
75 | ||
76 | me.column1.push(me.mbps_rd); | |
77 | ||
78 | me.mbps_rd_max = Ext.widget('numberfield', { | |
79 | name: 'mbps_rd_max', | |
80 | minValue: 1, | |
81 | step: 1, | |
82 | fieldLabel: gettext('Read max burst') + ' (MB)', | |
83 | labelWidth: width2, | |
84 | emptyText: gettext('default') | |
85 | }); | |
86 | ||
87 | me.column2.push(me.mbps_rd_max); | |
88 | ||
89 | ||
90 | me.mbps_wr = Ext.widget('numberfield', { | |
91 | name: 'mbps_wr', | |
92 | minValue: 1, | |
93 | step: 1, | |
94 | fieldLabel: gettext('Write limit') + ' (MB/s)', | |
95 | labelWidth: width2, | |
96 | emptyText: gettext('unlimited') | |
97 | }); | |
98 | ||
99 | me.column1.push(me.mbps_wr); | |
100 | ||
101 | me.mbps_wr_max = Ext.widget('numberfield', { | |
102 | name: 'mbps_wr_max', | |
103 | minValue: 1, | |
104 | step: 1, | |
105 | fieldLabel: gettext('Write max burst') + ' (MB)', | |
106 | labelWidth: width2, | |
107 | emptyText: gettext('default') | |
108 | }); | |
109 | ||
110 | me.column2.push(me.mbps_wr_max); | |
111 | ||
bf96f60d | 112 | me.iops_rd = Ext.widget('proxmoxintegerfield', { |
ac3c553c DM |
113 | name: 'iops_rd', |
114 | minValue: 10, | |
115 | step: 10, | |
116 | fieldLabel: gettext('Read limit') + ' (ops/s)', | |
117 | labelWidth: width2, | |
118 | emptyText: gettext('unlimited') | |
119 | }); | |
120 | ||
121 | me.column1.push(me.iops_rd); | |
122 | ||
bf96f60d | 123 | me.iops_rd_max = Ext.widget('proxmoxintegerfield', { |
ac3c553c DM |
124 | name: 'iops_rd_max', |
125 | minValue: 10, | |
126 | step: 10, | |
127 | fieldLabel: gettext('Read max burst') + ' (ops)', | |
128 | labelWidth: width2, | |
129 | emptyText: gettext('default') | |
130 | }); | |
131 | ||
132 | me.column2.push(me.iops_rd_max); | |
133 | ||
bf96f60d | 134 | me.iops_wr = Ext.widget('proxmoxintegerfield', { |
ac3c553c DM |
135 | name: 'iops_wr', |
136 | minValue: 10, | |
137 | step: 10, | |
138 | fieldLabel: gettext('Write limit') + ' (ops/s)', | |
139 | labelWidth: width2, | |
140 | emptyText: gettext('unlimited') | |
141 | }); | |
142 | ||
143 | me.column1.push(me.iops_wr); | |
144 | ||
bf96f60d | 145 | me.iops_wr_max = Ext.widget('proxmoxintegerfield', { |
ac3c553c DM |
146 | name: 'iops_wr_max', |
147 | minValue: 10, | |
148 | step: 10, | |
149 | fieldLabel: gettext('Write max burst') + ' (ops)', | |
150 | labelWidth: width2, | |
151 | emptyText: gettext('default') | |
152 | }); | |
153 | ||
154 | me.column2.push(me.iops_wr_max); | |
155 | ||
156 | me.callParent(); | |
157 | } | |
158 | }); | |
159 | ||
160 | Ext.define('PVE.qemu.HDThrottle', { | |
9fccc702 | 161 | extend: 'Proxmox.window.Edit', |
ac3c553c DM |
162 | |
163 | isAdd: true, | |
164 | ||
165 | initComponent : function() { | |
166 | var me = this; | |
167 | ||
168 | var nodename = me.pveSelNode.data.node; | |
169 | if (!nodename) { | |
170 | throw "no node name specified"; | |
171 | } | |
172 | ||
173 | var unused = me.confid && me.confid.match(/^unused\d+$/); | |
174 | ||
d5e771ce | 175 | me.isCreate = me.confid ? unused : true; |
ac3c553c DM |
176 | |
177 | var ipanel = Ext.create('PVE.qemu.HDThrottleInputPanel', { | |
178 | confid: me.confid, | |
179 | nodename: nodename | |
180 | }); | |
181 | ||
182 | var subject; | |
183 | if (unused) { | |
184 | me.subject = gettext('Unused Disk'); | |
185 | } else { | |
186 | me.subject = gettext('Hard Disk') + ' (' + me.confid + ')'; | |
187 | } | |
188 | ||
189 | me.items = [ ipanel ]; | |
190 | ||
191 | me.callParent(); | |
192 | ||
193 | me.load({ | |
194 | success: function(response, options) { | |
195 | if (me.confid) { | |
196 | var value = response.result.data[me.confid]; | |
197 | var drive = PVE.Parser.parseQemuDrive(me.confid, value); | |
198 | if (!drive) { | |
185a77e5 | 199 | Ext.Msg.alert(gettext('Error'), 'Unable to parse drive options'); |
ac3c553c DM |
200 | me.close(); |
201 | return; | |
202 | } | |
203 | ipanel.setDrive(drive); | |
204 | me.isValid(); // trigger validation | |
205 | } | |
206 | } | |
207 | }); | |
208 | } | |
209 | }); |