Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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);
    }
}