package org.ovirt.engine.api.restapi.resource; import java.util.List; import org.ovirt.engine.api.model.Statistic; import org.ovirt.engine.api.model.Vm; import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.compat.Guid; public class VmStatisticalQuery extends AbstractStatisticalQuery<Vm, org.ovirt.engine.core.common.businessentities.VM> { private static final Statistic MEM_CONFIG = create("memory.installed", "Total memory configured", GAUGE, BYTES, INTEGER); private static final Statistic MEM_USED = create("memory.used", "Memory used (agent)", GAUGE, BYTES, INTEGER); private static final Statistic MEM_FREE = create("memory.free", "Memory free (agent)", GAUGE, BYTES, INTEGER); private static final Statistic MEM_BUFFERED = create("memory.buffered", "Memory buffered (agent)", GAUGE, BYTES, INTEGER); private static final Statistic MEM_CACHED = create("memory.cached", "Memory cached (agent)", GAUGE, BYTES, INTEGER); private static final Statistic CPU_GUEST = create("cpu.current.guest", "CPU used by guest", GAUGE, PERCENT, DECIMAL); private static final Statistic CPU_OVERHEAD = create("cpu.current.hypervisor", "CPU overhead", GAUGE, PERCENT, DECIMAL); private static final Statistic CPU_TOTAL = create("cpu.current.total", "Total CPU used", GAUGE, PERCENT, DECIMAL); private static final Statistic MIGRATION_PROGRESS = create("migration.progress", "Migration Progress", GAUGE, PERCENT, DECIMAL); protected VmStatisticalQuery(Vm parent) { this(null, parent); } protected VmStatisticalQuery(AbstractBackendResource<Vm, org.ovirt.engine.core.common.businessentities.VM>.EntityIdResolver<Guid> entityResolver, Vm parent) { super(Vm.class, parent, entityResolver); } public List<Statistic> getStatistics(org.ovirt.engine.core.common.businessentities.VM entity) { VmStatistics s = entity.getStatisticsData(); long mem = entity.getMemSizeMb() * Mb; long memUsedByCent = s.getUsageMemPercent()==null ? 0 : mem * s.getUsageMemPercent(); long memFree = entity.getGuestMemoryFree() == null ? 0 : entity.getGuestMemoryFree() * Kb; long memBuffered = entity.getGuestMemoryBuffered() == null ? 0 : entity.getGuestMemoryBuffered() * Kb; long memCached = entity.getGuestMemoryCached() == null ? 0 : entity.getGuestMemoryCached() * Kb; long migrationProgress = entity.getMigrationProgressPercent() != null ? entity.getMigrationProgressPercent() : 0; Double zero = 0.0; Double cpuUser = s.getCpuUser()==null ? zero : s.getCpuUser(); Double cpuSys = s.getCpuSys()==null ? zero : s.getCpuSys(); return asList(setDatum(clone(MEM_CONFIG), mem), setDatum(clone(MEM_USED), memUsedByCent/100), setDatum(clone(CPU_GUEST), cpuUser), setDatum(clone(CPU_OVERHEAD), cpuSys), setDatum(clone(CPU_TOTAL), cpuUser + cpuSys), setDatum(clone(MIGRATION_PROGRESS), migrationProgress), setDatum(clone(MEM_BUFFERED), memBuffered), setDatum(clone(MEM_CACHED), memCached), setDatum(clone(MEM_FREE), memFree)); } public Statistic adopt(Statistic statistic) { statistic.setVm(parent); return statistic; } }