package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
public class EvenlyDistributeComparer extends VdsComparer {
private double calcDistributeMetric(VDS vds, VM vm) {
int vcpu = Config.<Integer> GetValue(ConfigValues.VcpuConsumptionPercentage);
int spmCpu = (vds.getspm_status() == VdsSpmStatus.None) ? 0 : Config
.<Integer> GetValue(ConfigValues.SpmVCpuConsumption);
int hostCores = vds.getcpu_cores();
double hostCpu = vds.getusage_cpu_percent();
double pendingVcpus = vds.getpending_vcpus_count();
return (hostCpu / vcpu) + (pendingVcpus + vm.getnum_of_cpus() + spmCpu) / hostCores;
}
@Override
public boolean IsBetter(VDS x, VDS y, VM vm) {
if (x.getcpu_cores() == null || y.getcpu_cores() == null || x.getusage_cpu_percent() == null
|| y.getusage_cpu_percent() == null || x.getpending_vcpus_count() == null
|| y.getpending_vcpus_count() == null) {
return false;
}
return calcDistributeMetric(x, vm) > calcDistributeMetric(y, vm);
}
@Override
public void BestVdsProcedure(VDS x) {
}
}