]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/VNCConsole.js
1 PVE_vnc_console_event = function(appletid
, action
, err
) {
2 //console.log("TESTINIT param1 " + appletid + " action " + action);
4 if (action
=== "error") {
5 var compid
= appletid
.replace("-vncapp", "");
6 var comp
= Ext
.getCmp(compid
);
8 if (!comp
|| !comp
.vmid
|| !comp
.toplevel
) {
12 // try to detect migrated VM
13 PVE
.Utils
.API2Request({
14 url
: '/cluster/resources',
16 success: function(response
) {
17 var list
= response
.result
.data
;
18 Ext
.Array
.each(list
, function(item
) {
19 if (item
.type
=== 'qemu' && item
.vmid
== comp
.vmid
) {
20 if (item
.node
!== comp
.nodename
) {
21 //console.log("MOVED VM to node " + item.node);
22 comp
.nodename
= item
.node
;
23 comp
.url
= "/nodes/" + comp
.nodename
+ "/" + item
.type
+ "/" + comp
.vmid
+ "/vncproxy";
24 //console.log("NEW URL " + comp.url);
27 return false; // break
36 var el = Ext.get(appletid);
40 if (action === "close") {
42 } else if (action === "error") {
43 // console.log("TESTERROR: " + err);
44 // var compid = appletid.replace("-vncapp", "");
45 // var comp = Ext.getCmp(compid);
48 //Ext.get('mytestid').remove();
53 Ext
.define('PVE.VNCConsole', {
54 extend
: 'Ext.panel.Panel',
55 alias
: ['widget.pveVNCConsole'],
57 initComponent : function() {
61 throw "no url specified";
64 var myid
= me
.id
+ "-vncapp";
68 var box
= Ext
.create('Ext.Component', {
73 var resize_window = function() {
74 //console.log("resize");
76 var applet
= Ext
.getDom(myid
);
77 //console.log("resize " + myid + " " + applet);
79 // try again when dom element is available
80 if (!(applet
&& Ext
.isFunction(applet
.getPreferredSize
))) {
81 return Ext
.Function
.defer(resize_window
, 1000);
84 var tbar
= me
.getDockedItems("[dock=top]")[0];
85 var tbh
= tbar
? tbar
.getHeight() : 0;
86 var ps
= applet
.getPreferredSize();
90 if (aw
< 640) { aw
= 640; }
91 if (ah
< 400) { ah
= 400; }
96 //console.log("size0 " + aw + " " + ah + " tbh " + tbh);
98 if (window
.innerHeight
) {
99 oh
= window
.innerHeight
;
100 ow
= window
.innerWidth
;
101 } else if (document
.documentElement
&&
102 document
.documentElement
.clientHeight
) {
103 oh
= document
.documentElement
.clientHeight
;
104 ow
= document
.documentElement
.clientWidth
;
105 } else if (document
.body
) {
106 oh
= document
.body
.clientHeight
;
107 ow
= document
.body
.clientWidth
;
109 throw "can't get window size";
112 Ext
.fly(applet
).setSize(aw
, ah
+ tbh
);
114 var offsetw
= aw
- ow
;
115 var offseth
= ah
+ tbh
- oh
;
117 if (offsetw
!== 0 || offseth
!== 0) {
118 //console.log("try resize by " + offsetw + " " + offseth);
119 try { window
.resizeBy(offsetw
, offseth
); } catch (e
) {}
122 Ext
.Function
.defer(resize_window
, 1000);
125 var resize_box = function() {
126 var applet
= Ext
.getDom(myid
);
128 if ((applet
&& Ext
.isFunction(applet
.getPreferredSize
))) {
129 var ps
= applet
.getPreferredSize();
130 Ext
.fly(applet
).setSize(ps
.width
, ps
.height
);
133 Ext
.Function
.defer(resize_box
, 1000);
136 var start_vnc_viewer = function(param
) {
137 var cert
= param
.cert
;
138 cert
= cert
.replace(/\n/g, "|");
144 code
: 'com.tigervnc.vncviewer.VncViewer',
145 archive
: '/vncterm/VncViewer.jar',
146 // NOTE: set size to '100%' - else resize does not work
150 {tag
: 'param', name
: 'id', value
: myid
},
151 {tag
: 'param', name
: 'PORT', value
: param
.port
},
152 {tag
: 'param', name
: 'PASSWORD', value
: param
.ticket
},
153 {tag
: 'param', name
: 'USERNAME', value
: param
.user
},
154 {tag
: 'param', name
: 'Show Controls', value
: 'No'},
155 {tag
: 'param', name
: 'Offer Relogin', value
: 'No'},
156 {tag
: 'param', name
: 'PVECert', value
: cert
}
160 Ext
.Function
.defer(resize_window
, 1000);
162 Ext
.Function
.defer(resize_box
, 1000);
169 autoScroll
: me
.toplevel
? false : true,
171 reloadApplet: function() {
172 PVE
.Utils
.API2Request({
175 method
: me
.method
|| 'POST',
176 failure: function(response
, opts
) {
177 box
.update(gettext('Error') + ' ' + response
.htmlStatus
);
179 success: function(response
, opts
) {
180 start_vnc_viewer(response
.result
.data
);
189 me
.on("render", function() { me
.reloadApplet();});
191 me
.on("show", function() { me
.reloadApplet();});
192 me
.on("hide", function() { box
.update(""); });
197 Ext
.define('PVE.KVMConsole', {
198 extend
: 'PVE.VNCConsole',
199 alias
: ['widget.pveKVMConsole'],
201 initComponent : function() {
205 throw "no node name specified";
209 throw "no VM ID specified";
212 var vm_command = function(cmd
, params
, reload_applet
) {
213 PVE
.Utils
.API2Request({
215 url
: '/nodes/' + me
.nodename
+ '/qemu/' + me
.vmid
+ "/status/" + cmd
,
218 failure: function(response
, opts
) {
219 Ext
.Msg
.alert('Error', response
.htmlStatus
);
221 success: function() {
223 Ext
.Function
.defer(me
.reloadApplet
, 1000, me
);
231 text
: gettext('Start'),
232 handler: function() {
233 vm_command("start", {}, 1);
237 text
: gettext('Shutdown'),
238 handler: function() {
239 var msg
= Ext
.String
.format(gettext("Do you really want to shutdown VM {0}?"), me
.vmid
);
240 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
244 vm_command('shutdown', {timeout
: 30});
249 text
: gettext('Stop'),
250 handler: function() {
251 var msg
= Ext
.String
.format(gettext("Do you really want to stop VM {0}?"), me
.vmid
);
252 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
256 vm_command("stop", { timeout
: 30});
261 xtype
: 'pveQemuSendKeyMenu',
262 nodename
: me
.nodename
,
266 text
: gettext('Reset'),
267 handler: function() {
268 var msg
= Ext
.String
.format(gettext("Do you really want to reset VM {0}?"), me
.vmid
);
269 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
278 text
: gettext('Suspend'),
279 handler: function() {
280 var msg
= Ext
.String
.format(gettext("Do you really want to suspend VM {0}?"), me
.vmid
);
281 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
285 vm_command("suspend");
290 text
: gettext('Resume'),
291 handler: function() {
292 vm_command("resume");
295 // Note: no migrate here, because we can't display migrate log
297 text
: gettext('Console'),
298 handler: function() {
299 PVE
.Utils
.openConoleWindow('kvm', me
.vmid
, me
.nodename
, me
.vmname
);
304 text
: gettext('Refresh'),
305 handler: function() {
306 var applet
= Ext
.getDom(me
.appletID
);
307 applet
.sendRefreshRequest();
311 text
: gettext('Reload'),
312 handler: function () {
320 url
: "/nodes/" + me
.nodename
+ "/qemu/" + me
.vmid
+ "/vncproxy"
327 Ext
.define('PVE.OpenVZConsole', {
328 extend
: 'PVE.VNCConsole',
329 alias
: ['widget.pveOpenVZConsole'],
331 initComponent : function() {
335 throw "no node name specified";
339 throw "no VM ID specified";
342 var vm_command = function(cmd
, params
, reload_applet
) {
343 PVE
.Utils
.API2Request({
345 url
: '/nodes/' + me
.nodename
+ '/openvz/' + me
.vmid
+ "/status/" + cmd
,
348 failure: function(response
, opts
) {
349 Ext
.Msg
.alert('Error', response
.htmlStatus
);
351 success: function() {
353 Ext
.Function
.defer(me
.reloadApplet
, 1000, me
);
361 text
: gettext('Start'),
362 handler: function() {
363 vm_command("start", {}, 1);
367 text
: gettext('Shutdown'),
368 handler: function() {
369 var msg
= Ext
.String
.format(gettext("Do you really want to shutdown VM {0}?"), me
.vmid
);
370 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
374 vm_command("shutdown");
379 text
: gettext('Stop'),
380 handler: function() {
381 var msg
= Ext
.String
.format(gettext("Do you really want to stop VM {0}?"), me
.vmid
);
382 Ext
.Msg
.confirm(gettext('Confirm'), msg
, function(btn
) {
390 // Note: no migrate here, because we can't display migrate log
391 // and openvz migrate does not work if console is open
393 text
: gettext('Console'),
394 handler: function() {
395 PVE
.Utils
.openConoleWindow('openvz', me
.vmid
, me
.nodename
, me
.vmname
);
400 text
: gettext('Refresh'),
401 handler: function() {
402 var applet
= Ext
.getDom(me
.appletID
);
403 applet
.sendRefreshRequest();
407 text
: gettext('Reload'),
408 handler: function () {
416 url
: "/nodes/" + me
.nodename
+ "/openvz/" + me
.vmid
+ "/vncproxy"
423 Ext
.define('PVE.Shell', {
424 extend
: 'PVE.VNCConsole',
425 alias
: ['widget.pveShell'],
427 initComponent : function() {
431 throw "no node name specified";
437 text
: gettext('Refresh'),
438 handler: function() {
439 var applet
= Ext
.getDom(me
.appletID
);
440 applet
.sendRefreshRequest();
444 text
: gettext('Reload'),
445 handler: function () { me
.reloadApplet(); }
448 text
: gettext('Shell'),
449 handler: function() {
450 PVE
.Utils
.openConoleWindow('shell', undefined, me
.nodename
);
457 url
: "/nodes/" + me
.nodename
+ "/vncshell"