]>
Commit | Line | Data |
---|---|---|
4053fc86 | 1 | Ext.define('PVE.data.ResourceStore', { |
0c7c0d6b | 2 | extend: 'Proxmox.data.UpdateStore', |
4053fc86 DM |
3 | singleton: true, |
4 | ||
5 | findVMID: function(vmid) { | |
a0b5aa90 | 6 | let me = this; |
53e3ea84 | 7 | return me.findExact('vmid', parseInt(vmid, 10)) >= 0; |
4053fc86 | 8 | }, |
0be88ae1 | 9 | |
d9e02939 TL |
10 | // returns the cached data from all nodes |
11 | getNodes: function() { | |
a0b5aa90 | 12 | let me = this; |
d9e02939 | 13 | |
a0b5aa90 | 14 | let nodes = []; |
d9e02939 | 15 | me.each(function(record) { |
a0b5aa90 | 16 | if (record.get('type') === "node") { |
8058410f | 17 | nodes.push(record.getData()); |
d9e02939 TL |
18 | } |
19 | }); | |
20 | ||
21 | return nodes; | |
22 | }, | |
23 | ||
01532f8d | 24 | storageIsShared: function(storage_path) { |
a0b5aa90 | 25 | let me = this; |
01532f8d | 26 | |
a0b5aa90 TL |
27 | let index = me.findExact('id', storage_path); |
28 | if (index >= 0) { | |
29 | return me.getAt(index).data.shared; | |
30 | } else { | |
31 | return undefined; | |
32 | } | |
01532f8d WL |
33 | }, |
34 | ||
93418231 | 35 | guestNode: function(vmid) { |
a0b5aa90 | 36 | let me = this; |
93418231 | 37 | |
a0b5aa90 | 38 | let index = me.findExact('vmid', parseInt(vmid, 10)); |
93418231 WL |
39 | |
40 | return me.getAt(index).data.node; | |
41 | }, | |
42 | ||
2ae20617 TL |
43 | guestName: function(vmid) { |
44 | let me = this; | |
45 | let index = me.findExact('vmid', parseInt(vmid, 10)); | |
46 | if (index < 0) { | |
47 | return '-'; | |
48 | } | |
49 | let rec = me.getAt(index).data; | |
50 | if ('name' in rec) { | |
51 | return rec.name; | |
52 | } | |
53 | return ''; | |
54 | }, | |
55 | ||
4aa70a6b TL |
56 | refresh: function() { |
57 | let me = this; | |
58 | // can only refresh if we're loaded at least once and are not currently loading | |
59 | if (!me.isLoading() && me.isLoaded()) { | |
619c74f2 | 60 | let records = (me.getData().getSource() || me.getData()).getRange(); |
4aa70a6b TL |
61 | me.fireEvent('load', me, records); |
62 | } | |
63 | }, | |
64 | ||
4053fc86 | 65 | constructor: function(config) { |
a0b5aa90 | 66 | let me = this; |
4053fc86 DM |
67 | |
68 | config = config || {}; | |
69 | ||
a0b5aa90 | 70 | let field_defaults = { |
4053fc86 DM |
71 | type: { |
72 | header: gettext('Type'), | |
cfb353c8 | 73 | type: 'string', |
4053fc86 DM |
74 | renderer: PVE.Utils.render_resource_type, |
75 | sortable: true, | |
76 | hideable: false, | |
f6710aac | 77 | width: 100, |
4053fc86 DM |
78 | }, |
79 | id: { | |
80 | header: 'ID', | |
cfb353c8 | 81 | type: 'string', |
4053fc86 DM |
82 | hidden: true, |
83 | sortable: true, | |
f6710aac | 84 | width: 80, |
4053fc86 DM |
85 | }, |
86 | running: { | |
87 | header: gettext('Online'), | |
88 | type: 'boolean', | |
e7ade592 | 89 | renderer: Proxmox.Utils.format_boolean, |
4053fc86 DM |
90 | hidden: true, |
91 | convert: function(value, record) { | |
92 | var info = record.data; | |
53e3ea84 | 93 | return Ext.isNumeric(info.uptime) && info.uptime > 0; |
f6710aac | 94 | }, |
4053fc86 DM |
95 | }, |
96 | text: { | |
97 | header: gettext('Description'), | |
cfb353c8 | 98 | type: 'string', |
4053fc86 DM |
99 | sortable: true, |
100 | width: 200, | |
101 | convert: function(value, record) { | |
4053fc86 DM |
102 | if (value) { |
103 | return value; | |
104 | } | |
105 | ||
a0b5aa90 | 106 | let info = record.data, text; |
cf73d1ef | 107 | if (Ext.isNumeric(info.vmid) && info.vmid > 0) { |
4053fc86 DM |
108 | text = String(info.vmid); |
109 | if (info.name) { | |
110 | text += " (" + info.name + ')'; | |
111 | } | |
cf73d1ef DC |
112 | } else { // node, pool, storage |
113 | text = info[info.type] || info.id; | |
114 | if (info.node && info.type !== 'node') { | |
115 | text += " (" + info.node + ")"; | |
116 | } | |
4053fc86 | 117 | } |
cf73d1ef | 118 | |
4053fc86 | 119 | return text; |
f6710aac | 120 | }, |
4053fc86 DM |
121 | }, |
122 | vmid: { | |
123 | header: 'VMID', | |
124 | type: 'integer', | |
125 | hidden: true, | |
126 | sortable: true, | |
f6710aac | 127 | width: 80, |
4053fc86 DM |
128 | }, |
129 | name: { | |
130 | header: gettext('Name'), | |
131 | hidden: true, | |
132 | sortable: true, | |
f6710aac | 133 | type: 'string', |
4053fc86 DM |
134 | }, |
135 | disk: { | |
136 | header: gettext('Disk usage'), | |
137 | type: 'integer', | |
138 | renderer: PVE.Utils.render_disk_usage, | |
139 | sortable: true, | |
728f1b97 | 140 | width: 100, |
f6710aac | 141 | hidden: true, |
728f1b97 DC |
142 | }, |
143 | diskuse: { | |
144 | header: gettext('Disk usage') + " %", | |
145 | type: 'number', | |
146 | sortable: true, | |
147 | renderer: PVE.Utils.render_disk_usage_percent, | |
148 | width: 100, | |
149 | calculate: PVE.Utils.calculate_disk_usage, | |
f6710aac | 150 | sortType: 'asFloat', |
4053fc86 DM |
151 | }, |
152 | maxdisk: { | |
153 | header: gettext('Disk size'), | |
154 | type: 'integer', | |
1bd7bcdb | 155 | renderer: Proxmox.Utils.render_size, |
4053fc86 DM |
156 | sortable: true, |
157 | hidden: true, | |
f6710aac | 158 | width: 100, |
4053fc86 DM |
159 | }, |
160 | mem: { | |
161 | header: gettext('Memory usage'), | |
162 | type: 'integer', | |
163 | renderer: PVE.Utils.render_mem_usage, | |
164 | sortable: true, | |
728f1b97 | 165 | hidden: true, |
f6710aac | 166 | width: 100, |
728f1b97 DC |
167 | }, |
168 | memuse: { | |
169 | header: gettext('Memory usage') + " %", | |
170 | type: 'number', | |
171 | renderer: PVE.Utils.render_mem_usage_percent, | |
172 | calculate: PVE.Utils.calculate_mem_usage, | |
173 | sortType: 'asFloat', | |
174 | sortable: true, | |
f6710aac | 175 | width: 100, |
4053fc86 DM |
176 | }, |
177 | maxmem: { | |
178 | header: gettext('Memory size'), | |
179 | type: 'integer', | |
1bd7bcdb | 180 | renderer: Proxmox.Utils.render_size, |
4053fc86 DM |
181 | hidden: true, |
182 | sortable: true, | |
f6710aac | 183 | width: 100, |
4053fc86 DM |
184 | }, |
185 | cpu: { | |
186 | header: gettext('CPU usage'), | |
187 | type: 'float', | |
1bd7bcdb | 188 | renderer: Proxmox.Utils.render_cpu, |
4053fc86 | 189 | sortable: true, |
f6710aac | 190 | width: 100, |
4053fc86 DM |
191 | }, |
192 | maxcpu: { | |
193 | header: gettext('maxcpu'), | |
194 | type: 'integer', | |
195 | hidden: true, | |
196 | sortable: true, | |
f6710aac | 197 | width: 60, |
4053fc86 DM |
198 | }, |
199 | diskread: { | |
200 | header: gettext('Total Disk Read'), | |
201 | type: 'integer', | |
202 | hidden: true, | |
203 | sortable: true, | |
e7ade592 | 204 | renderer: Proxmox.Utils.format_size, |
f6710aac | 205 | width: 100, |
4053fc86 DM |
206 | }, |
207 | diskwrite: { | |
208 | header: gettext('Total Disk Write'), | |
209 | type: 'integer', | |
210 | hidden: true, | |
211 | sortable: true, | |
e7ade592 | 212 | renderer: Proxmox.Utils.format_size, |
f6710aac | 213 | width: 100, |
4053fc86 DM |
214 | }, |
215 | netin: { | |
216 | header: gettext('Total NetIn'), | |
217 | type: 'integer', | |
218 | hidden: true, | |
219 | sortable: true, | |
e7ade592 | 220 | renderer: Proxmox.Utils.format_size, |
f6710aac | 221 | width: 100, |
4053fc86 DM |
222 | }, |
223 | netout: { | |
224 | header: gettext('Total NetOut'), | |
225 | type: 'integer', | |
226 | hidden: true, | |
227 | sortable: true, | |
e7ade592 | 228 | renderer: Proxmox.Utils.format_size, |
f6710aac | 229 | width: 100, |
4053fc86 DM |
230 | }, |
231 | template: { | |
232 | header: gettext('Template'), | |
233 | type: 'integer', | |
234 | hidden: true, | |
235 | sortable: true, | |
f6710aac | 236 | width: 60, |
4053fc86 DM |
237 | }, |
238 | uptime: { | |
239 | header: gettext('Uptime'), | |
240 | type: 'integer', | |
e7ade592 | 241 | renderer: Proxmox.Utils.render_uptime, |
4053fc86 | 242 | sortable: true, |
f6710aac | 243 | width: 110, |
0be88ae1 | 244 | }, |
4053fc86 DM |
245 | node: { |
246 | header: gettext('Node'), | |
cfb353c8 | 247 | type: 'string', |
4053fc86 DM |
248 | hidden: true, |
249 | sortable: true, | |
f6710aac | 250 | width: 110, |
4053fc86 DM |
251 | }, |
252 | storage: { | |
253 | header: gettext('Storage'), | |
cfb353c8 | 254 | type: 'string', |
4053fc86 DM |
255 | hidden: true, |
256 | sortable: true, | |
f6710aac | 257 | width: 110, |
4053fc86 DM |
258 | }, |
259 | pool: { | |
260 | header: gettext('Pool'), | |
cfb353c8 | 261 | type: 'string', |
4053fc86 DM |
262 | hidden: true, |
263 | sortable: true, | |
f6710aac | 264 | width: 110, |
2b2fe160 DC |
265 | }, |
266 | hastate: { | |
267 | header: gettext('HA State'), | |
268 | type: 'string', | |
c9329af1 | 269 | defaultValue: 'unmanaged', |
2b2fe160 | 270 | hidden: true, |
f6710aac | 271 | sortable: true, |
03f18f5e DC |
272 | }, |
273 | status: { | |
274 | header: gettext('Status'), | |
275 | type: 'string', | |
276 | hidden: true, | |
277 | sortable: true, | |
f6710aac | 278 | width: 110, |
6284a48a DC |
279 | }, |
280 | lock: { | |
281 | header: gettext('Lock'), | |
282 | type: 'string', | |
283 | hidden: true, | |
284 | sortable: true, | |
f6710aac TL |
285 | width: 110, |
286 | }, | |
a62ee730 AD |
287 | hostcpu: { |
288 | header: gettext('Host CPU usage'), | |
289 | type: 'float', | |
290 | renderer: PVE.Utils.render_hostcpu, | |
291 | calculate: PVE.Utils.calculate_hostcpu, | |
292 | sortType: 'asFloat', | |
293 | sortable: true, | |
a0b5aa90 | 294 | width: 100, |
a62ee730 AD |
295 | }, |
296 | hostmemuse: { | |
297 | header: gettext('Host Memory usage') + " %", | |
298 | type: 'number', | |
299 | renderer: PVE.Utils.render_hostmem_usage_percent, | |
300 | calculate: PVE.Utils.calculate_hostmem_usage, | |
301 | sortType: 'asFloat', | |
302 | sortable: true, | |
a0b5aa90 | 303 | width: 100, |
a62ee730 | 304 | }, |
366558a7 DC |
305 | tags: { |
306 | header: gettext('Tags'), | |
731436ee | 307 | renderer: (value) => PVE.Utils.renderTags(value, PVE.UIOptions.tagOverrides), |
366558a7 | 308 | type: 'string', |
366558a7 | 309 | sortable: true, |
f422af00 | 310 | flex: 1, |
366558a7 | 311 | }, |
f422af00 | 312 | // note: flex only last column to keep info closer together |
4053fc86 DM |
313 | }; |
314 | ||
a0b5aa90 TL |
315 | let fields = []; |
316 | let fieldNames = []; | |
4053fc86 | 317 | Ext.Object.each(field_defaults, function(key, value) { |
8058410f | 318 | var field = { name: key, type: value.type }; |
2abb517f DC |
319 | if (Ext.isDefined(value.convert)) { |
320 | field.convert = value.convert; | |
321 | } | |
322 | ||
323 | if (Ext.isDefined(value.calculate)) { | |
324 | field.calculate = value.calculate; | |
728f1b97 | 325 | } |
2abb517f DC |
326 | |
327 | if (Ext.isDefined(value.defaultValue)) { | |
328 | field.defaultValue = value.defaultValue; | |
329 | } | |
330 | ||
331 | fields.push(field); | |
332 | fieldNames.push(key); | |
4053fc86 DM |
333 | }); |
334 | ||
335 | Ext.define('PVEResources', { | |
336 | extend: "Ext.data.Model", | |
337 | fields: fields, | |
338 | proxy: { | |
56a353b9 | 339 | type: 'proxmox', |
f6710aac TL |
340 | url: '/api2/json/cluster/resources', |
341 | }, | |
4053fc86 DM |
342 | }); |
343 | ||
344 | Ext.define('PVETree', { | |
345 | extend: "Ext.data.Model", | |
346 | fields: fields, | |
f6710aac | 347 | proxy: { type: 'memory' }, |
4053fc86 DM |
348 | }); |
349 | ||
350 | Ext.apply(config, { | |
351 | storeid: 'PVEResources', | |
352 | model: 'PVEResources', | |
3a8c89c2 | 353 | defaultColumns: function() { |
a0b5aa90 | 354 | let res = []; |
4053fc86 | 355 | Ext.Object.each(field_defaults, function(field, info) { |
a0b5aa90 TL |
356 | let fieldInfo = Ext.apply({ dataIndex: field }, info); |
357 | res.push(fieldInfo); | |
4053fc86 DM |
358 | }); |
359 | return res; | |
360 | }, | |
f6710aac | 361 | fieldNames: fieldNames, |
4053fc86 DM |
362 | }); |
363 | ||
364 | me.callParent([config]); | |
f6710aac | 365 | }, |
4053fc86 | 366 | }); |