use of com.cloud.agent.api.VolumeStatsEntry in project cloudstack by apache.
the class VmwareResource method execute.
protected GetVolumeStatsAnswer execute(GetVolumeStatsCommand cmd) {
try {
VmwareHypervisorHost srcHyperHost = getHyperHost(getServiceContext());
ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(srcHyperHost, cmd.getPoolUuid());
assert (morDs != null);
DatastoreMO primaryStorageDatastoreMo = new DatastoreMO(getServiceContext(), morDs);
VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext());
ManagedObjectReference dcMor = hyperHost.getHyperHostDatacenter();
DatacenterMO dcMo = new DatacenterMO(getServiceContext(), dcMor);
HashMap<String, VolumeStatsEntry> statEntry = new HashMap<String, VolumeStatsEntry>();
for (String chainInfo : cmd.getVolumeUuids()) {
if (chainInfo != null) {
VirtualMachineDiskInfo infoInChain = _gson.fromJson(chainInfo, VirtualMachineDiskInfo.class);
if (infoInChain != null) {
String[] disks = infoInChain.getDiskChain();
if (disks.length > 0) {
for (String diskPath : disks) {
DatastoreFile file = new DatastoreFile(diskPath);
VirtualMachineMO vmMo = dcMo.findVm(file.getDir());
Pair<VirtualDisk, String> vds = vmMo.getDiskDevice(file.getFileName(), true);
long virtualsize = vds.first().getCapacityInKB() * 1024;
long physicalsize = primaryStorageDatastoreMo.fileDiskSize(file.getPath());
if (statEntry.containsKey(chainInfo)) {
VolumeStatsEntry vse = statEntry.get(chainInfo);
if (vse != null) {
vse.setPhysicalSize(vse.getPhysicalSize() + physicalsize);
}
} else {
VolumeStatsEntry vse = new VolumeStatsEntry(chainInfo, physicalsize, virtualsize);
statEntry.put(chainInfo, vse);
}
}
}
}
}
}
s_logger.debug(String.format("Volume Stats Entry is: [%s].", _gson.toJson(statEntry)));
return new GetVolumeStatsAnswer(cmd, "", statEntry);
} catch (Exception e) {
s_logger.error(String.format("VOLSTAT GetVolumeStatsCommand failed due to [%s].", VmwareHelper.getExceptionMessage(e)), e);
}
return new GetVolumeStatsAnswer(cmd, "", null);
}
use of com.cloud.agent.api.VolumeStatsEntry in project cloudstack by apache.
the class CitrixGetVolumeStatsCommandWrapper method execute.
@Override
public Answer execute(final GetVolumeStatsCommand cmd, final CitrixResourceBase citrixResourceBase) {
Connection conn = citrixResourceBase.getConnection();
HashMap<String, VolumeStatsEntry> statEntry = new HashMap<String, VolumeStatsEntry>();
for (String volumeUuid : cmd.getVolumeUuids()) {
VDI vdi = citrixResourceBase.getVDIbyUuid(conn, volumeUuid, false);
if (vdi != null) {
try {
VolumeStatsEntry vse = new VolumeStatsEntry(volumeUuid, vdi.getPhysicalUtilisation(conn), vdi.getVirtualSize(conn));
statEntry.put(volumeUuid, vse);
} catch (Exception e) {
s_logger.warn("Unable to get volume stats", e);
statEntry.put(volumeUuid, new VolumeStatsEntry(volumeUuid, -1, -1));
}
} else {
s_logger.warn("VDI not found for path " + volumeUuid);
statEntry.put(volumeUuid, new VolumeStatsEntry(volumeUuid, -1L, -1L));
}
}
return new GetVolumeStatsAnswer(cmd, "", statEntry);
}
Aggregations