]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/ServerStatus.js
quarantine list: cope with undefined mail value
[pmg-gui.git] / js / ServerStatus.js
index a5928af91062cfccb972d81c1d9a567b61427af4..f7d79e90ee03d3540ab1b65df06027b60f9e9004 100644 (file)
@@ -6,14 +6,178 @@ Ext.define('PMG.ServerStatus', {
 
     border: false,
 
+    scrollable: true,
+
+    bodyPadding: 5,
+    defaults: {
+       width: 700,
+       padding: 5,
+       columnWidth: 1,
+    },
+
+    layout: 'column',
+
+    controller: {
+       xclass: 'Ext.app.ViewController',
+
+       openConsole: function() {
+           Proxmox.Utils.openXtermJsViewer('shell', 0, Proxmox.NodeName);
+       },
+
+       nodeCommand: function(cmd) {
+           Proxmox.Utils.API2Request({
+               params: {
+                   command: cmd,
+               },
+               url: `/nodes/${Proxmox.NodeName}/status`,
+               method: 'POST',
+               waitMsgTarget: this.getView(),
+               failure: response => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
+           });
+       },
+
+       nodeShutdown: function() {
+           this.nodeCommand('shutdown');
+       },
+
+       nodeReboot: function() {
+           this.nodeCommand('reboot');
+       },
+    },
+
     tbar: [
+       {
+           text: gettext('Package versions'),
+           iconCls: 'fa fa-gift',
+           handler: () => Proxmox.Utils.checked_command(() => {
+               Ext.create('Proxmox.window.PackageVersions', {
+                   autoShow: true,
+               });
+           }),
+       },
        {
            text: gettext("Console"),
-           handler: function() {
-               PMG.Utils.openVNCViewer('shell', Proxmox.NodeName);
-           }
-       }
-    ]
+           iconCls: 'fa fa-terminal',
+           handler: 'openConsole',
+       },
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Restart'),
+           dangerous: true,
+           confirmMsg: `${gettext('Node')} '${Proxmox.NodeName}' - ${gettext('Restart')}`,
+           handler: 'nodeReboot',
+           iconCls: 'fa fa-undo',
+       },
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Shutdown'),
+           dangerous: true,
+           confirmMsg: `${gettext('Node')} '${Proxmox.NodeName}' - ${gettext('Shutdown')}`,
+           handler: 'nodeShutdown',
+           iconCls: 'fa fa-power-off',
+       },
+       '->',
+       {
+           xtype: 'proxmoxRRDTypeSelector',
+       },
+    ],
+
+    initComponent: function() {
+        let me = this;
 
+       let nodename = Proxmox.NodeName;
+       let rrdstore = Ext.create('Proxmox.data.RRDStore', {
+           rrdurl: `/api2/json/nodes/${nodename}/rrddata`,
+           fields: [
+               { type: 'number', name: 'loadavg' },
+               { type: 'number', name: 'maxcpu' },
+               {
+                   type: 'number',
+                   name: 'cpu',
+                   convert: val => val * 100,
+               },
+               {
+                   type: 'number',
+                   name: 'iowait',
+                   convert: val => val * 100,
+               },
+               { type: 'number', name: 'memtotal' },
+               { type: 'number', name: 'memused' },
+               { type: 'number', name: 'swaptotal' },
+               { type: 'number', name: 'swapused' },
+               { type: 'number', name: 'roottotal' },
+               { type: 'number', name: 'rootused' },
+               { type: 'number', name: 'netin' },
+               { type: 'number', name: 'netout' },
+               { type: 'date', dateFormat: 'timestamp', name: 'time' },
+           ],
+       });
+
+       Ext.apply(me, {
+           items: [
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('CPU usage'),
+                   unit: 'percent',
+                   fields: ['cpu', 'iowait'],
+                   fieldTitles: [gettext('CPU usage'), gettext('IO delay')],
+                   store: rrdstore,
+               },
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('Server load'),
+                   fields: ['loadavg'],
+                   fieldTitles: [gettext('Load average')],
+                   store: rrdstore,
+               },
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('Memory usage'),
+                   unit: 'bytes',
+                   fields: ['memtotal', 'memused'],
+                   fieldTitles: [gettext('Total'), gettext('Used')],
+                   store: rrdstore,
+               },
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('Swap usage'),
+                   unit: 'bytes',
+                   fields: ['swaptotal', 'swapused'],
+                   fieldTitles: [gettext('Total'), gettext('Used')],
+                   store: rrdstore,
+               },
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('Network traffic'),
+                   unit: 'bytespersecond',
+                   fields: ['netin', 'netout'],
+                   fieldTitles: [gettext('Ingress'), gettext('Egress')],
+                   store: rrdstore,
+               },
+               {
+                   xtype: 'proxmoxRRDChart',
+                   title: gettext('Disk usage'),
+                   unit: 'bytes',
+                   fields: ['roottotal', 'rootused'],
+                   fieldTitles: [gettext('Total'), gettext('Used')],
+                   store: rrdstore,
+               },
+           ],
+           listeners: {
+               resize: panel => Proxmox.Utils.updateColumnWidth(panel),
+               activate: () => rrdstore.startUpdate(),
+               destroy: () => rrdstore.stopUpdate(),
+           },
+       });
+
+       me.callParent();
+
+       let sp = Ext.state.Manager.getProvider();
+       me.mon(sp, 'statechange', function(provider, key, value) {
+           if (key !== 'summarycolumns') {
+               return;
+           }
+           Proxmox.Utils.updateColumnWidth(me);
+       });
+   },
 });
-