mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-07 14:51:37 +00:00
ui: CPUModelSelector: use API call for store
CPU models are retrieved from the new /nodes/X/cpu call and ordered by vendor to approximate the previous sort order (less change for accustomed users). With this, custom CPU models are now selectable via the GUI. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
parent
b839766e7d
commit
4546808caa
@ -1455,6 +1455,20 @@ Ext.define('PVE.Utils', { utilities: {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
cpu_vendor_map: {
|
||||||
|
'default': 'QEMU',
|
||||||
|
'AuthenticAMD': 'AMD',
|
||||||
|
'GenuineIntel': 'Intel'
|
||||||
|
},
|
||||||
|
|
||||||
|
cpu_vendor_order: {
|
||||||
|
"AMD": 1,
|
||||||
|
"Intel": 2,
|
||||||
|
"QEMU": 3,
|
||||||
|
"Host": 4,
|
||||||
|
"_default_": 5, // includes custom models
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
singleton: true,
|
singleton: true,
|
||||||
|
@ -1,9 +1,19 @@
|
|||||||
|
Ext.define('PVE.data.CPUModel', {
|
||||||
|
extend: 'Ext.data.Model',
|
||||||
|
fields: [
|
||||||
|
{name: 'name'},
|
||||||
|
{name: 'vendor'},
|
||||||
|
{name: 'custom'},
|
||||||
|
{name: 'displayname'}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
Ext.define('PVE.form.CPUModelSelector', {
|
Ext.define('PVE.form.CPUModelSelector', {
|
||||||
extend: 'Proxmox.form.ComboGrid',
|
extend: 'Proxmox.form.ComboGrid',
|
||||||
alias: ['widget.CPUModelSelector'],
|
alias: ['widget.CPUModelSelector'],
|
||||||
|
|
||||||
valueField: 'value',
|
valueField: 'name',
|
||||||
displayField: 'value',
|
displayField: 'displayname',
|
||||||
|
|
||||||
emptyText: Proxmox.Utils.defaultText + ' (kvm64)',
|
emptyText: Proxmox.Utils.defaultText + ' (kvm64)',
|
||||||
allowBlank: true,
|
allowBlank: true,
|
||||||
@ -19,157 +29,76 @@ Ext.define('PVE.form.CPUModelSelector', {
|
|||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
header: gettext('Model'),
|
header: gettext('Model'),
|
||||||
dataIndex: 'value',
|
dataIndex: 'displayname',
|
||||||
hideable: false,
|
hideable: false,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
flex: 2
|
flex: 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: gettext('Vendor'),
|
header: gettext('Vendor'),
|
||||||
dataIndex: 'vendor',
|
dataIndex: 'vendor',
|
||||||
hideable: false,
|
hideable: false,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
flex: 1
|
flex: 2
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
width: 320
|
width: 360
|
||||||
},
|
},
|
||||||
|
|
||||||
store: {
|
store: {
|
||||||
fields: [ 'value', 'vendor' ],
|
autoLoad: true,
|
||||||
data: [
|
model: 'PVE.data.CPUModel',
|
||||||
|
proxy: {
|
||||||
|
type: 'proxmox',
|
||||||
|
url: '/api2/json/nodes/localhost/cpu'
|
||||||
|
},
|
||||||
|
sorters: [
|
||||||
{
|
{
|
||||||
value: 'athlon',
|
sorterFn: function(recordA, recordB) {
|
||||||
vendor: 'AMD'
|
let a = recordA.data;
|
||||||
},
|
let b = recordB.data;
|
||||||
{
|
|
||||||
value: 'phenom',
|
let vendorOrder = PVE.Utils.cpu_vendor_order;
|
||||||
vendor: 'AMD'
|
let orderA = vendorOrder[a.vendor] || vendorOrder['_default_'];
|
||||||
},
|
let orderB = vendorOrder[b.vendor] || vendorOrder['_default_'];
|
||||||
{
|
|
||||||
value: 'Opteron_G1',
|
if (orderA > orderB) {
|
||||||
vendor: 'AMD'
|
return 1;
|
||||||
},
|
} else if (orderA < orderB) {
|
||||||
{
|
return -1;
|
||||||
value: 'Opteron_G2',
|
}
|
||||||
vendor: 'AMD'
|
|
||||||
},
|
// Within same vendor, sort alphabetically
|
||||||
{
|
return a.name.localeCompare(b.name);
|
||||||
value: 'Opteron_G3',
|
},
|
||||||
vendor: 'AMD'
|
direction: 'ASC'
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Opteron_G4',
|
|
||||||
vendor: 'AMD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Opteron_G5',
|
|
||||||
vendor: 'AMD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'EPYC',
|
|
||||||
vendor: 'AMD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '486',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'core2duo',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'coreduo',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'pentium',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'pentium2',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'pentium3',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Conroe',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Penryn',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Nehalem',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Westmere',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'SandyBridge',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'IvyBridge',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Haswell',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Haswell-noTSX',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Broadwell',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Broadwell-noTSX',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Skylake-Client',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Skylake-Server',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'Cascadelake-Server',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'KnightsMill',
|
|
||||||
vendor: 'Intel'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'kvm32',
|
|
||||||
vendor: 'QEMU'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'kvm64',
|
|
||||||
vendor: 'QEMU'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'qemu32',
|
|
||||||
vendor: 'QEMU'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'qemu64',
|
|
||||||
vendor: 'QEMU'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
value: 'host',
|
|
||||||
vendor: 'Host'
|
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
listeners: {
|
||||||
|
load: function(store, records, success) {
|
||||||
|
if (success) {
|
||||||
|
records.forEach(rec => {
|
||||||
|
rec.data.displayname = rec.data.name.replace(/^custom-/, '');
|
||||||
|
|
||||||
|
let vendor = rec.data.vendor;
|
||||||
|
|
||||||
|
if (rec.data.name === 'host') {
|
||||||
|
vendor = 'Host';
|
||||||
|
}
|
||||||
|
|
||||||
|
// We receive vendor names as given to QEMU as CPUID
|
||||||
|
vendor = PVE.Utils.cpu_vendor_map[vendor] || vendor;
|
||||||
|
|
||||||
|
if (rec.data.custom) {
|
||||||
|
vendor = gettext('Custom') + ` (${vendor})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
rec.data.vendor = vendor;
|
||||||
|
});
|
||||||
|
|
||||||
|
store.sort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user