ui change: Disk I/O polling statistics

This commit is contained in:
Wei Zhou 2013-07-22 16:06:10 +02:00
parent 39a730ccd1
commit d2c1ed4865
2 changed files with 4 additions and 83 deletions

View File

@ -139,8 +139,6 @@ import com.cloud.agent.api.GetHostStatsAnswer;
import com.cloud.agent.api.GetHostStatsCommand;
import com.cloud.agent.api.GetStorageStatsAnswer;
import com.cloud.agent.api.GetStorageStatsCommand;
import com.cloud.agent.api.GetVmDiskStatsAnswer;
import com.cloud.agent.api.GetVmDiskStatsCommand;
import com.cloud.agent.api.GetVmStatsAnswer;
import com.cloud.agent.api.GetVmStatsCommand;
import com.cloud.agent.api.GetVncPortAnswer;
@ -195,7 +193,6 @@ import com.cloud.agent.api.UnPlugNicAnswer;
import com.cloud.agent.api.UnPlugNicCommand;
import com.cloud.agent.api.UpdateHostPasswordCommand;
import com.cloud.agent.api.UpgradeSnapshotCommand;
import com.cloud.agent.api.VmDiskStatsEntry;
import com.cloud.agent.api.VmStatsEntry;
import com.cloud.agent.api.check.CheckSshAnswer;
import com.cloud.agent.api.check.CheckSshCommand;
@ -498,8 +495,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return execute((GetHostStatsCommand) cmd);
} else if (clazz == GetVmStatsCommand.class) {
return execute((GetVmStatsCommand) cmd);
} else if (cmd instanceof GetVmDiskStatsCommand) {
return execute((GetVmDiskStatsCommand) cmd);
} else if (clazz == CheckHealthCommand.class) {
return execute((CheckHealthCommand) cmd);
} else if (clazz == StopCommand.class) {
@ -2636,80 +2631,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return hostStats;
}
protected GetVmDiskStatsAnswer execute( GetVmDiskStatsCommand cmd) {
Connection conn = getConnection();
List<String> vmNames = cmd.getVmNames();
HashMap<String, List<VmDiskStatsEntry>> vmDiskStatsNameMap = new HashMap<String, List<VmDiskStatsEntry>>();
if( vmNames.size() == 0 ) {
return new GetVmDiskStatsAnswer(cmd, "", cmd.getHostName(),vmDiskStatsNameMap);
}
try {
// Determine the UUIDs of the requested VMs
List<String> vmUUIDs = new ArrayList<String>();
for (String vmName : vmNames) {
VM vm = getVM(conn, vmName);
vmUUIDs.add(vm.getUuid(conn));
}
HashMap<String, List<VmDiskStatsEntry>> vmDiskStatsUUIDMap = getVmDiskStats(conn, cmd, vmUUIDs, cmd.getHostGuid());
if( vmDiskStatsUUIDMap == null ) {
return new GetVmDiskStatsAnswer(cmd, "", cmd.getHostName(), vmDiskStatsNameMap);
}
for (String vmUUID : vmDiskStatsUUIDMap.keySet()) {
List<VmDiskStatsEntry> vmDiskStatsUUID = vmDiskStatsUUIDMap.get(vmUUID);
String vmName = vmNames.get(vmUUIDs.indexOf(vmUUID));
for (VmDiskStatsEntry vmDiskStat : vmDiskStatsUUID) {
vmDiskStat.setVmName(vmName);
}
vmDiskStatsNameMap.put(vmName, vmDiskStatsUUID);
}
return new GetVmDiskStatsAnswer(cmd, "", cmd.getHostName(),vmDiskStatsNameMap);
} catch (XenAPIException e) {
String msg = "Unable to get VM disk stats" + e.toString();
s_logger.warn(msg, e);
return new GetVmDiskStatsAnswer(cmd, "", cmd.getHostName(),vmDiskStatsNameMap);
} catch (XmlRpcException e) {
String msg = "Unable to get VM disk stats" + e.getMessage();
s_logger.warn(msg, e);
return new GetVmDiskStatsAnswer(cmd, "", cmd.getHostName(),vmDiskStatsNameMap);
}
}
private HashMap<String, List<VmDiskStatsEntry>> getVmDiskStats(Connection conn, GetVmDiskStatsCommand cmd, List<String> vmUUIDs, String hostGuid) {
HashMap<String, List<VmDiskStatsEntry>> vmResponseMap = new HashMap<String, List<VmDiskStatsEntry>>();
for (String vmUUID : vmUUIDs) {
vmResponseMap.put(vmUUID, new ArrayList<VmDiskStatsEntry>());
}
try {
for (String vmUUID : vmUUIDs) {
VM vm = VM.getByUuid(conn, vmUUID);
List<VmDiskStatsEntry> vmDiskStats = new ArrayList<VmDiskStatsEntry>();
for (VBD vbd : vm.getVBDs(conn)) {
if (!vbd.getType(conn).equals(Types.VbdType.CD)) {
VmDiskStatsEntry stats = new VmDiskStatsEntry();
VBDMetrics record = vbd.getMetrics(conn);
stats.setPath(vbd.getVDI(conn).getUuid(conn));
stats.setBytesRead((long)(record.getIoReadKbs(conn) * 1024));
stats.setBytesWrite((long)(record.getIoWriteKbs(conn) * 1024));
vmDiskStats.add(stats);
}
}
vmResponseMap.put(vmUUID, vmDiskStats);
}
} catch (Exception e) {
s_logger.warn("Error while collecting disk stats from : ", e);
return null;
}
return vmResponseMap;
}
protected GetVmStatsAnswer execute( GetVmStatsCommand cmd) {
Connection conn = getConnection();
List<String> vmNames = cmd.getVmNames();

View File

@ -1831,10 +1831,10 @@
cpuused: jsonObj.cpuused,
networkkbsread: (jsonObj.networkkbsread == null) ? "N/A" : cloudStack.converters.convertBytes(jsonObj.networkkbsread * 1024),
networkkbswrite: (jsonObj.networkkbswrite == null) ? "N/A" : cloudStack.converters.convertBytes(jsonObj.networkkbswrite * 1024),
diskkbsread: (jsonObj.diskkbsread == null) ? "N/A" : cloudStack.converters.convertBytes(jsonObj.diskkbsread * 1024),
diskkbswrite: (jsonObj.diskkbswrite == null) ? "N/A" : cloudStack.converters.convertBytes(jsonObj.diskkbswrite * 1024),
diskioread: (jsonObj.diskioread == null) ? "N/A" : jsonObj.diskioread,
diskiowrite: (jsonObj.diskiowrite == null) ? "N/A" : jsonObj.diskiowrite
diskkbsread: (jsonObj.diskkbsread == null) ? "N/A" : ((jsonObj.hypervisor == "KVM") ? cloudStack.converters.convertBytes(jsonObj.diskkbsread * 1024) : ((jsonObj.hypervisor == "XenServer") ? cloudStack.converters.convertBytes(jsonObj.diskkbsread * 1024) + "/s" : "N/A")),
diskkbswrite: (jsonObj.diskkbswrite == null) ? "N/A" : ((jsonObj.hypervisor == "KVM") ? cloudStack.converters.convertBytes(jsonObj.diskkbswrite * 1024) : ((jsonObj.hypervisor == "XenServer") ? cloudStack.converters.convertBytes(jsonObj.diskkbswrite * 1024) + "/s" : "N/A")),
diskioread: (jsonObj.diskioread == null) ? "N/A" : ((jsonObj.hypervisor == "KVM") ? jsonObj.diskioread : "N/A"),
diskiowrite: (jsonObj.diskiowrite == null) ? "N/A" : ((jsonObj.hypervisor == "KVM") ? jsonObj.diskiowrite : "N/A")
}
});
}