function pool_update($pool) { if (xvp_db_user_rights(null, $pool) == "none") { $pool->poolname = false; return; } if (($session = xenapi_login($pool, $master_ref)) === false) { return; } $pool->session = $session; if (xvp_db_user_host_rights($pool) == "none") { foreach ($pool->hosts as $host) { $host->hostname = false; } } else { foreach ($pool->hosts as $host) { host_update($pool, $host, $session, $master_ref); } } foreach ($pool->vms as $vm) { vm_update($pool, $vm, $session); } }
function pool_display($pool) { if (xvp_db_user_rights(null, $pool) == "none") { return; } $hidehosts = xvp_db_user_host_rights($pool) == "none"; $displayname = htmlspecialchars($pool->poolname, ENT_QUOTES); if ($pool->domainname) { $displayname .= " in domain " . htmlspecialchars(substr($pool->domainname, 1), ENT_QUOTES); } foreach ($pool->vms as $vm) { if (xvp_db_user_rights($vm, $pool) == "none") { continue; } echo <<<EOF <iframe class="hidden" id="actions-{$vm->fullname}" name="actions-{$vm->fullname}" src="blank.html"></iframe> <iframe class="hidden" id="console-{$vm->fullname}" name="console-{$vm->fullname}" src="blank.html"></iframe> <ul id="vmmenu-{$vm->fullname}" class="contextMenu"> <li class="console"> <a href="#console">Console</a> </li> <li class="boot separator"> <a href="#boot">Boot</a> </li> <li class="booton"> <a href="#booton">Boot on ...</a> </li> <li class="bootrecovery"> <a href="#bootrecovery">Boot Recovery</a> </li> <li class="shutdown separator"> <a href="#shutdown">Shutdown</a> </li> <li class="poweroff"> <a href="#poweroff">Force Shutdown</a> </li> <li class="reboot separator"> <a href="#reboot">Reboot</a> </li> <li class="reset"> <a href="#reset">Force Reboot</a> </li> <li class="suspend separator"> <a href="#suspend">Suspend</a> </li> <li class="resume"> <a href="#resume">Resume</a> </li> <li class="resumeon"> <a href="#resumeon">Resume on ...</a> </li> <li class="migrate separator"> <a href="#migrate">Migrate to ...</a> </li> <li class="snapshot separator"> <a href="#snapshot">Snapshots</a> </li> <li class="properties separator"> <a href="#properties">Properties</a> </li> </ul> EOF; } $poolid = xvp_make_fullname($pool->poolname, null); $jspoolid = addslashes($poolid); echo "\n<div class=\"pool\" id=\"pool-{$poolid}\">\n\n"; if ($hidehosts) { echo <<<EOF <h2 class="center"><img class="toggle" id="toggle-{$poolid}" alt="" title="" src="images/minus.png" onclick="poolToggle('{$jspoolid}');" />Pool {$displayname}</h2> <div class="vmscenter"> EOF; } else { echo <<<EOF <h2><img class="toggle" id="toggle-{$poolid}" alt="" title="" src="images/minus.png" onclick="poolToggle('{$jspoolid}');" />Pool {$displayname}</h2> <div class="hosts"> <h3 class="hosts">Server Hosts</h3> <table class="hosts"> <tr> <td class="group"> <img class="toggle" id="toggle-{$poolid}-hosts" alt="" title="" src="images/minus.png" onclick="hostsToggle('{$jspoolid}');" /> </td> </tr> EOF; foreach ($pool->hosts as $host) { host_display($host); } echo <<<EOF </table> </div> <div class="vmsright"> EOF; } echo <<<EOF <h3>Virtual Machines</h3> <table class="vms"> EOF; $groupname = "--"; foreach ($pool->vms as $vm) { if (!xvp_config_host_by_name($pool, $vm->vmname)) { vm_display($vm, $groupname); } } echo <<<EOF </table> </div> </div> EOF; }
function pool_update($pool) { if (xvp_db_user_rights(null, $pool) == "none") { $pool->poolname = false; return; } if (($session = xenapi_login($pool, $master_ref)) === false) { return; } $pool->session = $session; if (xvp_db_user_host_rights($pool) == "none") { foreach ($pool->hosts as $host) { $host->hostname = false; } } else { // We used to make lots of per-host Xen API calls, but grabbing // the details for all hosts in 2 calls should be much faster $allhosts = xenapi_host_get_all_records($session); $allhostmetrics = xenapi_host_metrics_get_all_records($session); $hostsbyuuid = array(); foreach ($allhosts as $ref => $oid) { $hostobj_r = $oid->scalarval(); $hostmref = $hostobj_r["metrics"]->scalarval(); $hostuuid = $hostobj_r["uuid"]->scalarval(); $hostname = $hostobj_r["hostname"]->scalarval(); $hostaddr = $hostobj_r["address"]->scalarval(); $hostenabled = $hostobj_r["enabled"]->scalarval(); $swversion = $hostobj_r["software_version"]->scalarval(); $hostversion = $swversion["product_version"]->scalarval(); $hostbrand = $swversion["product_brand"]->scalarval(); $hostbuild = $swversion["build_number"]->scalarval(); $hostsbyuuid[$hostuuid]["hostname"] = $hostname; $hostsbyuuid[$hostuuid]["address"] = $hostaddr; $hostsbyuuid[$hostuuid]["enabled"] = $hostenabled; $hostsbyuuid[$hostuuid]["os_version"] = "{$hostbrand} {$hostversion} build {$hostbuild}"; $hostsbyuuid[$hostuuid]["is_master"] = $ref == $master_ref; if ($hostenabled) { $hostm = $allhostmetrics[$hostmref]->scalarval(); $hostmemtotal = $hostm["memory_total"]->scalarval(); $hostmemfree = $hostm["memory_free"]->scalarval(); $hostsbyuuid[$hostuuid]["memory_total"] = $hostmemtotal; $hostsbyuuid[$hostuuid]["memory_free"] = $hostmemfree; } } foreach ($pool->hosts as $host) { host_update($pool, $host, $session, $master_ref, $hostsbyuuid); } } // We used to make lots of per-VM Xen API calls, but grabbing // the details for all VMs in 3 calls should be much faster $allvms = xenapi_vm_get_all_records($session); $allvmmetrics = xenapi_vm_metrics_get_all_records($session); $allguestmetrics = xenapi_vm_guest_metrics_get_all_records($session); $vmsbyuuid = array(); foreach ($allvms as $oid) { $vmobj_r = $oid->scalarval(); if ($vmobj_r["is_a_template"]->scalarval() || $vmobj_r["is_control_domain"]->scalarval()) { continue; } $vmmref = $vmobj_r["metrics"]->scalarval(); $vmm = $allvmmetrics[$vmmref]->scalarval(); $vmgmref = $vmobj_r["guest_metrics"]->scalarval(); if (array_key_exists($vmgmref, $allguestmetrics)) { $vmgm = $allguestmetrics[$vmgmref]->scalarval(); } else { unset($vmgm); } $vmuuid = $vmobj_r["uuid"]->scalarval(); $vmname = $vmobj_r["name_label"]->scalarval(); $vmpower = $vmobj_r["power_state"]->scalarval(); $vmmemory = $vmm["memory_actual"]->scalarval(); $vmstarttime = $vmm["start_time"]->scalarval(); if (isset($vmgm)) { $vmmetricsos = $vmgm["os_version"]->scalarval(); $strarr = explode('|', $vmmetricsos["name"]->scalarval()); $vmosversion = $strarr[0]; // Regis's distro code doesn't work for me, Colin //$vmdistro = $vmmetricsos["distro"]->scalarval(); } else { $vmosversion = ""; } $vmsbyuuid[$vmuuid]["name"] = $vmname; $vmsbyuuid[$vmuuid]["power_state"] = $vmpower; $vmsbyuuid[$vmuuid]["memory_actual"] = $vmmemory; $vmsbyuuid[$vmuuid]["start_time"] = $vmstarttime; $vmsbyuuid[$vmuuid]["os_version"] = $vmosversion; //$vmsbyuuid[$vmuuid]["distro"] = $vmdistro; } foreach ($pool->vms as $vm) { vm_update($pool, $vm, $session, $vmsbyuuid); } }