]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/data/ResourceStore.js
ui: tree/ResourceTree: show Tags in 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) {
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'),
298 type: 'string',
299 hidden: true,
300 sortable: true,
301 },
4053fc86
DM
302 };
303
a0b5aa90
TL
304 let fields = [];
305 let fieldNames = [];
4053fc86 306 Ext.Object.each(field_defaults, function(key, value) {
8058410f 307 var field = { name: key, type: value.type };
2abb517f
DC
308 if (Ext.isDefined(value.convert)) {
309 field.convert = value.convert;
310 }
311
312 if (Ext.isDefined(value.calculate)) {
313 field.calculate = value.calculate;
728f1b97 314 }
2abb517f
DC
315
316 if (Ext.isDefined(value.defaultValue)) {
317 field.defaultValue = value.defaultValue;
318 }
319
320 fields.push(field);
321 fieldNames.push(key);
4053fc86
DM
322 });
323
324 Ext.define('PVEResources', {
325 extend: "Ext.data.Model",
326 fields: fields,
327 proxy: {
56a353b9 328 type: 'proxmox',
f6710aac
TL
329 url: '/api2/json/cluster/resources',
330 },
4053fc86
DM
331 });
332
333 Ext.define('PVETree', {
334 extend: "Ext.data.Model",
335 fields: fields,
f6710aac 336 proxy: { type: 'memory' },
4053fc86
DM
337 });
338
339 Ext.apply(config, {
340 storeid: 'PVEResources',
341 model: 'PVEResources',
3a8c89c2 342 defaultColumns: function() {
a0b5aa90 343 let res = [];
4053fc86 344 Ext.Object.each(field_defaults, function(field, info) {
a0b5aa90
TL
345 let fieldInfo = Ext.apply({ dataIndex: field }, info);
346 res.push(fieldInfo);
4053fc86
DM
347 });
348 return res;
349 },
f6710aac 350 fieldNames: fieldNames,
4053fc86
DM
351 });
352
353 me.callParent([config]);
f6710aac 354 },
4053fc86 355});