pve-manager/www/manager6/data/ResourceStore.js
Dominik Csapak 366558a79d ui: tree/ResourceTree: show Tags in tree
and update the treenodes when the tags change.
since we change the vm node text (which we pass through to the config
panel), we have to change how we generate the text there slightly
(otherwise that would include the rendered tags)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2022-11-17 18:21:23 +01:00

356 lines
7.0 KiB
JavaScript

Ext.define('PVE.data.ResourceStore', {
extend: 'Proxmox.data.UpdateStore',
singleton: true,
findVMID: function(vmid) {
let me = this;
return me.findExact('vmid', parseInt(vmid, 10)) >= 0;
},
// returns the cached data from all nodes
getNodes: function() {
let me = this;
let nodes = [];
me.each(function(record) {
if (record.get('type') === "node") {
nodes.push(record.getData());
}
});
return nodes;
},
storageIsShared: function(storage_path) {
let me = this;
let index = me.findExact('id', storage_path);
if (index >= 0) {
return me.getAt(index).data.shared;
} else {
return undefined;
}
},
guestNode: function(vmid) {
let me = this;
let index = me.findExact('vmid', parseInt(vmid, 10));
return me.getAt(index).data.node;
},
guestName: function(vmid) {
let me = this;
let index = me.findExact('vmid', parseInt(vmid, 10));
if (index < 0) {
return '-';
}
let rec = me.getAt(index).data;
if ('name' in rec) {
return rec.name;
}
return '';
},
constructor: function(config) {
let me = this;
config = config || {};
let field_defaults = {
type: {
header: gettext('Type'),
type: 'string',
renderer: PVE.Utils.render_resource_type,
sortable: true,
hideable: false,
width: 100,
},
id: {
header: 'ID',
type: 'string',
hidden: true,
sortable: true,
width: 80,
},
running: {
header: gettext('Online'),
type: 'boolean',
renderer: Proxmox.Utils.format_boolean,
hidden: true,
convert: function(value, record) {
var info = record.data;
return Ext.isNumeric(info.uptime) && info.uptime > 0;
},
},
text: {
header: gettext('Description'),
type: 'string',
sortable: true,
width: 200,
convert: function(value, record) {
if (value) {
return value;
}
let info = record.data, text;
if (Ext.isNumeric(info.vmid) && info.vmid > 0) {
text = String(info.vmid);
if (info.name) {
text += " (" + info.name + ')';
}
} else { // node, pool, storage
text = info[info.type] || info.id;
if (info.node && info.type !== 'node') {
text += " (" + info.node + ")";
}
}
return text;
},
},
vmid: {
header: 'VMID',
type: 'integer',
hidden: true,
sortable: true,
width: 80,
},
name: {
header: gettext('Name'),
hidden: true,
sortable: true,
type: 'string',
},
disk: {
header: gettext('Disk usage'),
type: 'integer',
renderer: PVE.Utils.render_disk_usage,
sortable: true,
width: 100,
hidden: true,
},
diskuse: {
header: gettext('Disk usage') + " %",
type: 'number',
sortable: true,
renderer: PVE.Utils.render_disk_usage_percent,
width: 100,
calculate: PVE.Utils.calculate_disk_usage,
sortType: 'asFloat',
},
maxdisk: {
header: gettext('Disk size'),
type: 'integer',
renderer: Proxmox.Utils.render_size,
sortable: true,
hidden: true,
width: 100,
},
mem: {
header: gettext('Memory usage'),
type: 'integer',
renderer: PVE.Utils.render_mem_usage,
sortable: true,
hidden: true,
width: 100,
},
memuse: {
header: gettext('Memory usage') + " %",
type: 'number',
renderer: PVE.Utils.render_mem_usage_percent,
calculate: PVE.Utils.calculate_mem_usage,
sortType: 'asFloat',
sortable: true,
width: 100,
},
maxmem: {
header: gettext('Memory size'),
type: 'integer',
renderer: Proxmox.Utils.render_size,
hidden: true,
sortable: true,
width: 100,
},
cpu: {
header: gettext('CPU usage'),
type: 'float',
renderer: Proxmox.Utils.render_cpu,
sortable: true,
width: 100,
},
maxcpu: {
header: gettext('maxcpu'),
type: 'integer',
hidden: true,
sortable: true,
width: 60,
},
diskread: {
header: gettext('Total Disk Read'),
type: 'integer',
hidden: true,
sortable: true,
renderer: Proxmox.Utils.format_size,
width: 100,
},
diskwrite: {
header: gettext('Total Disk Write'),
type: 'integer',
hidden: true,
sortable: true,
renderer: Proxmox.Utils.format_size,
width: 100,
},
netin: {
header: gettext('Total NetIn'),
type: 'integer',
hidden: true,
sortable: true,
renderer: Proxmox.Utils.format_size,
width: 100,
},
netout: {
header: gettext('Total NetOut'),
type: 'integer',
hidden: true,
sortable: true,
renderer: Proxmox.Utils.format_size,
width: 100,
},
template: {
header: gettext('Template'),
type: 'integer',
hidden: true,
sortable: true,
width: 60,
},
uptime: {
header: gettext('Uptime'),
type: 'integer',
renderer: Proxmox.Utils.render_uptime,
sortable: true,
width: 110,
},
node: {
header: gettext('Node'),
type: 'string',
hidden: true,
sortable: true,
width: 110,
},
storage: {
header: gettext('Storage'),
type: 'string',
hidden: true,
sortable: true,
width: 110,
},
pool: {
header: gettext('Pool'),
type: 'string',
hidden: true,
sortable: true,
width: 110,
},
hastate: {
header: gettext('HA State'),
type: 'string',
defaultValue: 'unmanaged',
hidden: true,
sortable: true,
},
status: {
header: gettext('Status'),
type: 'string',
hidden: true,
sortable: true,
width: 110,
},
lock: {
header: gettext('Lock'),
type: 'string',
hidden: true,
sortable: true,
width: 110,
},
hostcpu: {
header: gettext('Host CPU usage'),
type: 'float',
renderer: PVE.Utils.render_hostcpu,
calculate: PVE.Utils.calculate_hostcpu,
sortType: 'asFloat',
sortable: true,
width: 100,
},
hostmemuse: {
header: gettext('Host Memory usage') + " %",
type: 'number',
renderer: PVE.Utils.render_hostmem_usage_percent,
calculate: PVE.Utils.calculate_hostmem_usage,
sortType: 'asFloat',
sortable: true,
width: 100,
},
tags: {
header: gettext('Tags'),
type: 'string',
hidden: true,
sortable: true,
},
};
let fields = [];
let fieldNames = [];
Ext.Object.each(field_defaults, function(key, value) {
var field = { name: key, type: value.type };
if (Ext.isDefined(value.convert)) {
field.convert = value.convert;
}
if (Ext.isDefined(value.calculate)) {
field.calculate = value.calculate;
}
if (Ext.isDefined(value.defaultValue)) {
field.defaultValue = value.defaultValue;
}
fields.push(field);
fieldNames.push(key);
});
Ext.define('PVEResources', {
extend: "Ext.data.Model",
fields: fields,
proxy: {
type: 'proxmox',
url: '/api2/json/cluster/resources',
},
});
Ext.define('PVETree', {
extend: "Ext.data.Model",
fields: fields,
proxy: { type: 'memory' },
});
Ext.apply(config, {
storeid: 'PVEResources',
model: 'PVEResources',
defaultColumns: function() {
let res = [];
Ext.Object.each(field_defaults, function(field, info) {
let fieldInfo = Ext.apply({ dataIndex: field }, info);
res.push(fieldInfo);
});
return res;
},
fieldNames: fieldNames,
});
me.callParent([config]);
},
});