# HG changeset patch # User Nikola Nikov # Date 1280662169 -10800 # Node ID 5c39c6cef4b40bc0dac468e0b0704016ff152c25 # Parent 0803fe338c818d9635b5601e6ffdfad1992731a1 Console, Error Windows, tasks, and bug fixes diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/index.html --- a/interface/index.html Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/index.html Sun Aug 01 14:29:29 2010 +0300 @@ -11,20 +11,16 @@ var libxen_path='/libxen'; + - - - - - - - + +
- +
 
diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/js/interface_init.js --- a/interface/js/interface_init.js Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/js/interface_init.js Sun Aug 01 14:29:29 2010 +0300 @@ -58,6 +58,15 @@ function templates_req() { imageObj = new Image(); imageObj.src=img; } + this.LoadCSS = function(css) { + var head = document.getElementsByTagName('head')[0]; + var style = document.createElement('link'); + style.setAttribute('rel','stylesheet'); + style.setAttribute('href',css); + style.setAttribute('type','text/css'); + style.setAttribute('media','all'); + head.appendChild(style); + } // other functions this.findPos = function(fobj) { @@ -464,7 +473,260 @@ function xcp_Menu() { } var xcp_menu = new xcp_Menu(); +// Popup Windows + +function PopupWindow() { + var bw=document.getElementById&&!document.all; + var self = this; + var resizeObj = false; + var resize = false; + var oresize = false; + var drag = false; + var path = '/interface/'; + var offx = 0; + var offy = 0; + var id=0; + var created_windows = new Array(); + this.error_windows=0; + this.mouseX = function(e) { return e ? Number(e.clientX) : Number(event.clientX); } + this.mouseY = function(e) { return e ? Number(e.clientY) : Number(event.clientY); } + + this.create = function(id,titlebar,content) { + if(created_windows[id])return false; + created_windows[id]=1; + var tpl = '
'; + tpl += '
'; + tpl += '
'+titlebar+'
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += ''; + tpl += '
'; + tpl += '
'; + try { + document.getElementById('popupwindows').innerHTML += tpl; + if(typeof(content)=='undefined')return id; + else if(typeof(content)=='object')document.getElementById('wincnt'+id).appendChild(content); + else document.getElementById('wincnt'+id).innerHTML=content; + return id; + } + catch(e) { return false; } + + + + } + + this.create_error = function(titlebar,content) { + self.error_windows++; + id='error_'+self.error_windows; + if(created_windows[id])return false; + created_windows[id]=1; + var tpl = '
'; + tpl += '
'; + tpl += '
'+titlebar+'
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += '
'; + tpl += ''; + tpl += '
'; + tpl += '
'; + try { + document.getElementById('popupwindows').innerHTML += tpl; + if(typeof(content)=='undefined')return id; + else if(typeof(content)=='object')document.getElementById('wincnt'+id).appendChild(content); + else document.getElementById('wincnt'+id).innerHTML=content; + return id; + } + catch(e) { return false; } + + + + } + + this.destroy = function(win) { + if (document.getElementById('window'+win)) { + document.getElementById('window'+win).parentNode.removeChild(document.getElementById('window'+win)); + } + if(created_windows[win])created_windows[win]=undefined; + } + this.mousedown = function(e) { + var fobj = bw ? e.target : event.srcElement; + if (!fobj) { return true; } + if (fobj.getAttribute('dragwin')) { + drag = document.getElementById(fobj.getAttribute('dragwin')); + offx = (templates.findPosX(drag) - self.mouseX(e)); + offy = (templates.findPosY(drag) - self.mouseY(e)); + return false; + } + else { + if (oresize) { + self.startResize(fobj,e); + return false; + } + } + return true; + } + this.mousemove = function(e) { + if (drag) { + drag.style.top = (self.mouseY(e) + offy)+'px'; + drag.style.left = (self.mouseX(e) + offx)+'px'; + return false; + } + else { + var fobj = bw ? e.target : event.srcElement; + if (self.moveCursor(fobj,e)) { return true; } + } + } + this.mouseup = function(e) { + if (drag) { drag = false; return false; } + if (resize) { + var fobj = bw ? e.target : event.srcElement; + self.stopResize(fobj,e); + return false; + } + return true; + } + this.changeCursor = function(win,e) { + if (!drag && !resize) { + offx = Number(templates.findPosX(win) + Number(win.clientWidth)); + offy = Number(templates.findPosY(win) + Number(win.clientHeight)); + resizeObj = win; + } + else { resizeObj = false; } + } + this.moveCursor = function(win,e) { + if (!drag && !resize && offy && offx && resizeObj) { + var mx = self.mouseX(e); + var my = self.mouseY(e); + var eres = false,sres = false; + if ((offy - my) < 15) { sres = true; } + if ((offx - mx) < 15) { eres = true; } + if (sres && eres) { resizeObj.style.cursor = 'se-resize'; oresize = 'se'; } + else { + if (sres) { resizeObj.style.cursor = 's-resize'; oresize = 's'; } + else if (eres) { resizeObj.style.cursor = 'e-resize'; oresize = 'e'; } + else { + if (resizeObj) { resizeObj.style.cursor = ''; } + oresize = false; resizeObj = false; + } + } + } + if (resize) { + if (oresize == 'e' || oresize == 'se') { + var mx = self.mouseX(e); + resize.style.width = (mx - templates.findPosX(resize.parentNode)) + 'px'; + } + if (oresize == 's' || oresize == 'se') { + var my = self.mouseY(e); + resize.style.height = ((my - templates.findPosY(resize.parentNode)) - 26) + 'px'; + } + return true; + } + return false; + } + this.startResize = function(win,e) { + if (oresize && resizeObj) { resize = document.getElementById('resize-'+resizeObj.getAttribute('win')); } + } + this.stopResize = function(win,e) { + if (resize) { oresize = false; resize = false; resizeObj = false; } + } + this.backCursor = function(win) { + if (resize || oresize) { + win.style.cursor = ''; + offy = 0; + offx = 0; + } + } +} +var popup = new PopupWindow(); + //Events -document.onmousedown = xcp_menu.mousedown; + +document.onmousedown = function(e) { +var bw=document.getElementById&&!document.all; +var fobj = bw ? e.target : event.srcElement; + xcp_menu.mousedown(e); + popup.mousedown(e); +if (fobj.tagName == 'INPUT' || fobj.tagName == 'BUTTON' || fobj.tagName == 'A') { return true; } + + return false; + } + +document.onmousemove = popup.mousemove; +document.onmouseup = popup.mouseup; + +//The Error Default handling + +function isINT(param) +{ + var ValidChars="0123456789"; + var isINT=1; + + for (i=0;i';}catch(err){} + } + } + } + } + else error=1; + + + } +else error=1; +} +} + +if(error==1) + { + title='Raw Error'; + description=raw; + } + +popup.create_error(title,description); +return ; +} + + diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/templates/cloud_pool.css --- a/interface/templates/cloud_pool.css Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/templates/cloud_pool.css Sun Aug 01 14:29:29 2010 +0300 @@ -158,13 +158,3 @@ width: 60px; } -#Bar -{ - width: 101px; height: 10px; - text-align: center; - background: url(/interface/img/meter.gif) repeat-x bottom left; - margin-left: 3px; - margin-right: 3px; - margin-top: 3px; - float: left; -} diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/templates/cloud_pool.js --- a/interface/templates/cloud_pool.js Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/templates/cloud_pool.js Sun Aug 01 14:29:29 2010 +0300 @@ -23,7 +23,7 @@ var is_hidden = 0; document.getElementById('vm_show_hide').src='/interface/img/minus_big.png'; document.getElementById('vm_show_hide').style.top='-3px'; document.getElementById('vm_box_content').style.display=''; - is_hidden=0; + is_hidden=0; } else { @@ -33,7 +33,19 @@ var is_hidden = 0; is_hidden=1; } } - + + this.create_non_resident_host_table = function() + { + var pool = document.createElement('table'); + pool.width='100%'; + pool.id='pool_non_resident_vms'; + var y=document.getElementById('pool_server').insertRow(-1).insertCell(0); + y.colSpan=5; + y.appendChild(pool); + + return pool; + } + this.addHost = function(id,params) { var x=document.getElementById('pool_server').insertRow(-1); @@ -76,6 +88,7 @@ var is_hidden = 0; { var x=host_table.insertRow(-1); var tempcell; + var memory_percent=0; x.className="vm_row"; x.id=id; x.onclick = function(e) {cp_submenus.vm(id,e);} @@ -93,10 +106,10 @@ var is_hidden = 0; tempcell=x.insertCell(2); tempcell.className="vm_row_description"; tempcell.innerHTML=params['name_description']; - + if(parseInt(params['max_memory'])>0)memory_percent=((parseInt(params['memory_total'])/parseInt(params['max_memory']))*100); tempcell=x.insertCell(3); tempcell.className="vm_row_memory"; - tempcell.innerHTML='
Memory Usage :
'+params['memory_total']+'M
'; + tempcell.innerHTML='
Memory Usage :
'+params['memory_total']+'M
'; tempcell=x.insertCell(4); tempcell.className="vm_row_cpus cpus_count"; @@ -113,107 +126,72 @@ var is_hidden = 0; return x; } + this.createConsole = function (width,height,url,session,title) + //function (640,500,url,session) + { + var msie=0; + var consolestuff=''; + if (navigator.browserName=="Microsoft Internet Explorer") + { + msie=1; + } + + if(msie) + { + consolestuff += ''; + consolestuff += ''; + } + else + { + consolestuff += ''; + consolestuff += ''; + } + consolestuff += ''; + consolestuff += ''; + consolestuff += ''; + consolestuff += ''; + + popup.create(url,title,consolestuff); + } this.initBox = function() { - - - /* //only for testing purposes - var vm_pool=new Array(); - vm_pool['quote:some_test_server_id_0']=new Array(); - vm_pool['quote:some_test_server_id_0']['name_label']='server_name'; - vm_pool['quote:some_test_server_id_0']['server_description']=' Some description for the server. '; - vm_pool['quote:some_test_server_id_0']['actual_memory']='5120'; - vm_pool['quote:some_test_server_id_0']['max_memory']='10240'; - vm_pool['quote:some_test_server_id_0']['cpu_usage']='40'; - - vm_pool['quote:some_test_server_id_0']['vm_list']=new Array(); - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']=new Array(); - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['name_label']='xcpweb-server'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['vm_description']='DDK virtual machine'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['actual_memory']='512'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['vm_state']='running'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['max_memory']=vm_pool['quote:some_test_server_id_0']['max_memory']; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_count']='1'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_weight']='256'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_cap']='95'; - - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']=new Array(); - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['name_label']='testvm'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['vm_description']='Debian Lenny Server'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['actual_memory']='512'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['vm_state']='paused'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['max_memory']=vm_pool['quote:some_test_server_id_0']['max_memory']; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_count']='2'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_weight']='512'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_cap']='150'; - - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']=new Array(); - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['name_label']='centos'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['vm_description']='CentOS 5.4 Virtual Machine'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['actual_memory']='512'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['max_memory']=vm_pool['quote:some_test_server_id_0']['max_memory']; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['vm_cpus_count']='1'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['vm_cpus_weight']='256'; - vm_pool['quote:some_test_server_id_0']['vm_list']['quote:some_test_server_vm_2']['vm_cpus_cap']='95'; - + self.clearBox(); + //non resident + var non_resident=xen_get_vm_list_non_resident(); + if(non_resident.length>0) + { + var non_resident_table_id=self.create_non_resident_host_table(); + for ( var vm_id in non_resident ) // every vm + { + var current_vm=xen_vm_get_details(non_resident[vm_id]); + current_vm['max_memory']=0; + self.addVM(non_resident[vm_id],current_vm,non_resident_table_id); + } + } - vm_pool['quote:some_test_server_id_1']=new Array(); - vm_pool['quote:some_test_server_id_1']['server_name']='other_server'; - vm_pool['quote:some_test_server_id_1']['server_description']=' Some description for the server. '; - vm_pool['quote:some_test_server_id_1']['actual_memory']='2048'; - vm_pool['quote:some_test_server_id_1']['max_memory']='10240'; - vm_pool['quote:some_test_server_id_1']['cpu_usage']='10'; - - vm_pool['quote:some_test_server_id_1']['vm_list']=new Array(); - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']=new Array(); - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['name_label']='backup-server'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['vm_description']='DDK virtual machine'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['actual_memory']='512'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_count']='1'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_weight']='256'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_0']['vm_cpus_cap']='95'; - - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']=new Array(); - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['name_label']='testvm2'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['vm_description']='Debian Backup Server'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['actual_memory']='512'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_count']='2'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_weight']='512'; - vm_pool['quote:some_test_server_id_1']['vm_list']['quote:some_test_server_vm_1']['vm_cpus_cap']='150'; - // TODO: to get the arrays from the xcp server part - - - for ( var server_id in vm_pool ) - { - - vm_pool[server_id]['table_id']=self.addHost(server_id,vm_pool[server_id]); - - for ( var vm_id in vm_pool[server_id]['vm_list'] ) - { - self.addVM(vm_id,vm_pool[server_id]['vm_list'][vm_id],vm_pool[server_id]['table_id']); - } - - - } - */ - - - var vm_pool=xen_get_vm_list_hosts(); - for ( var server_id in vm_pool ) - { - vm_pool[server_id]['table_id']=self.addHost(server_id,vm_pool[server_id]); + //resident + var vm_pool=xen_get_vm_list_hosts(); + for ( var server_id in vm_pool ) + { + vm_pool[server_id]['table_id']=self.addHost(server_id,vm_pool[server_id]); for ( var vm_id in vm_pool[server_id]['resident_VMs'] ) // every vm - { - var current_vm=xen_get_vm_list_vm(vm_pool[server_id]['resident_VMs'][vm_id]); + { + var current_vm=xen_vm_get_details(vm_pool[server_id]['resident_VMs'][vm_id]); current_vm['max_memory']=vm_pool[server_id]['memory_total']; self.addVM(vm_pool[server_id]['resident_VMs'][vm_id],current_vm,vm_pool[server_id]['table_id']); } + } + + } - + this.clearBox = function() + { + var x=document.getElementById('pool_server'); + for(var i=x.rows.length-1;i>=0;i--)x.deleteRow(i); } } @@ -229,18 +207,21 @@ this.vm = function(param,e) if (xcp_menu.getMenu(param)) { xcp_menu.dropMenu(param); } var allowed_operations=xen_vm_get_allowed_operations(param); var power_state=xen_vm_get_power_state(param); + var console_stuff=xen_vm_get_console(param); var possible_hosts=xen_vm_get_possible_hosts(param); var possible_hosts_label=new Array(); var possible_hosts_num = 0; + var vm_details=xen_vm_get_details(param); for (var i in possible_hosts) { possible_hosts_num++; possible_hosts_label[i]=xen_host_get_name_label(possible_hosts[i]); } + var currentMenu = xcp_menu.createMenu(param); if (typeof(currentMenu) == 'object') { - xcp_menu.appendInMenu(currentMenu,'console','Console',"",'/interface/img/menu_terminal.png'); + if(console_stuff)xcp_menu.appendInMenu(currentMenu,'console','Console',"cp_vm_box.createConsole(640,420,'"+console_stuff['location']+"','"+console_stuff['session_id']+"','Console : "+vm_details['name_label']+"')",'/interface/img/menu_terminal.png'); var subcurrent = xcp_menu.appendSubInMenu(currentMenu,'oprations','Operations','/interface/img/menu_operations.png'); if (typeof(subcurrent) == 'object') { if(power_state=='Running' && possible_hosts_num) @@ -297,7 +278,8 @@ this.host = function(param,e) { //the param is the host ref var allowed_operations=xen_host_get_allowed_operations(param); - + var console_stuff=xen_host_get_console(param); + var host_details=xen_host_get_details(param); if (xcp_menu.getMenu(param)) { xcp_menu.dropMenu(param); } var currentMenu = xcp_menu.createMenu(param); @@ -308,14 +290,15 @@ this.host = function(param,e) allowed_operations.push('shutdown'); allowed_operations.push('reboot'); */ + if(console_stuff)xcp_menu.appendInMenu(currentMenu,'console','Console',"cp_vm_box.createConsole(640,420,'"+console_stuff['location']+"','"+console_stuff['session_id']+"','Console : "+host_details['name_label']+"')",'/interface/img/menu_terminal.png'); for(var op_id in allowed_operations) { if(allowed_operations[op_id]=='evacuate')xcp_menu.appendInMenu(currentMenu,'evacuate','Evacuate',"xen_host_evacuate('"+param+"');",'/interface/img/menu_arrow.png'); if(allowed_operations[op_id]=='shutdown')xcp_menu.appendInMenu(currentMenu,'shutdown','Shutdown',"xen_host_shutdown('"+param+"');",'/interface/img/menu_shutdown.png'); if(allowed_operations[op_id]=='reboot')xcp_menu.appendInMenu(currentMenu,'reboot','Reboot',"xen_host_reboot('"+param+"');",'/interface/img/menu_reboot.png'); } - xcp_menu.appendInMenu(currentMenu,'disable','Disable',"xen_host_disable('"+param+"');",'/interface/img/menu_disable.png'); - xcp_menu.appendInMenu(currentMenu,'enable','Enable',"xen_host_enable'("+param+"');",'/interface/img/menu_enable.png'); + xcp_menu.appendInMenu(currentMenu,'disable','Disable',"xen_host_disable('"+param+"');",'/interface/img/menu_missing.png'); + xcp_menu.appendInMenu(currentMenu,'enable','Enable',"xen_host_enable'("+param+"');",'/interface/img/menu_missing.png'); xcp_menu.appendInMenu(currentMenu,'settings','Settings',"alert('Settings');",'/interface/img/menu_settings.png'); xcp_menu.openRightMenu('menu_'+param,e); } diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/templates/login.html --- a/interface/templates/login.html Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/templates/login.html Sun Aug 01 14:29:29 2010 +0300 @@ -5,8 +5,8 @@
- - + +
Username :
Password :
Username :
Password :
 
diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/templates/main.css --- a/interface/templates/main.css Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/templates/main.css Sun Aug 01 14:29:29 2010 +0300 @@ -63,3 +63,39 @@ float:left; clear:both; } +/*tasks*/ +.task_box +{ +margin: 0 auto; +clear:none; +float:right; +min-width: 150px; +min-height: 24px; +background-color:#fff8d6; +border: 1px solid #fbc27f; +-moz-border-radius: 4px; +-webkit-border-radius: 4px; +border-radius: 4px; +font-family: Arial; +font-size: 13px; +font-weight: bold; +text-align: center; +padding-top: 4px; +} + +.task_box .cell_padding +{ +padding-left: 4px; +padding-right: 4px; +} + +#Bar +{ + width: 101px; height: 10px; + text-align: center; + background: url(/interface/img/meter.gif) repeat-x bottom left; + margin-left: 3px; + margin-right: 3px; + margin-top: 3px; + float: left; +} diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/templates/main.js --- a/interface/templates/main.js Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/templates/main.js Sun Aug 01 14:29:29 2010 +0300 @@ -2,6 +2,88 @@ templates.LoadImage('/interface/img/clou templates.LoadImage('/interface/img/create_new_button_active.png'); templates.LoadImage('/interface/img/settings_button_active.png'); +function TaskManager() +{ +var self = this; +var is_hidden = 0; + +this.addTask = function(id,params) + { + var x=document.getElementById('task_box_table').insertRow(-1); + x.id=id; + + tempcell=x.insertCell(0); + tempcell.className="cell_padding"; + tempcell.innerHTML=params['name_label']; + /* + tempcell=x.insertCell(1); + //tempcell.className=""; + tempcell.innerHTML='
'; + + + tempcell=x.insertCell(2); + tempcell.innerHTML=params['percent']+'%'; + */ + + tempcell=x.insertCell(1); + //tempcell.className="cell_padding"; + tempcell.innerHTML=params['status']; + + tempcell=x.insertCell(2); + tempcell.className="cell_padding"; + tempcell.innerHTML=''; + tempcell.onclick = function(e) {self.closeMenu(id,e);} + + return x; + } + +this.closeMenu = function(param,e) + { + var allowed_operations=xen_task_get_allowed_operations(param); + if (xcp_menu.getMenu(param)) { xcp_menu.dropMenu(param); } + var currentMenu = xcp_menu.createMenu(param); + if (typeof(currentMenu) == 'object') { + + for(var op_id in allowed_operations) + { + if(allowed_operations[op_id]=='cancel')xcp_menu.appendInMenu(currentMenu,'cancel','Cancel',"xen_task_cancel('"+param+"');",'/interface/img/menu_missing.png'); + if(allowed_operations[op_id]=='destroy')xcp_menu.appendInMenu(currentMenu,'destroy','Destroy',"xen_task_destroy'("+param+"');",'/interface/img/menu_missing.png'); + } + xcp_menu.openRightMenu('menu_'+param,e); + } + } + +this.clear = function() + { + var x=document.getElementById('task_box_table'); + if(typeof(x.rows)!='undefined') + { + for(var i=x.rows.length-1;i>=0;i--)x.deleteRow(i); + } + } + +this.reinitTasks = function() + { + var task_num=0; + self.clear(); + var task_pool=xen_task_get_list(); + for ( var task_id in task_pool ) + { + task_num++; + self.addTask(task_id,task_pool[task_id]); + } + + var x=document.getElementById('task_box'); + if(task_num)x.style.display=''; + else x.style.display='none' + + } + +} + +var task_manager=new TaskManager(); +xen_register_db_event('task',task_manager.reinitTasks); + function main_buttons_req() { var img_path ='/interface/img/' @@ -21,6 +103,7 @@ var make_active = function(button_id) this.cloud_pool = function() { make_active('cloud_pool_button'); + templates.LoadCSS(interface_path+'/templates/cloud_pool.css'); templates.LoadJS(interface_path+'/templates/cloud_pool.js'); return ; } @@ -44,4 +127,5 @@ this.settings = function() } var main_buttons = new main_buttons_req(); +templates.LoadCSS(interface_path+'/templates/main.css'); templates.LoadTemplate(interface_path+'/templates/main.html','content',main_buttons.cloud_pool); diff -r 0803fe338c81 -r 5c39c6cef4b4 interface/xcp.css --- a/interface/xcp.css Mon Jul 19 03:31:59 2010 +0300 +++ b/interface/xcp.css Sun Aug 01 14:29:29 2010 +0300 @@ -23,7 +23,7 @@ body { margin: 0 auto; text-align: left; -height:700px; +min-height:650px; width:1000px; background-color:#fff; border: 1px solid #89b1c1; @@ -178,3 +178,155 @@ clear:both; padding-right:3px; padding-left:6px; } + +#popupwindows +{ + position:fixed; + width:0; + height:0; + background:transparent; + top:0; + left:0; +} + +.window +{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #cccccc; + font-family: Arial, Helvetica, sans-serif; + font-size: small; + position: fixed; + z-index:20; + padding-bottom:2px; + min-width:250px; + min-height:250px; + background-color: white; +} +.window .win-titlebar +{ + clear: both; + padding-top: 4px; + background-color: #3fb7c8; + height: 22px; + cursor:move; +} +.window .win-titlebar .close +{ + float: right; + padding-right: 8px; + cursor:pointer; +} +.window .win-titlebar .title +{ + float: left; + padding-left: 8px; + font-weight: bold; + color: #FFFFFF; + cursor:move; +} +.window .win-content +{ + width: 650px; + height: 450px; + min-width:250px; + min-height:250px; + position: relative; + overflow: auto; + background-color:#FFFFFF; +} +.window .win-content .cnt +{ + padding-top: 12px; + padding-right: 8px; + padding-bottom: 12px; + padding-left: 8px; + word-wrap: break-word; + background-color:#ffffff; + z-index:1; +} +.window .win-content .corner +{ + position:absolute; + bottom:1px; + right:3px; + z-index:2; +} + + +.window_error +{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #cccccc; + font-family: Arial, Helvetica, sans-serif; + font-size: small; + position: fixed; + z-index:21; + padding-bottom:2px; + min-width:250px; + min-height:140px; + background-color: #f4dfdf; +} +.window_error .win-titlebar +{ + clear: both; + padding-top: 4px; + background-color: #ff0203; + height: 22px; + cursor:move; +} +.window_error .win-titlebar .close +{ + float: right; + padding-right: 8px; + cursor:pointer; +} +.window_error .win-titlebar .title +{ + float: left; + padding-left: 8px; + font-weight: bold; + color: #FFFFFF; + cursor:move; +} +.window_error .win-content +{ + width: 350px; + height: 200px; + min-width:250px; + min-height:140px; + position: relative; + overflow: auto; + background-color:#f4dfdf; +} +.window_error .win-content .cnt +{ + padding-top: 12px; + padding-right: 8px; + padding-bottom: 12px; + padding-left: 8px; + word-wrap: break-word; + background-color:#f4dfdf; + z-index:1; +} +.window_error .win-content .corner +{ + position:absolute; + bottom:1px; + right:3px; + z-index:2; +} + + +.clear +{ + clear: both; +} + +.window .clear +{ + clear: both; +} diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/callbacks.js --- a/libxen/callbacks.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/callbacks.js Sun Aug 01 14:29:29 2010 +0300 @@ -1,1 +1,1 @@ -function xen_callback_proceed_init(result,xmldoc,param_pass) { var params=new Array(); var event_params=new Array(); params[0]=xen_db['session_id']; event_params[0]=xen_db['session_id']; event_params[1]=new Array('*'); var initCalls=new Array('VM.get_all_records','task.get_all_records','VBD.get_all_records','VBD_metrics.get_all_records','VDI.get_all_records','network.get_all_records','PIF.get_all_records','PIF_metrics.get_all_records','PBD.get_all_records','VIF.get_all_records','VIF_metrics.get_all_records','VM_guest_metrics.get_all_records','VM_metrics.get_all_records','host_metrics.get_all_records','host_cpu.get_all_records','Bond.get_all_records','pool_patch.get_all_records','host_patch.get_all_records','console.get_all_records','host.get_all_records','pool.get_all_records','SR.get_all_records','message.get_all_records'); for (call_id in initCalls)ApiCall(initCalls[call_id],params,false,1,0,0,0); //TODO callback error ApiCall('event.register',event_params,true,0,xen_callback_get_next_event,0,0); //TODO callback error and to make it sync after the xen_db structure is inicialized to call the event.register param_pass(); return ; } function xen_callback_get_next_event(result,xmldoc,param_pass) { //this calls the next event function var params=new Array(); params[0]=xen_db['session_id']; ApiCall('event.next',params,true,1,xen_callback_get_next_event,0,0); //TODO callback error } \ No newline at end of file +var xen_sync_calls_array; function xen_callback_proceed_init(result,xmldoc,param_pass) { var params=new Array(); params[0]=xen_db['session_id']; var params_pass=new Array(); var initCalls=new Array('VM.get_all_records','task.get_all_records','VBD.get_all_records','VBD_metrics.get_all_records','VDI.get_all_records','network.get_all_records','PIF.get_all_records','PIF_metrics.get_all_records','PBD.get_all_records','VIF.get_all_records','VIF_metrics.get_all_records','VM_guest_metrics.get_all_records','VM_metrics.get_all_records','host_metrics.get_all_records','host_cpu.get_all_records','Bond.get_all_records','pool_patch.get_all_records','host_patch.get_all_records','console.get_all_records','host.get_all_records','pool.get_all_records','SR.get_all_records','message.get_all_records'); xen_sync_calls_array=new Array('VM.get_all_records','task.get_all_records','VBD.get_all_records','VBD_metrics.get_all_records','VDI.get_all_records','network.get_all_records','PIF.get_all_records','PIF_metrics.get_all_records','PBD.get_all_records','VIF.get_all_records','VIF_metrics.get_all_records','VM_guest_metrics.get_all_records','VM_metrics.get_all_records','host_metrics.get_all_records','host_cpu.get_all_records','Bond.get_all_records','pool_patch.get_all_records','host_patch.get_all_records','console.get_all_records','host.get_all_records','pool.get_all_records','SR.get_all_records','message.get_all_records'); params_pass[0]=param_pass; for (call_id in initCalls) { params_pass[1]=initCalls[call_id]; ApiCall(initCalls[call_id],params,false,1,xen_callback_sync_calls,xen_callback_sync_calls,params_pass); //TODO callback error } return ; } function xen_callback_get_next_event(result,xmldoc,param_pass) { //this calls the next event function var params=new Array(); params[0]=xen_db['session_id']; ApiCall('event.next',params,true,1,xen_callback_get_next_event,0,0); //TODO callback error } function xen_callback_sync_calls(result,xmldoc,param_pass) { for(var i in xen_sync_calls_array) { if(xen_sync_calls_array[i]==param_pass[1])xen_sync_calls_array.splice(i,1); } if(!xen_sync_calls_array.length) { var event_params=new Array(); event_params[0]=xen_db['session_id']; event_params[1]=new Array('*'); ApiCall('event.register',event_params,true,0,xen_callback_get_next_event,0,0); if(typeof(param_pass[0])=='function')param_pass[0](); } } \ No newline at end of file diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/core.js --- a/libxen/core.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/core.js Sun Aug 01 14:29:29 2010 +0300 @@ -45,11 +45,12 @@ var data=xmlRpc(method, params); return makeRequest(url,method,data,async,doupdate,callback,error_callback,param_pass); } - +/* function parse_xml_to_json(response) { return response=response.substring(137,response.length - 68); // bad way to make it, but it will be that way for some time } +*/ makeRequest=function(url,method,data,async,doupdate,callback,error_callback,param_pass) { rand=parseInt(Math.random()*99999999); @@ -82,6 +83,7 @@ url+='&'+rand; { //request error //alert('error'); if(error_callback)error_callback(httpRequest.responseText,xmldoc,param_pass); + else if(typeof(error_callback_default) == 'function')error_callback_default(httpRequest.responseText,xmldoc,param_pass); return false; } } diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/db_callbacks.js --- a/libxen/db_callbacks.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/db_callbacks.js Sun Aug 01 14:29:29 2010 +0300 @@ -1,1 +1,1 @@ -function invoke_event(array_name){if(typeof(xen_db_events[array_name])!='undefined'){xen_db_events[array_name]();}if(typeof(xen_db_events['*'])!='undefined'){xen_db_events['*']();}} var db_callbacks=new Array(); db_callbacks['session.login_with_password']=function(result) { xen_db['session_id']=result; xen_db['is_logged']=1; xen_db['logged']=1; return ; } db_callbacks['VM.get_all_records']=function(result){xen_db['VM']=result;invoke_event('VM');return;} db_callbacks['task.get_all_records']=function(result){xen_db['task']=result;invoke_event('task');return;} db_callbacks['VBD.get_all_records']=function(result){xen_db['VBD']=result;invoke_event('VBD');return;} db_callbacks['VBD_metrics.get_all_records']=function(result){xen_db['VBD_metrics']=result;invoke_event('VBD_metrics');return;} db_callbacks['VDI.get_all_records']=function(result){xen_db['VDI']=result;invoke_event('VDI');return;} db_callbacks['network.get_all_records']=function(result){xen_db['network']=result;invoke_event('network');return;} db_callbacks['PIF.get_all_records']=function(result){xen_db['PIF']=result;invoke_event('PIF');return;} db_callbacks['PIF_metrics.get_all_records']=function(result){xen_db['PIF_metrics']=result;invoke_event('PIF_metrics');return;} db_callbacks['PBD.get_all_records']=function(result){xen_db['PBD']=result;invoke_event('PBD');return;} db_callbacks['VIF.get_all_records']=function(result){xen_db['VIF']=result;invoke_event('VIF');return;} db_callbacks['VIF_metrics.get_all_records']=function(result){xen_db['VIF_metrics']=result;invoke_event('VIF_metrics');return;} db_callbacks['VM_guest_metrics.get_all_records']=function(result){xen_db['VM_guest_metrics']=result;invoke_event('VM_guest_metrics');return;} db_callbacks['VM_metrics.get_all_records']=function(result){xen_db['VM_metrics']=result;invoke_event('VM_metrics');return;} db_callbacks['host_metrics.get_all_records']=function(result){xen_db['host_metrics']=result;invoke_event('host_metrics');return;} db_callbacks['host_cpu.get_all_records']=function(result){xen_db['host_cpu']=result;invoke_event('host_cpu');return;} db_callbacks['Bond.get_all_records']=function(result){xen_db['Bond']=result;invoke_event('Bond');return;} db_callbacks['pool_patch.get_all_records']=function(result){xen_db['pool_patch']=result;invoke_event('pool_patch');return;} db_callbacks['host_patch.get_all_records']=function(result){xen_db['host_patch']=result;invoke_event('host_patch');return;} db_callbacks['console.get_all_records']=function(result){xen_db['console']=result;invoke_event('console');return;} db_callbacks['host.get_all_records']=function(result){xen_db['host']=result;invoke_event('host');return;} db_callbacks['pool.get_all_records']=function(result){xen_db['pool']=result;invoke_event('pool');return;} db_callbacks['SR.get_all_records']=function(result){xen_db['SR']=result;invoke_event('SR');return;} db_callbacks['message.get_all_records']=function(result){xen_db['message']=result;invoke_event('message');return;} db_callbacks['event.next']=function(result) { for ( var i in result ) { if(result[i].operation=='mod' || result[i].operation=='add') { if(typeof(xen_db[result[i].class])!='undefined') //TODO: some error happens when there are no result[i].class, because it may load before xen_db { xen_db[result[i].class][result[i].ref]=result[i].snapshot; } else { xen_db[result[i].class]=new Object(); xen_db[result[i].class][result[i].ref]=result[i].snapshot; } invoke_event(result[i].class); } if(result[i].operation=='del') { delete xen_db[result[i].class][result[i].ref]; invoke_event(result[i].class); } } return; } \ No newline at end of file +function invoke_event(array_name){if(typeof(xen_db_events[array_name])!='undefined'){xen_db_events[array_name]();}if(typeof(xen_db_events['*'])!='undefined'){xen_db_events['*']();}} var db_callbacks=new Array(); db_callbacks['session.login_with_password']=function(result) { xen_db['session_id']=result; xen_db['is_logged']=1; xen_db['logged']=1; return ; } db_callbacks['VM.get_all_records']=function(result){xen_db['VM']=result;invoke_event('VM');return;} db_callbacks['task.get_all_records']=function(result){xen_db['task']=result;invoke_event('task');return;} db_callbacks['VBD.get_all_records']=function(result){xen_db['VBD']=result;invoke_event('VBD');return;} db_callbacks['VBD_metrics.get_all_records']=function(result){xen_db['VBD_metrics']=result;invoke_event('VBD_metrics');return;} db_callbacks['VDI.get_all_records']=function(result){xen_db['VDI']=result;invoke_event('VDI');return;} db_callbacks['network.get_all_records']=function(result){xen_db['network']=result;invoke_event('network');return;} db_callbacks['PIF.get_all_records']=function(result){xen_db['PIF']=result;invoke_event('PIF');return;} db_callbacks['PIF_metrics.get_all_records']=function(result){xen_db['PIF_metrics']=result;invoke_event('PIF_metrics');return;} db_callbacks['PBD.get_all_records']=function(result){xen_db['PBD']=result;invoke_event('PBD');return;} db_callbacks['VIF.get_all_records']=function(result){xen_db['VIF']=result;invoke_event('VIF');return;} db_callbacks['VIF_metrics.get_all_records']=function(result){xen_db['VIF_metrics']=result;invoke_event('VIF_metrics');return;} db_callbacks['VM_guest_metrics.get_all_records']=function(result){xen_db['VM_guest_metrics']=result;invoke_event('VM_guest_metrics');return;} db_callbacks['VM_metrics.get_all_records']=function(result){xen_db['VM_metrics']=result;invoke_event('VM_metrics');return;} db_callbacks['host_metrics.get_all_records']=function(result){xen_db['host_metrics']=result;invoke_event('host_metrics');return;} db_callbacks['host_cpu.get_all_records']=function(result){xen_db['host_cpu']=result;invoke_event('host_cpu');return;} db_callbacks['Bond.get_all_records']=function(result){xen_db['Bond']=result;invoke_event('Bond');return;} db_callbacks['pool_patch.get_all_records']=function(result){xen_db['pool_patch']=result;invoke_event('pool_patch');return;} db_callbacks['host_patch.get_all_records']=function(result){xen_db['host_patch']=result;invoke_event('host_patch');return;} db_callbacks['console.get_all_records']=function(result){xen_db['console']=result;invoke_event('console');return;} db_callbacks['host.get_all_records']=function(result){xen_db['host']=result;invoke_event('host');return;} db_callbacks['pool.get_all_records']=function(result){xen_db['pool']=result;invoke_event('pool');return;} db_callbacks['SR.get_all_records']=function(result){xen_db['SR']=result;invoke_event('SR');return;} db_callbacks['message.get_all_records']=function(result){xen_db['message']=result;invoke_event('message');return;} db_callbacks['event.next']=function(result) { for ( var i in result ) { if(result[i].operation=='mod' || result[i].operation=='add') { if(typeof(xen_db[result[i].class])!='undefined') { xen_db[result[i].class][result[i].ref]=result[i].snapshot; } else { xen_db[result[i].class]=new Object(); xen_db[result[i].class][result[i].ref]=result[i].snapshot; } invoke_event(result[i].class); } if(result[i].operation=='del') { delete xen_db[result[i].class][result[i].ref]; invoke_event(result[i].class); } } return; } \ No newline at end of file diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/libxen_host.js --- a/libxen/libxen_host.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/libxen_host.js Sun Aug 01 14:29:29 2010 +0300 @@ -7,9 +7,17 @@ var vm_pool=new Array(); for ( var host_id in xen_db['host'] ) { - vm_pool[host_id] = new Array(); - vm_pool[host_id]['name_label']=xen_db['host'][host_id]['name_label']; - vm_pool[host_id]['name_description']=xen_db['host'][host_id]['name_description']; + vm_pool[host_id] = xen_host_get_details(host_id); + } + + return vm_pool; +} + +function xen_host_get_details(host_id) +{ + vm_pool = new Array(); + vm_pool['name_label']=xen_db['host'][host_id]['name_label']; + vm_pool['name_description']=xen_db['host'][host_id]['name_description']; //to get other things from the metrics //get the cpu_usage @@ -22,21 +30,38 @@ var vm_pool=new Array(); } cpu_usage=cpu_usage/cpus; - vm_pool[host_id]['cpu_usage']=cpu_usage; + vm_pool['cpu_usage']=cpu_usage; - vm_pool[host_id]['memory_free']=Math.floor(parseInt(xen_db['host_metrics'][xen_db['host'][host_id]['metrics']]['memory_free']) / (1024*1024)); - vm_pool[host_id]['memory_total']=Math.floor(parseInt(xen_db['host_metrics'][xen_db['host'][host_id]['metrics']]['memory_total']) / (1024*1024)); + vm_pool['memory_free']=Math.floor(parseInt(xen_db['host_metrics'][xen_db['host'][host_id]['metrics']]['memory_free']) / (1024*1024)); + vm_pool['memory_total']=Math.floor(parseInt(xen_db['host_metrics'][xen_db['host'][host_id]['metrics']]['memory_total']) / (1024*1024)); - vm_pool[host_id]['resident_VMs']=new Array(); + vm_pool['resident_VMs']=new Array(); for(var id in xen_db['host'][host_id]['resident_VMs']) { var vm_id=xen_db['host'][host_id]['resident_VMs'][id]; - if(!xen_db['VM'][vm_id]['is_a_template'] && !xen_db['VM'][vm_id]['is_control_domain'])vm_pool[host_id]['resident_VMs'].push(vm_id); + if(!xen_db['VM'][vm_id]['is_a_template'] && !xen_db['VM'][vm_id]['is_control_domain'])vm_pool['resident_VMs'].push(vm_id); } - } + return vm_pool; +} + +function xen_host_get_console(host_id) +{ +var console_stuff = new Array(); +var dom0 = 0; - return vm_pool; + for(var id in xen_db['host'][host_id]['resident_VMs']) + { + var vm_id=xen_db['host'][host_id]['resident_VMs'][id]; + if(xen_db['VM'][vm_id]['is_control_domain'])dom0=vm_id; + } + + if(dom0) + { + return xen_vm_get_console(dom0); + } + +return 0; } function xen_host_get_allowed_operations(ref) diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/libxen_init.js --- a/libxen/libxen_init.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/libxen_init.js Sun Aug 01 14:29:29 2010 +0300 @@ -12,3 +12,4 @@ loadjs(libxen_path+'/core.js'); loadjs(libxen_path+'/libxen.js'); loadjs(libxen_path+'/libxen_host.js'); loadjs(libxen_path+'/libxen_vm.js'); +loadjs(libxen_path+'/libxen_task.js'); diff -r 0803fe338c81 -r 5c39c6cef4b4 libxen/libxen_vm.js --- a/libxen/libxen_vm.js Mon Jul 19 03:31:59 2010 +0300 +++ b/libxen/libxen_vm.js Sun Aug 01 14:29:29 2010 +0300 @@ -1,21 +1,61 @@ // functions to deal with VM part of the xen_db -function xen_get_vm_list_vm(vm_id) +function xen_get_vm_list_hosts() +{ + +var vm_pool=new Array(); + + for ( var host_id in xen_db['host'] ) + { + vm_pool[host_id] = xen_host_get_details(host_id); + } + + return vm_pool; +} + +function xen_get_vm_list_non_resident() +{ +var vm_pool = new Array(); + + for ( var vm_id in xen_db['VM'] ) + { + if(typeof(xen_db['VM'][vm_id]['resident_on'])!='undefined') + { + if((xen_db['VM'][vm_id]['resident_on']=="OpaqueRef:NULL" || xen_db['VM'][vm_id]['resident_on']=='') && !xen_db['VM'][vm_id]['is_a_template'])vm_pool.push(vm_id); + } + } + +return vm_pool; +} + +function xen_vm_get_details(vm_id) { var vm_pool = new Array(); vm_pool['name_label']=xen_db['VM'][vm_id]['name_label']; vm_pool['name_description']=xen_db['VM'][vm_id]['name_description']; - if(vm_pool['name_description']=='' && typeof(xen_db['VM_guest_metrics'][xen_db['VM'][vm_id]['guest_metrics']])!='undefined')vm_pool['name_description']=xen_db['VM_guest_metrics'][xen_db['VM'][vm_id]['guest_metrics']]['os_version']['name']; + try {if(vm_pool['name_description']=='')vm_pool['name_description']=xen_db['VM_guest_metrics'][xen_db['VM'][vm_id]['guest_metrics']]['os_version']['name'];}catch(err){} vm_pool['memory_total']=Math.floor(parseInt(xen_db['VM'][vm_id]['memory_target']) / (1024*1024)); vm_pool['power_state']=xen_db['VM'][vm_id]['power_state']; vm_pool['vm_cpus_count']=xen_db['VM'][vm_id]['VCPUs_max']; - vm_pool['vm_cpus_weight']='';// TODO + vm_pool['vm_cpus_weight']='';// TODO vm_pool['vm_cpus_cap']='';// TODO return vm_pool; } +function xen_vm_get_console(vm_id) +{ +var console_stuff = new Array(); +if(typeof(xen_db['VM'][vm_id]['consoles']) != 'undefined' && typeof(xen_db['VM'][vm_id]['consoles'][0]) != 'undefined' && typeof(xen_db['VM'][vm_id]['consoles'][0]) != 'undefined' && typeof(xen_db['console'][xen_db['VM'][vm_id]['consoles'][0]]['location']) != 'undefined' ) +{ +console_stuff['location']=xen_db['console'][xen_db['VM'][vm_id]['consoles'][0]]['location']; +console_stuff['session_id']=xen_db['session_id']; +return console_stuff; +} +return 0; +} + function xen_vm_get_allowed_operations(ref) { return xen_db['VM'][ref]['allowed_operations']; @@ -121,6 +161,8 @@ var params=new Array(); params[0]=xen_db['session_id']; params[1]=vm_ref; params[2]=host_ref; +params[3]=false; +params[4]=true; ApiCall('VM.start_on',params,true,0,0,0,0); return ; } @@ -131,6 +173,8 @@ var params=new Array(); params[0]=xen_db['session_id']; params[1]=vm_ref; params[2]=host_ref; +params[3]=false; +params[4]=true; ApiCall('VM.resume_on',params,true,0,0,0,0); return ; } @@ -144,3 +188,5 @@ params[2]=host_ref; ApiCall('VM.pool_migrate',params,true,0,0,0,0); return ; } + +