]>
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) { | |
6 | var me = this, i; | |
0be88ae1 | 7 | |
4053fc86 DM |
8 | return (me.findExact('vmid', parseInt(vmid, 10)) >= 0); |
9 | }, | |
0be88ae1 | 10 | |
d9e02939 TL |
11 | // returns the cached data from all nodes |
12 | getNodes: function() { | |
13 | var me = this; | |
14 | ||
15 | var nodes = []; | |
16 | me.each(function(record) { | |
17 | if (record.get('type') == "node") { | |
18 | nodes.push( record.getData() ); | |
19 | } | |
20 | }); | |
21 | ||
22 | return nodes; | |
23 | }, | |
24 | ||
01532f8d WL |
25 | storageIsShared: function(storage_path) { |
26 | var me = this; | |
27 | ||
28 | var index = me.findExact('id', storage_path); | |
29 | ||
30 | return me.getAt(index).data.shared; | |
31 | }, | |
32 | ||
93418231 WL |
33 | guestNode: function(vmid) { |
34 | var me = this; | |
35 | ||
36 | var index = me.findExact('vmid', parseInt(vmid, 10)); | |
37 | ||
38 | return me.getAt(index).data.node; | |
39 | }, | |
40 | ||
2ae20617 TL |
41 | guestName: function(vmid) { |
42 | let me = this; | |
43 | let index = me.findExact('vmid', parseInt(vmid, 10)); | |
44 | if (index < 0) { | |
45 | return '-'; | |
46 | } | |
47 | let rec = me.getAt(index).data; | |
48 | if ('name' in rec) { | |
49 | return rec.name; | |
50 | } | |
51 | return ''; | |
52 | }, | |
53 | ||
4053fc86 DM |
54 | constructor: function(config) { |
55 | // fixme: how to avoid those warnings | |
4053fc86 DM |
56 | |
57 | var me = this; | |
58 | ||
59 | config = config || {}; | |
60 | ||
61 | var field_defaults = { | |
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; | |
ec827363 | 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) { | |
93 | var info = record.data; | |
94 | var text; | |
95 | ||
96 | if (value) { | |
97 | return value; | |
98 | } | |
99 | ||
cf73d1ef | 100 | if (Ext.isNumeric(info.vmid) && info.vmid > 0) { |
4053fc86 DM |
101 | text = String(info.vmid); |
102 | if (info.name) { | |
103 | text += " (" + info.name + ')'; | |
104 | } | |
cf73d1ef DC |
105 | } else { // node, pool, storage |
106 | text = info[info.type] || info.id; | |
107 | if (info.node && info.type !== 'node') { | |
108 | text += " (" + info.node + ")"; | |
109 | } | |
4053fc86 | 110 | } |
cf73d1ef | 111 | |
4053fc86 | 112 | return text; |
f6710aac | 113 | }, |
4053fc86 DM |
114 | }, |
115 | vmid: { | |
116 | header: 'VMID', | |
117 | type: 'integer', | |
118 | hidden: true, | |
119 | sortable: true, | |
f6710aac | 120 | width: 80, |
4053fc86 DM |
121 | }, |
122 | name: { | |
123 | header: gettext('Name'), | |
124 | hidden: true, | |
125 | sortable: true, | |
f6710aac | 126 | type: 'string', |
4053fc86 DM |
127 | }, |
128 | disk: { | |
129 | header: gettext('Disk usage'), | |
130 | type: 'integer', | |
131 | renderer: PVE.Utils.render_disk_usage, | |
132 | sortable: true, | |
728f1b97 | 133 | width: 100, |
f6710aac | 134 | hidden: true, |
728f1b97 DC |
135 | }, |
136 | diskuse: { | |
137 | header: gettext('Disk usage') + " %", | |
138 | type: 'number', | |
139 | sortable: true, | |
140 | renderer: PVE.Utils.render_disk_usage_percent, | |
141 | width: 100, | |
142 | calculate: PVE.Utils.calculate_disk_usage, | |
f6710aac | 143 | sortType: 'asFloat', |
4053fc86 DM |
144 | }, |
145 | maxdisk: { | |
146 | header: gettext('Disk size'), | |
147 | type: 'integer', | |
148 | renderer: PVE.Utils.render_size, | |
149 | sortable: true, | |
150 | hidden: true, | |
f6710aac | 151 | width: 100, |
4053fc86 DM |
152 | }, |
153 | mem: { | |
154 | header: gettext('Memory usage'), | |
155 | type: 'integer', | |
156 | renderer: PVE.Utils.render_mem_usage, | |
157 | sortable: true, | |
728f1b97 | 158 | hidden: true, |
f6710aac | 159 | width: 100, |
728f1b97 DC |
160 | }, |
161 | memuse: { | |
162 | header: gettext('Memory usage') + " %", | |
163 | type: 'number', | |
164 | renderer: PVE.Utils.render_mem_usage_percent, | |
165 | calculate: PVE.Utils.calculate_mem_usage, | |
166 | sortType: 'asFloat', | |
167 | sortable: true, | |
f6710aac | 168 | width: 100, |
4053fc86 DM |
169 | }, |
170 | maxmem: { | |
171 | header: gettext('Memory size'), | |
172 | type: 'integer', | |
173 | renderer: PVE.Utils.render_size, | |
174 | hidden: true, | |
175 | sortable: true, | |
f6710aac | 176 | width: 100, |
4053fc86 DM |
177 | }, |
178 | cpu: { | |
179 | header: gettext('CPU usage'), | |
180 | type: 'float', | |
181 | renderer: PVE.Utils.render_cpu, | |
182 | sortable: true, | |
f6710aac | 183 | width: 100, |
4053fc86 DM |
184 | }, |
185 | maxcpu: { | |
186 | header: gettext('maxcpu'), | |
187 | type: 'integer', | |
188 | hidden: true, | |
189 | sortable: true, | |
f6710aac | 190 | width: 60, |
4053fc86 DM |
191 | }, |
192 | diskread: { | |
193 | header: gettext('Total Disk Read'), | |
194 | type: 'integer', | |
195 | hidden: true, | |
196 | sortable: true, | |
e7ade592 | 197 | renderer: Proxmox.Utils.format_size, |
f6710aac | 198 | width: 100, |
4053fc86 DM |
199 | }, |
200 | diskwrite: { | |
201 | header: gettext('Total Disk Write'), | |
202 | type: 'integer', | |
203 | hidden: true, | |
204 | sortable: true, | |
e7ade592 | 205 | renderer: Proxmox.Utils.format_size, |
f6710aac | 206 | width: 100, |
4053fc86 DM |
207 | }, |
208 | netin: { | |
209 | header: gettext('Total NetIn'), | |
210 | type: 'integer', | |
211 | hidden: true, | |
212 | sortable: true, | |
e7ade592 | 213 | renderer: Proxmox.Utils.format_size, |
f6710aac | 214 | width: 100, |
4053fc86 DM |
215 | }, |
216 | netout: { | |
217 | header: gettext('Total NetOut'), | |
218 | type: 'integer', | |
219 | hidden: true, | |
220 | sortable: true, | |
e7ade592 | 221 | renderer: Proxmox.Utils.format_size, |
f6710aac | 222 | width: 100, |
4053fc86 DM |
223 | }, |
224 | template: { | |
225 | header: gettext('Template'), | |
226 | type: 'integer', | |
227 | hidden: true, | |
228 | sortable: true, | |
f6710aac | 229 | width: 60, |
4053fc86 DM |
230 | }, |
231 | uptime: { | |
232 | header: gettext('Uptime'), | |
233 | type: 'integer', | |
e7ade592 | 234 | renderer: Proxmox.Utils.render_uptime, |
4053fc86 | 235 | sortable: true, |
f6710aac | 236 | width: 110, |
0be88ae1 | 237 | }, |
4053fc86 DM |
238 | node: { |
239 | header: gettext('Node'), | |
cfb353c8 | 240 | type: 'string', |
4053fc86 DM |
241 | hidden: true, |
242 | sortable: true, | |
f6710aac | 243 | width: 110, |
4053fc86 DM |
244 | }, |
245 | storage: { | |
246 | header: gettext('Storage'), | |
cfb353c8 | 247 | type: 'string', |
4053fc86 DM |
248 | hidden: true, |
249 | sortable: true, | |
f6710aac | 250 | width: 110, |
4053fc86 DM |
251 | }, |
252 | pool: { | |
253 | header: gettext('Pool'), | |
cfb353c8 | 254 | type: 'string', |
4053fc86 DM |
255 | hidden: true, |
256 | sortable: true, | |
f6710aac | 257 | width: 110, |
2b2fe160 DC |
258 | }, |
259 | hastate: { | |
260 | header: gettext('HA State'), | |
261 | type: 'string', | |
c9329af1 | 262 | defaultValue: 'unmanaged', |
2b2fe160 | 263 | hidden: true, |
f6710aac | 264 | sortable: true, |
03f18f5e DC |
265 | }, |
266 | status: { | |
267 | header: gettext('Status'), | |
268 | type: 'string', | |
269 | hidden: true, | |
270 | sortable: true, | |
f6710aac | 271 | width: 110, |
6284a48a DC |
272 | }, |
273 | lock: { | |
274 | header: gettext('Lock'), | |
275 | type: 'string', | |
276 | hidden: true, | |
277 | sortable: true, | |
f6710aac TL |
278 | width: 110, |
279 | }, | |
4053fc86 DM |
280 | }; |
281 | ||
282 | var fields = []; | |
283 | var fieldNames = []; | |
284 | Ext.Object.each(field_defaults, function(key, value) { | |
2abb517f DC |
285 | var field = {name: key, type: value.type}; |
286 | if (Ext.isDefined(value.convert)) { | |
287 | field.convert = value.convert; | |
288 | } | |
289 | ||
290 | if (Ext.isDefined(value.calculate)) { | |
291 | field.calculate = value.calculate; | |
728f1b97 | 292 | } |
2abb517f DC |
293 | |
294 | if (Ext.isDefined(value.defaultValue)) { | |
295 | field.defaultValue = value.defaultValue; | |
296 | } | |
297 | ||
298 | fields.push(field); | |
299 | fieldNames.push(key); | |
4053fc86 DM |
300 | }); |
301 | ||
302 | Ext.define('PVEResources', { | |
303 | extend: "Ext.data.Model", | |
304 | fields: fields, | |
305 | proxy: { | |
56a353b9 | 306 | type: 'proxmox', |
f6710aac TL |
307 | url: '/api2/json/cluster/resources', |
308 | }, | |
4053fc86 DM |
309 | }); |
310 | ||
311 | Ext.define('PVETree', { | |
312 | extend: "Ext.data.Model", | |
313 | fields: fields, | |
f6710aac | 314 | proxy: { type: 'memory' }, |
4053fc86 DM |
315 | }); |
316 | ||
317 | Ext.apply(config, { | |
318 | storeid: 'PVEResources', | |
319 | model: 'PVEResources', | |
3a8c89c2 | 320 | defaultColumns: function() { |
4053fc86 DM |
321 | var res = []; |
322 | Ext.Object.each(field_defaults, function(field, info) { | |
323 | var fi = Ext.apply({ dataIndex: field }, info); | |
324 | res.push(fi); | |
325 | }); | |
326 | return res; | |
327 | }, | |
f6710aac | 328 | fieldNames: fieldNames, |
4053fc86 DM |
329 | }); |
330 | ||
331 | me.callParent([config]); | |
f6710aac | 332 | }, |
4053fc86 | 333 | }); |