package org.ovirt.engine.core.common.businessentities;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.ovirt.engine.core.common.utils.ObjectUtils;
import org.ovirt.engine.core.compat.Guid;
public class VdsStatistics implements BusinessEntity<Guid> {
private static final long serialVersionUID = 69893283302260434L;
private Guid id;
private BigDecimal cpuIdle;
private BigDecimal cpuLoad;
private BigDecimal cpuSys;
private BigDecimal cpuUser;
private Integer usageMemPercent;
private Integer usageCpuPercent;
private Integer usageNetworkPercent;
private Long memAvailable;
private Long memFree;
private Long memShared;
private Long swapFree;
private Long swapTotal;
private Integer ksmCpuPercent;
private Long ksmPages;
private Boolean ksmState;
private int anonymousHugePages;
private Long bootTime;
// The following values store the state of the Hosted Engine HA environment
// for each host and allow the user to see/change that state through the
// engine UI. They originate in the HA agent and are updated with the other
// stats in vdsm's getVdsStats call.
private int highlyAvailableScore;
private boolean highlyAvailableIsConfigured;
private boolean highlyAvailableIsActive;
private boolean highlyAvailableGlobalMaintenance;
private boolean highlyAvailableLocalMaintenance;
private Date cpuOverCommitTimeStamp;
private List<CpuStatistics> cpuCoreStatistics;
private List<V2VJobInfo> v2vJobs;
public VdsStatistics() {
cpuIdle = BigDecimal.ZERO;
cpuLoad = BigDecimal.ZERO;
cpuSys = BigDecimal.ZERO;
cpuUser = BigDecimal.ZERO;
memAvailable = 0L;
memFree = 0L;
memShared = 0L;
swapFree = 0L;
swapTotal = 0L;
ksmPages = 0L;
bootTime = null;
highlyAvailableScore = 0;
highlyAvailableIsConfigured = false;
highlyAvailableIsActive = false;
highlyAvailableGlobalMaintenance = false;
highlyAvailableLocalMaintenance = false;
cpuCoreStatistics = new ArrayList<>();
}
@Override
public int hashCode() {
return Objects.hash(
id,
cpuIdle,
cpuLoad,
cpuSys,
cpuUser,
memAvailable,
memFree,
memShared,
usageCpuPercent,
usageNetworkPercent,
ksmState,
ksmPages,
ksmCpuPercent,
swapTotal,
swapFree,
anonymousHugePages,
bootTime,
highlyAvailableScore,
highlyAvailableIsConfigured,
highlyAvailableIsActive,
highlyAvailableGlobalMaintenance,
highlyAvailableLocalMaintenance,
cpuCoreStatistics,
cpuOverCommitTimeStamp
);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof VdsStatistics)) {
return false;
}
VdsStatistics other = (VdsStatistics) obj;
return Objects.equals(id, other.id)
&& ObjectUtils.bigDecimalEqual(cpuIdle, other.cpuIdle)
&& ObjectUtils.bigDecimalEqual(cpuLoad, other.cpuLoad)
&& ObjectUtils.bigDecimalEqual(cpuSys, other.cpuSys)
&& ObjectUtils.bigDecimalEqual(cpuUser, other.cpuUser)
&& Objects.equals(memAvailable, other.memAvailable)
&& Objects.equals(memFree, other.memFree)
&& Objects.equals(memShared, other.memShared)
&& Objects.equals(usageCpuPercent, other.usageCpuPercent)
&& Objects.equals(usageNetworkPercent, other.usageNetworkPercent)
&& Objects.equals(ksmState, other.ksmState)
&& Objects.equals(ksmPages, other.ksmPages)
&& Objects.equals(ksmCpuPercent, other.ksmCpuPercent)
&& Objects.equals(swapTotal, other.swapTotal)
&& Objects.equals(swapFree, other.swapFree)
&& (anonymousHugePages == other.anonymousHugePages)
&& Objects.equals(bootTime, other.bootTime)
&& (highlyAvailableScore == other.highlyAvailableScore)
&& (highlyAvailableIsConfigured == other.highlyAvailableIsConfigured)
&& (highlyAvailableIsActive == other.highlyAvailableIsActive)
&& (highlyAvailableGlobalMaintenance == other.highlyAvailableGlobalMaintenance)
&& (highlyAvailableLocalMaintenance == other.highlyAvailableLocalMaintenance)
&& Objects.equals(cpuCoreStatistics, other.cpuCoreStatistics)
&& Objects.equals(cpuOverCommitTimeStamp, other.cpuOverCommitTimeStamp);
}
public int getAnonymousHugePages() {
return anonymousHugePages;
}
public void setAnonymousHugePages(int value) {
anonymousHugePages = value;
}
public Double getCpuIdle() {
return cpuIdle.doubleValue();
}
public void setCpuIdle(Double cpuIdle) {
this.cpuIdle = BigDecimal.valueOf(cpuIdle);
}
public Double getCpuLoad() {
return cpuLoad.doubleValue();
}
public void setCpuLoad(Double cpuLoad) {
this.cpuLoad = BigDecimal.valueOf(cpuLoad);
}
public Double getCpuSys() {
return cpuSys.doubleValue();
}
public void setCpuSys(Double cpuSys) {
this.cpuSys = BigDecimal.valueOf(cpuSys);
}
public Double getCpuUser() {
return cpuUser.doubleValue();
}
public void setCpuUser(Double cpuUser) {
this.cpuUser = BigDecimal.valueOf(cpuUser);
}
/**
* Returns a rough estimate on how much free mem is available for new vm
* i.e. MemFree + Cached + Buffers + resident - memCommitted
*
* resident set size of qemu processes may grow - up to memCommitted.
* Thus, we deduct the growth potential of qemu processes, which is (memCommitted - resident)
*
* Do not use. This value was computed using very naive algorithm without the
* engine knowledge and does not reflect over-commit or Qemu overhead properly.
*
* Please see the org.ovirt.engine.core.bll.utils.VmOverheadCalculatorImpl for much more
* accurate algorithm and VDS#maxSchedulingMemory for a precomputed value.
*
* @return - free mem available for new vm in MiB
*/
@Deprecated
public Long getMemAvailable() {
return memAvailable;
}
public void setMemAvailable(Long value) {
memAvailable = value;
}
/**
* Returns the actual free memory on host (MB) as it appears in the host's memInfo.
* i.e. MemFree + Cached + Buffers
* @return - actual free memory on host
*/
public Long getMemFree() {
return memFree;
}
public void setMemFree(Long value) {
memFree = value;
}
public Long getMemShared() {
return memShared;
}
public void setMemShared(Long value) {
memShared = value;
}
public Integer getUsageCpuPercent() {
return usageCpuPercent;
}
public void setUsageCpuPercent(Integer value) {
usageCpuPercent = value;
}
public Integer getUsageMemPercent() {
return usageMemPercent;
}
public void setUsageMemPercent(Integer value) {
usageMemPercent = value;
}
public Integer getUsageNetworkPercent() {
return usageNetworkPercent;
}
public void setUsageNetworkPercent(Integer value) {
usageNetworkPercent = value;
}
@Override
public Guid getId() {
return id;
}
@Override
public void setId(Guid id) {
this.id = id;
}
/**
* @return Returns the unused swap space size in MiB
*/
public Long getSwapFree() {
return swapFree;
}
public void setSwapFree(Long value) {
swapFree = value;
}
/**
* @return Returns the total swap space size in MiB
*/
public Long getSwapTotal() {
return swapTotal;
}
public void setSwapTotal(Long value) {
swapTotal = value;
}
public Integer getKsmCpuPercent() {
return ksmCpuPercent;
}
public void setKsmCpuPercent(Integer value) {
ksmCpuPercent = value;
}
public Long getKsmPages() {
return ksmPages;
}
public void setKsmPages(Long value) {
ksmPages = value;
}
public Boolean getKsmState() {
return ksmState;
}
public void setKsmState(Boolean value) {
ksmState = value;
}
public Long getBootTime() {
return bootTime;
}
public void setBootTime(Long value) {
bootTime = value;
}
public int getHighlyAvailableScore() {
return highlyAvailableScore;
}
public void setHighlyAvailableScore(int value) {
highlyAvailableScore = value;
}
public boolean getHighlyAvailableIsConfigured() {
return highlyAvailableIsConfigured;
}
public void setHighlyAvailableIsConfigured(boolean value) {
highlyAvailableIsConfigured = value;
}
public boolean getHighlyAvailableIsActive() {
return highlyAvailableIsActive;
}
public void setHighlyAvailableIsActive(boolean value) {
highlyAvailableIsActive = value;
}
public boolean getHighlyAvailableGlobalMaintenance() {
return highlyAvailableGlobalMaintenance;
}
public void setHighlyAvailableGlobalMaintenance(boolean value) {
highlyAvailableGlobalMaintenance = value;
}
public boolean getHighlyAvailableLocalMaintenance() {
return highlyAvailableLocalMaintenance;
}
public void setHighlyAvailableLocalMaintenance(boolean value) {
highlyAvailableLocalMaintenance = value;
}
public List<CpuStatistics> getCpuCoreStatistics() {
return cpuCoreStatistics;
}
public void setCpuCoreStatistics(List<CpuStatistics> cpuCoreStatistics) {
this.cpuCoreStatistics = cpuCoreStatistics;
}
public Date getCpuOverCommitTimeStamp() {
return cpuOverCommitTimeStamp;
}
public void setCpuOverCommitTimeStamp(Date value) {
cpuOverCommitTimeStamp = value;
}
public List<V2VJobInfo> getV2VJobs() {
return v2vJobs;
}
public void setV2VJobs(List<V2VJobInfo> v2vJobs) {
this.v2vJobs = v2vJobs;
}
}