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