]> git.proxmox.com Git - pve-manager.git/blob - www/manager/qemu/Summary.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / manager / qemu / Summary.js
1 Ext.define('PVE.qemu.Summary', {
2 extend: 'Ext.panel.Panel',
3 alias: 'widget.pveQemuSummary',
4
5 initComponent: function() {
6 var me = this;
7
8 var nodename = me.pveSelNode.data.node;
9 if (!nodename) {
10 throw "no node name specified";
11 }
12
13 var vmid = me.pveSelNode.data.vmid;
14 if (!vmid) {
15 throw "no VM ID specified";
16 }
17
18 var statusview = Ext.create('PVE.qemu.StatusView', {
19 title: 'Status',
20 pveSelNode: me.pveSelNode,
21 width: 400
22 });
23
24 var rstore = statusview.rstore;
25
26 var rrdurl = "/api2/png/nodes/" + nodename + "/qemu/" + vmid + "/rrd";
27
28 var vm_command = function(cmd) {
29 PVE.Utils.API2Request({
30 params: { command: cmd },
31 url: '/nodes/' + nodename + '/qemu/' + vmid + "/status",
32 waitMsgTarget: me,
33 method: 'PUT',
34 failure: function(response, opts) {
35 Ext.Msg.alert('Error', response.htmlStatus);
36 }
37 });
38 };
39
40 var tbar = Ext.create('Ext.toolbar.Toolbar', {
41 items: [
42 {
43 itemId: 'start',
44 text: 'Start',
45 handler: function() {
46 vm_command('start');
47 }
48 },
49 {
50 itemId: 'stop',
51 text: 'Stop',
52 handler: function() {
53 var msg = "Do you really want to stop the VM?";
54 Ext.Msg.confirm('Confirm', msg, function(btn) {
55 if (btn !== 'yes') {
56 return;
57 }
58 vm_command("stop");
59 });
60 }
61 },
62 {
63 text: 'Reset',
64 itemId: 'reset',
65 handler: function() {
66 var msg = "Do you really want to reset the VM?";
67 Ext.Msg.confirm('Confirm', msg, function(btn) {
68 if (btn !== 'yes') {
69 return;
70 }
71 vm_command("reset");
72 });
73 }
74 },
75 {
76 itemId: 'shutdown',
77 text: 'Shutdown',
78 handler: function() {
79 var msg = "Do you really want to shutdown the VM?";
80 Ext.Msg.confirm('Confirm', msg, function(btn) {
81 if (btn !== 'yes') {
82 return;
83 }
84 vm_command('shutdown');
85 });
86 }
87 },
88 {
89 itemId: 'remove',
90 text: 'Remove',
91 handler: function() {
92 var msg = 'Are you sure you want to remove VM ' +
93 vmid + '? This will permanently erase all VM data.';
94 Ext.Msg.confirm('Confirm', msg, function(btn) {
95 if (btn !== 'yes') {
96 return;
97 }
98 PVE.Utils.API2Request({
99 url: '/nodes/' + nodename + '/qemu/' + vmid,
100 method: 'DELETE',
101 waitMsgTarget: me,
102 failure: function(response, opts) {
103 Ext.Msg.alert('Error', response.htmlStatus);
104 }
105 });
106 });
107 }
108 },
109 {
110 itemId: 'console',
111 text: 'Console',
112 handler: function() {
113 var url = Ext.urlEncode({
114 console: 'kvm',
115 vmid: vmid,
116 node: nodename
117 });
118 var nw = window.open("?" + url, '_blank',
119 "innerWidth=745,innerheight=427");
120 nw.focus();
121 }
122 }, '->',
123 {
124 xtype: 'pveRRDTypeSelector'
125 }
126 ]
127 });
128
129 me.mon(rstore, 'load', function(s, records, success) {
130 var rec = s.data.get('status');
131 var status = rec ? rec.data.value : 'unknown';
132
133 tbar.down('#start').setDisabled(status === 'running');
134 tbar.down('#reset').setDisabled(status !== 'running');
135 tbar.down('#shutdown').setDisabled(status !== 'running');
136 tbar.down('#stop').setDisabled(status === 'stopped');
137 tbar.down('#console').setDisabled(status !== 'running');
138 tbar.down('#remove').setDisabled(status !== 'stopped');
139 });
140
141 var notesview = Ext.create('PVE.qemu.NotesView', {
142 pveSelNode: me.pveSelNode,
143 flex: 1
144 });
145
146 Ext.apply(me, {
147 tbar: tbar,
148 autoScroll: true,
149 bodyStyle: 'padding:10px',
150 defaults: {
151 style: 'padding-top:10px',
152 width: 800
153 },
154 items: [
155 {
156 style: 'padding-top:0px',
157 layout: {
158 type: 'hbox',
159 align: 'stretchmax'
160 },
161 border: false,
162 items: [ statusview, notesview ]
163 },
164 {
165 xtype: 'pveRRDView',
166 title: "CPU usage %",
167 pveSelNode: me.pveSelNode,
168 datasource: 'cpu',
169 rrdurl: rrdurl
170 },
171 {
172 xtype: 'pveRRDView',
173 title: "Memory usage",
174 pveSelNode: me.pveSelNode,
175 datasource: 'mem,maxmem',
176 rrdurl: rrdurl
177 },
178 {
179 xtype: 'pveRRDView',
180 title: "Network traffic",
181 pveSelNode: me.pveSelNode,
182 datasource: 'netin,netout',
183 rrdurl: rrdurl
184 },
185 {
186 xtype: 'pveRRDView',
187 title: "Disk IO",
188 pveSelNode: me.pveSelNode,
189 datasource: 'diskread,diskwrite',
190 rrdurl: rrdurl
191 }
192 ]
193 });
194
195 me.on('show', function() {
196 rstore.startUpdate();
197 notesview.load();
198 });
199
200 me.on('hide', rstore.stopUpdate);
201 me.on('destroy', rstore.stopUpdate);
202
203 me.callParent();
204 }
205 });