]> git.proxmox.com Git - pmg-gui.git/blob - js/ServerStatus.js
ServerStatus: update column width on state change
[pmg-gui.git] / js / ServerStatus.js
1 Ext.define('PMG.ServerStatus', {
2 extend: 'Ext.panel.Panel',
3 alias: 'widget.pmgServerStatus',
4
5 title: gettext('Status'),
6
7 border: false,
8
9 scrollable: true,
10
11 bodyPadding: 5,
12 defaults: {
13 width: 700,
14 padding: 5,
15 columnWidth: 1,
16 },
17
18 layout: 'column',
19
20 controller: {
21 xclass: 'Ext.app.ViewController',
22
23 openConsole: function() {
24 Proxmox.Utils.openXtermJsViewer('shell', 0, Proxmox.NodeName);
25 },
26
27 nodeCommand: function(cmd) {
28 Proxmox.Utils.API2Request({
29 params: {
30 command: cmd,
31 },
32 url: `/nodes/${Proxmox.NodeName}/status`,
33 method: 'POST',
34 waitMsgTarget: this.getView(),
35 failure: response => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
36 });
37 },
38
39 nodeShutdown: function() {
40 this.nodeCommand('shutdown');
41 },
42
43 nodeReboot: function() {
44 this.nodeCommand('reboot');
45 },
46 },
47
48 tbar: [
49 {
50 text: gettext("Console"),
51 iconCls: 'fa fa-terminal',
52 handler: 'openConsole',
53 },
54 {
55 xtype: 'proxmoxButton',
56 text: gettext('Restart'),
57 dangerous: true,
58 confirmMsg: `${gettext('Node')} '${Proxmox.NodeName}' - ${gettext('Restart')}`,
59 handler: 'nodeReboot',
60 iconCls: 'fa fa-undo',
61 },
62 {
63 xtype: 'proxmoxButton',
64 text: gettext('Shutdown'),
65 dangerous: true,
66 confirmMsg: `${gettext('Node')} '${Proxmox.NodeName}' - ${gettext('Shutdown')}`,
67 handler: 'nodeShutdown',
68 iconCls: 'fa fa-power-off',
69 },
70 '->',
71 {
72 xtype: 'proxmoxRRDTypeSelector',
73 },
74 ],
75
76 initComponent: function() {
77 let me = this;
78
79 let nodename = Proxmox.NodeName;
80 let rrdstore = Ext.create('Proxmox.data.RRDStore', {
81 rrdurl: `/api2/json/nodes/${nodename}/rrddata`,
82 fields: [
83 { type: 'number', name: 'loadavg' },
84 { type: 'number', name: 'maxcpu' },
85 {
86 type: 'number',
87 name: 'cpu',
88 convert: val => val * 100,
89 },
90 {
91 type: 'number',
92 name: 'iowait',
93 convert: val => val * 100,
94 },
95 { type: 'number', name: 'memtotal' },
96 { type: 'number', name: 'memused' },
97 { type: 'number', name: 'swaptotal' },
98 { type: 'number', name: 'swapused' },
99 { type: 'number', name: 'roottotal' },
100 { type: 'number', name: 'rootused' },
101 { type: 'number', name: 'netin' },
102 { type: 'number', name: 'netout' },
103 { type: 'date', dateFormat: 'timestamp', name: 'time' },
104 ],
105 });
106
107 Ext.apply(me, {
108 items: [
109 {
110 xtype: 'proxmoxRRDChart',
111 title: gettext('CPU usage'),
112 unit: 'percent',
113 fields: ['cpu', 'iowait'],
114 fieldTitles: [gettext('CPU usage'), gettext('IO delay')],
115 store: rrdstore,
116 },
117 {
118 xtype: 'proxmoxRRDChart',
119 title: gettext('Server load'),
120 fields: ['loadavg'],
121 fieldTitles: [gettext('Load average')],
122 store: rrdstore,
123 },
124 {
125 xtype: 'proxmoxRRDChart',
126 title: gettext('Memory usage'),
127 unit: 'bytes',
128 fields: ['memtotal', 'memused'],
129 fieldTitles: [gettext('Total'), gettext('Used')],
130 store: rrdstore,
131 },
132 {
133 xtype: 'proxmoxRRDChart',
134 title: gettext('Swap usage'),
135 unit: 'bytes',
136 fields: ['swaptotal', 'swapused'],
137 fieldTitles: [gettext('Total'), gettext('Used')],
138 store: rrdstore,
139 },
140 {
141 xtype: 'proxmoxRRDChart',
142 title: gettext('Network traffic'),
143 unit: 'bytespersecond',
144 fields: ['netin', 'netout'],
145 fieldTitles: [gettext('Ingress'), gettext('Egress')],
146 store: rrdstore,
147 },
148 {
149 xtype: 'proxmoxRRDChart',
150 title: gettext('Disk usage'),
151 unit: 'bytes',
152 fields: ['roottotal', 'rootused'],
153 fieldTitles: [gettext('Total'), gettext('Used')],
154 store: rrdstore,
155 },
156 ],
157 listeners: {
158 resize: panel => Proxmox.Utils.updateColumnWidth(panel),
159 activate: () => rrdstore.startUpdate(),
160 destroy: () => rrdstore.stopUpdate(),
161 },
162 });
163
164 me.callParent();
165
166 let sp = Ext.state.Manager.getProvider();
167 me.mon(sp, 'statechange', function(provider, key, value) {
168 if (key !== 'summarycolumns') {
169 return;
170 }
171 Proxmox.Utils.updateColumnWidth(me);
172 });
173 },
174 });