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