]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/data/ResourceStore.js
gui: add lock to resource store and tree
[pve-manager.git] / www / manager6 / data / ResourceStore.js
CommitLineData
4053fc86 1Ext.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});