package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import org.ovirt.engine.api.model.Host;
import org.ovirt.engine.api.model.NumaNode;
import org.ovirt.engine.api.model.Statistic;
import org.ovirt.engine.core.common.businessentities.NumaNodeStatistics;
import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
import org.ovirt.engine.core.compat.Guid;
public class NumaStatisticalQuery extends AbstractStatisticalQuery<NumaNode, VdsNumaNode> {
private static final Statistic MEM_TOTAL = create("memory.total", "Total memory", GAUGE, BYTES, INTEGER);
private static final Statistic MEM_USED = create("memory.used", "Used memory", GAUGE, BYTES, INTEGER);
private static final Statistic MEM_FREE = create("memory.free", "Free memory", GAUGE, BYTES, INTEGER);
private static final Statistic CPU_USER = create("cpu.current.user", "User CPU usage", GAUGE, PERCENT, DECIMAL);
private static final Statistic CPU_SYS = create("cpu.current.system", "System CPU usage", GAUGE, PERCENT, DECIMAL);
private static final Statistic CPU_IDLE = create("cpu.current.idle", "Idle CPU usage", GAUGE, PERCENT, DECIMAL);
protected NumaStatisticalQuery(NumaNode parent) {
this(null, parent);
}
protected NumaStatisticalQuery(AbstractBackendResource<NumaNode, VdsNumaNode>.EntityIdResolver<Guid> resolver, NumaNode parent) {
super(NumaNode.class, parent, resolver);
}
@Override
public List<Statistic> getStatistics(VdsNumaNode entity) {
NumaNodeStatistics s = entity.getNumaNodeStatistics();
long memTotal = entity.getMemTotal();
long memFree = (s==null) ? 0 : s.getMemFree();
return asList(setDatum(clone(MEM_TOTAL), memTotal),
setDatum(clone(MEM_USED), memTotal-memFree),
setDatum(clone(MEM_FREE), memFree),
setDatum(clone(CPU_USER), (s==null) ? 0 : s.getCpuUser()),
setDatum(clone(CPU_SYS), (s==null) ? 0 : s.getCpuSys()),
setDatum(clone(CPU_IDLE), (s==null) ? 0 : s.getCpuIdle()));
}
@Override
public Statistic adopt(Statistic statistic) {
statistic.setHostNumaNode(clone(parent));
return statistic;
}
private NumaNode clone(NumaNode parent) {
NumaNode node = new NumaNode();
node.setId(parent.getId());
node.setHost(new Host());
node.getHost().setId(parent.getHost().getId());
return node;
}
}