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