package org.ovirt.engine.api.restapi.resource; import java.util.List; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Statistic; import org.ovirt.engine.api.model.StatisticUnit; import org.ovirt.engine.api.model.Vm; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.compat.Guid; public class DiskStatisticalQuery extends AbstractStatisticalQuery<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk> { static final Statistic DATA_READ = create("data.current.read", "Read data rate", GAUGE, BYTES_PER_SECOND, DECIMAL); static final Statistic DATA_WRITE = create("data.current.write", "Write data rate", GAUGE, BYTES_PER_SECOND, DECIMAL); static final Statistic READ_LATENCY = create("disk.read.latency", "Read latency", GAUGE, StatisticUnit.SECONDS, DECIMAL); static final Statistic WRITE_LATENCY = create("disk.write.latency", "Write latency", GAUGE, StatisticUnit.SECONDS, DECIMAL); static final Statistic FLUSH_LATENCY = create("disk.flush.latency", "Flush latency", GAUGE, StatisticUnit.SECONDS, DECIMAL); protected DiskStatisticalQuery(Disk parent) { this(null, parent); } protected DiskStatisticalQuery(AbstractBackendResource<Disk, org.ovirt.engine.core.common.businessentities.storage.Disk>.EntityIdResolver<Guid> resolver, Disk parent) { super(Disk.class, parent, resolver); } public List<Statistic> getStatistics(org.ovirt.engine.core.common.businessentities.storage.Disk i) { if (i.getDiskStorageType() == DiskStorageType.IMAGE) { DiskImage disk = (DiskImage) i; return asList(setDatum(clone(DATA_READ), disk.getReadRate()), setDatum(clone(DATA_WRITE), disk.getWriteRate()), setDatum(clone(READ_LATENCY), disk.getReadLatency()==null ? 0.0 : disk.getReadLatency()), setDatum(clone(WRITE_LATENCY), disk.getWriteLatency()==null ? 0.0 : disk.getWriteLatency()), setDatum(clone(FLUSH_LATENCY), disk.getFlushLatency()==null ? 0.0 : disk.getFlushLatency())); } return asList(setDatum(clone(DATA_READ), 0), setDatum(clone(DATA_WRITE), 0)); } public Statistic adopt(Statistic statistic) { // clone required because LinkHelper unsets the grandparent statistic.setDisk(clone(parent)); return statistic; } private Disk clone(Disk parent) { Disk disk = new Disk(); disk.setId(parent.getId()); if (parent.isSetVm()) { disk.setVm(new Vm()); disk.getVm().setId(parent.getVm().getId()); } return disk; } }