Ext.define('PVE.NodeInfo', { extend: 'Ext.Component', alias: 'widget.pveNodeInfo', config: { style: 'background-color: white;', styleHtmlContent: true, data: [], tpl: [ '', '', '', '', '', '
Version:{pveversion}
Memory:{[this.meminfo(values)]}
CPU:{[this.cpuinfo(values)]}
Uptime:{[Proxmox.Utils.format_duration_long(values.uptime)]}
', { meminfo: function(values) { var d = values.memory; if (!d) { return '-'; } return Proxmox.Utils.format_size(d.used || 0) + " of " + Proxmox.Utils.format_size(d.total); }, cpuinfo: function(values) { if (!values.cpuinfo) { return '-'; } var per = values.cpu * 100; return per.toFixed(2) + "% (" + values.cpuinfo.cpus + " CPUs)"; } } ] }, }); Ext.define('PVE.NodeSummary', { extend: 'PVE.Page', alias: 'widget.pveNodeSummary', statics: { pathMatch: function(loc) { return loc.match(/^nodes\/([^\s\/]+)$/); } }, nodename: undefined, config: { items: [ { xtype: 'pveTitleBar' }, { xtype: 'pveNodeInfo' }, { xtype: 'component', cls: 'dark', padding: 5, html: gettext('Virtual machines') }, { xtype: 'list', flex: 1, disableSelection: true, listeners: { itemsingletap: function(list, index, target, record) { PVE.Workspace.gotoPage('nodes/' + record.get('nodename') + '/' + record.get('type') + '/' + record.get('vmid')); } }, grouped: true, itemTpl: [ '{name}
', '', 'id: {vmid} ', '', 'cpu: {[this.cpuinfo(values)]} ', 'mem: {[this.meminfo(values)]} ', '', '', { meminfo: function(values) { if (!values.uptime) { return '-'; } return Proxmox.Utils.format_size(values.mem); }, cpuinfo: function(values) { if (!values.uptime) { return '-'; } return (values.cpu*100).toFixed(1) + '%'; } } ] } ] }, reload: function() { var me = this; var ni = me.down('pveNodeInfo'); Proxmox.Utils.API2Request({ url: '/nodes/' + me.nodename + '/status', method: 'GET', success: function(response) { var d = response.result.data; if (d.pveversion) { d.pveversion = d.pveversion.replace(/pve\-manager\//, ''); } ni.setData(d); } }); var list = me.down('list'); list.setMasked(false); var error_handler = function(response) { list.setMasked({ xtype: 'loadmask', message: response.htmlStatus} ); }; Proxmox.Utils.API2Request({ url: '/nodes/' + me.nodename + '/lxc', method: 'GET', success: function(response) { var d = response.result.data; d.nodename = me.nodename; d.forEach(function(el) { el.type = 'lxc'; el.nodename = me.nodename }); me.store.each(function(rec) { if (rec.get('type') === 'lxc') { rec.destroy(); } }); me.store.add(d); }, failure: error_handler }); Proxmox.Utils.API2Request({ url: '/nodes/' + me.nodename + '/qemu', method: 'GET', success: function(response) { var d = response.result.data; d.forEach(function(el) { el.type = 'qemu'; el.nodename = me.nodename }); me.store.each(function(rec) { if (rec.get('type') === 'qemu') { rec.destroy(); } }); me.store.add(d); }, failure: error_handler }); }, initialize: function() { var me = this; var match = me.self.pathMatch(me.getAppUrl()); if (!match) { throw "pathMatch failed"; } me.nodename = match[1]; me.down('titlebar').setTitle(gettext('Node') + ': ' + me.nodename); me.down('pveMenuButton').setMenuItems([ { text: gettext('Tasks'), handler: function() { PVE.Workspace.gotoPage('nodes/' + me.nodename + '/tasks'); } }, ]); me.store = Ext.create('Ext.data.Store', { fields: [ 'name', 'vmid', 'nodename', 'type', 'memory', 'uptime', 'mem', 'maxmem', 'cpu', 'cpus'], sorters: ['vmid'], grouper: { groupFn: function(record) { return record.get('type'); } }, }); var list = me.down('list'); list.setStore(me.store); me.reload(); this.callParent(); } });