From 9f3f99f27f379da69cb2c24d2d6613cf4e38efdc Mon Sep 17 00:00:00 2001 From: alena Date: Tue, 29 Mar 2011 18:33:26 -0700 Subject: [PATCH] bug 9192: More improvements to listVm performance - cache dataCenter/serviceOffering/Network/Template/Iso information on Api level status 9192: resolved fixed --- api/src/com/cloud/api/ResponseGenerator.java | 2 +- .../com/cloud/api/commands/AttachIsoCmd.java | 2 +- .../com/cloud/api/commands/DeployVMCmd.java | 3 +- .../com/cloud/api/commands/DestroyVMCmd.java | 2 +- .../com/cloud/api/commands/DetachIsoCmd.java | 4 +- .../ListLoadBalancerRuleInstancesCmd.java | 6 +- .../com/cloud/api/commands/ListVMsCmd.java | 10 +- .../com/cloud/api/commands/MigrateVMCmd.java | 3 +- .../com/cloud/api/commands/RebootVMCmd.java | 2 +- .../com/cloud/api/commands/RecoverVMCmd.java | 2 +- .../api/commands/ResetVMPasswordCmd.java | 2 +- .../com/cloud/api/commands/StartVMCmd.java | 2 +- api/src/com/cloud/api/commands/StopVMCmd.java | 2 +- .../com/cloud/api/commands/UpdateVMCmd.java | 2 +- .../com/cloud/api/commands/UpgradeVMCmd.java | 2 +- .../src/com/cloud/api/ApiResponseHelper.java | 330 ++++++++++-------- 16 files changed, 199 insertions(+), 177 deletions(-) diff --git a/api/src/com/cloud/api/ResponseGenerator.java b/api/src/com/cloud/api/ResponseGenerator.java index 02d4dee5b81..67f617c2ea0 100644 --- a/api/src/com/cloud/api/ResponseGenerator.java +++ b/api/src/com/cloud/api/ResponseGenerator.java @@ -116,7 +116,7 @@ public interface ResponseGenerator { SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy); - UserVmResponse createUserVmResponse(UserVm userVm); + List createUserVmResponse(String objectName, UserVm... userVms); SystemVmResponse createSystemVmResponse(VirtualMachine systemVM); diff --git a/api/src/com/cloud/api/commands/AttachIsoCmd.java b/api/src/com/cloud/api/commands/AttachIsoCmd.java index d74d1c098f1..6e0d74a58da 100755 --- a/api/src/com/cloud/api/commands/AttachIsoCmd.java +++ b/api/src/com/cloud/api/commands/AttachIsoCmd.java @@ -95,7 +95,7 @@ public class AttachIsoCmd extends BaseAsyncCmd { if (result) { UserVm userVm = _responseGenerator.findUserVmById(virtualMachineId); if (userVm != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse(userVm); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/DeployVMCmd.java b/api/src/com/cloud/api/commands/DeployVMCmd.java index 402e306b805..b22e5ed922d 100644 --- a/api/src/com/cloud/api/commands/DeployVMCmd.java +++ b/api/src/com/cloud/api/commands/DeployVMCmd.java @@ -28,7 +28,6 @@ import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; -import com.cloud.api.BaseCmd.CommandType; import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJob; import com.cloud.dc.DataCenter; @@ -252,7 +251,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } if (result != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/DestroyVMCmd.java b/api/src/com/cloud/api/commands/DestroyVMCmd.java index 3a44ed19857..864ae0b0353 100644 --- a/api/src/com/cloud/api/commands/DestroyVMCmd.java +++ b/api/src/com/cloud/api/commands/DestroyVMCmd.java @@ -104,7 +104,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { } if (result != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName("virtualmachine"); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/DetachIsoCmd.java b/api/src/com/cloud/api/commands/DetachIsoCmd.java index 2adc6b0be21..7f69f6c1841 100755 --- a/api/src/com/cloud/api/commands/DetachIsoCmd.java +++ b/api/src/com/cloud/api/commands/DetachIsoCmd.java @@ -84,8 +84,8 @@ public class DetachIsoCmd extends BaseAsyncCmd { public void execute(){ boolean result = _templateService.detachIso(this); if (result) { - UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); - UserVmResponse response = _responseGenerator.createUserVmResponse(userVm); + UserVm userVm = _entityMgr.findById(UserVm.class, virtualMachineId); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java index 958b8fb380d..718cd5b306b 100644 --- a/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/api/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java @@ -73,11 +73,7 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { ListResponse response = new ListResponse(); List vmResponses = new ArrayList(); if (result != null) { - for (UserVm instance : result) { - UserVmResponse userVmResponse = _responseGenerator.createUserVmResponse(instance); - userVmResponse.setObjectName("loadbalancerruleinstance"); - vmResponses.add(userVmResponse); - } + vmResponses = _responseGenerator.createUserVmResponse("loadbalancerruleinstance", result.toArray(new UserVm[result.size()])); } response.setResponses(vmResponses); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/ListVMsCmd.java b/api/src/com/cloud/api/commands/ListVMsCmd.java index ca96b338ae0..41788af902d 100755 --- a/api/src/com/cloud/api/commands/ListVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListVMsCmd.java @@ -17,7 +17,6 @@ */ package com.cloud.api.commands; -import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; @@ -163,14 +162,7 @@ public class ListVMsCmd extends BaseListCmd { public void execute(){ List result = _userVmService.searchForUserVMs(this); ListResponse response = new ListResponse(); - List vmResponses = new ArrayList(); - for (UserVm userVm : result) { - UserVmResponse userVmResponse = _responseGenerator.createUserVmResponse(userVm); - if (userVmResponse != null) { - userVmResponse.setObjectName("virtualmachine"); - vmResponses.add(userVmResponse); - } - } + List vmResponses = _responseGenerator.createUserVmResponse("virtualmachine", result.toArray(new UserVm[result.size()])); response.setResponses(vmResponses); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/api/commands/MigrateVMCmd.java b/api/src/com/cloud/api/commands/MigrateVMCmd.java index 398077a10f5..7f8ce362532 100644 --- a/api/src/com/cloud/api/commands/MigrateVMCmd.java +++ b/api/src/com/cloud/api/commands/MigrateVMCmd.java @@ -107,9 +107,8 @@ public class MigrateVMCmd extends BaseAsyncCmd { } try{ UserVm migratedVm = _userVmService.migrateVirtualMachine(userVm, destinationHost); - if (migratedVm != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse(migratedVm); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", migratedVm).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/RebootVMCmd.java b/api/src/com/cloud/api/commands/RebootVMCmd.java index dc1669fd80d..755c840f154 100644 --- a/api/src/com/cloud/api/commands/RebootVMCmd.java +++ b/api/src/com/cloud/api/commands/RebootVMCmd.java @@ -103,7 +103,7 @@ public class RebootVMCmd extends BaseAsyncCmd { } if (result !=null){ - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/RecoverVMCmd.java b/api/src/com/cloud/api/commands/RecoverVMCmd.java index 193f7e6a0f6..4b895721192 100644 --- a/api/src/com/cloud/api/commands/RecoverVMCmd.java +++ b/api/src/com/cloud/api/commands/RecoverVMCmd.java @@ -74,7 +74,7 @@ public class RecoverVMCmd extends BaseCmd { public void execute() throws ResourceAllocationException{ UserVm result = _userVmService.recoverVirtualMachine(this); if (result != null){ - UserVmResponse recoverVmResponse = _responseGenerator.createUserVmResponse(result); + UserVmResponse recoverVmResponse = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); recoverVmResponse.setResponseName(getCommandName()); this.setResponseObject(recoverVmResponse); } else { diff --git a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java index 2080392817e..049b6900714 100644 --- a/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java +++ b/api/src/com/cloud/api/commands/ResetVMPasswordCmd.java @@ -112,7 +112,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { UserContext.current().setEventDetails("Vm Id: "+getId()); UserVm result = _userVmService.resetVMPassword(this, password); if (result != null){ - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/StartVMCmd.java b/api/src/com/cloud/api/commands/StartVMCmd.java index 389de61828f..a4ba5c1f331 100644 --- a/api/src/com/cloud/api/commands/StartVMCmd.java +++ b/api/src/com/cloud/api/commands/StartVMCmd.java @@ -113,7 +113,7 @@ public class StartVMCmd extends BaseAsyncCmd { } if (result != null){ - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/StopVMCmd.java b/api/src/com/cloud/api/commands/StopVMCmd.java index bdef118bd8c..8230ec44414 100644 --- a/api/src/com/cloud/api/commands/StopVMCmd.java +++ b/api/src/com/cloud/api/commands/StopVMCmd.java @@ -117,7 +117,7 @@ public class StopVMCmd extends BaseAsyncCmd { } if (result != null) { - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/UpdateVMCmd.java b/api/src/com/cloud/api/commands/UpdateVMCmd.java index 103871f8da7..f380abc23f8 100644 --- a/api/src/com/cloud/api/commands/UpdateVMCmd.java +++ b/api/src/com/cloud/api/commands/UpdateVMCmd.java @@ -105,7 +105,7 @@ public class UpdateVMCmd extends BaseCmd{ UserContext.current().setEventDetails("Vm Id: "+getId()); UserVm result = _userVmService.updateVirtualMachine(this); if (result != null){ - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/api/src/com/cloud/api/commands/UpgradeVMCmd.java b/api/src/com/cloud/api/commands/UpgradeVMCmd.java index 1073ffdaa06..033e33d8fcb 100644 --- a/api/src/com/cloud/api/commands/UpgradeVMCmd.java +++ b/api/src/com/cloud/api/commands/UpgradeVMCmd.java @@ -86,7 +86,7 @@ public class UpgradeVMCmd extends BaseCmd { UserContext.current().setEventDetails("Vm Id: "+getId()); UserVm result = _userVmService.upgradeVirtualMachine(this); if (result != null){ - UserVmResponse response = _responseGenerator.createUserVmResponse(result); + UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", result).get(0); response.setResponseName(getCommandName()); this.setResponseObject(response); } else { diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 6507d3870b4..3728048cc4d 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -992,157 +992,193 @@ public class ApiResponseHelper implements ResponseGenerator { } @Override - public UserVmResponse createUserVmResponse(UserVm userVm) { - UserVmResponse userVmResponse = new UserVmResponse(); - Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); - if (acct != null) { - userVmResponse.setAccountName(acct.getAccountName()); - userVmResponse.setDomainId(acct.getDomainId()); - userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); - } - - userVmResponse.setId(userVm.getId()); - userVmResponse.setName(userVm.getName()); - userVmResponse.setCreated(userVm.getCreated()); - - if (userVm.getState() != null) { - userVmResponse.setState(userVm.getState().toString()); - } - - userVmResponse.setHaEnable(userVm.isHaEnabled()); - - if (userVm.getDisplayName() != null) { - userVmResponse.setDisplayName(userVm.getDisplayName()); - } else { - userVmResponse.setDisplayName(userVm.getName()); - } - - InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); - if (group != null) { - userVmResponse.setGroup(group.getName()); - userVmResponse.setGroupId(group.getId()); - } - - // Data Center Info - userVmResponse.setZoneId(userVm.getDataCenterId()); - userVmResponse.setZoneName(ApiDBUtils.findZoneById(userVm.getDataCenterId()).getName()); - - Account account = UserContext.current().getCaller(); - // if user is an admin, display host id - if (((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { - userVmResponse.setHostId(userVm.getHostId()); - userVmResponse.setHostName(ApiDBUtils.findHostById(userVm.getHostId()).getName()); - } - - if(userVm.getHypervisorType() != null){ - userVmResponse.setHypervisor(userVm.getHypervisorType().toString()); - } - // Template Info - VMTemplateVO template = ApiDBUtils.findTemplateById(userVm.getTemplateId()); - if (template != null) { - userVmResponse.setTemplateId(userVm.getTemplateId()); - userVmResponse.setTemplateName(template.getName()); - userVmResponse.setTemplateDisplayText(template.getDisplayText()); - userVmResponse.setPasswordEnabled(template.getEnablePassword()); - } else { - userVmResponse.setTemplateId(-1L); - userVmResponse.setTemplateName("ISO Boot"); - userVmResponse.setTemplateDisplayText("ISO Boot"); - userVmResponse.setPasswordEnabled(false); - } - - if (userVm.getPassword() != null) { - userVmResponse.setPassword(userVm.getPassword()); - } - - // ISO Info - if (userVm.getIsoId() != null) { - VMTemplateVO iso = ApiDBUtils.findTemplateById(userVm.getIsoId()); - if (iso != null) { - userVmResponse.setIsoId(userVm.getIsoId()); - userVmResponse.setIsoName(iso.getName()); - } - } - - // Service Offering Info - ServiceOffering offering = ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); - userVmResponse.setServiceOfferingName(offering.getName()); - userVmResponse.setCpuNumber(offering.getCpu()); - userVmResponse.setCpuSpeed(offering.getSpeed()); - userVmResponse.setMemory(offering.getRamSize()); - - VolumeVO rootVolume = ApiDBUtils.findRootVolume(userVm.getId()); - if (rootVolume != null) { - userVmResponse.setRootDeviceId(rootVolume.getDeviceId()); - String rootDeviceType = "Not created"; - if (rootVolume.getPoolId() != null) { - StoragePoolVO storagePool = ApiDBUtils.findStoragePoolById(rootVolume.getPoolId()); - rootDeviceType = storagePool.getPoolType().toString(); - } - userVmResponse.setRootDeviceType(rootDeviceType); - } - - // stats calculation - DecimalFormat decimalFormat = new DecimalFormat("#.##"); - String cpuUsed = null; - VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId()); - if (vmStats != null) { - float cpuUtil = (float) vmStats.getCPUUtilization(); - cpuUsed = decimalFormat.format(cpuUtil) + "%"; - userVmResponse.setCpuUsed(cpuUsed); - - Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs()); - userVmResponse.setNetworkKbsRead(networkKbRead.longValue()); - - Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs()); - userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue()); - } - - userVmResponse.setGuestOsId(userVm.getGuestOSId()); - // security groups - List securityGroups = ApiDBUtils.getSecurityGroupsForVm(userVm.getId()); - List securityGroupResponse = new ArrayList(); - for(SecurityGroupVO grp : securityGroups) { - SecurityGroupResponse resp = new SecurityGroupResponse(); - resp.setId(grp.getId()); - resp.setName(grp.getName()); - resp.setDescription(grp.getDescription()); - resp.setObjectName("securitygroup"); - securityGroupResponse.add(resp); - } + public List createUserVmResponse(String objectName, UserVm...userVms) { + Account caller = UserContext.current().getCaller(); + Map dataCenters = new HashMap(); + Map hosts = new HashMap(); + Map templates = new HashMap(); + Map serviceOfferings = new HashMap(); + Map networks = new HashMap(); - userVmResponse.setSecurityGroupList(securityGroupResponse); - - List nicProfiles = ApiDBUtils.getNics(userVm); - List nicResponses = new ArrayList(); - for (NicProfile singleNicProfile : nicProfiles) { - NicResponse nicResponse = new NicResponse(); - nicResponse.setId(singleNicProfile.getId()); - nicResponse.setIpaddress(singleNicProfile.getIp4Address()); - nicResponse.setGateway(singleNicProfile.getGateway()); - nicResponse.setNetmask(singleNicProfile.getNetmask()); - nicResponse.setNetworkid(singleNicProfile.getNetworkId()); - if (acct.getType() == Account.ACCOUNT_TYPE_ADMIN) { - if (singleNicProfile.getBroadCastUri() != null) { - nicResponse.setBroadcastUri(singleNicProfile.getBroadCastUri().toString()); - } - if (singleNicProfile.getIsolationUri() != null) { - nicResponse.setIsolationUri(singleNicProfile.getIsolationUri().toString()); - } + List vmResponses = new ArrayList(); + + for (UserVm userVm : userVms) { + UserVmResponse userVmResponse = new UserVmResponse(); + Account acct = ApiDBUtils.findAccountById(Long.valueOf(userVm.getAccountId())); + if (acct != null) { + userVmResponse.setAccountName(acct.getAccountName()); + userVmResponse.setDomainId(acct.getDomainId()); + userVmResponse.setDomainName(ApiDBUtils.findDomainById(acct.getDomainId()).getName()); + } + + userVmResponse.setId(userVm.getId()); + userVmResponse.setName(userVm.getName()); + userVmResponse.setCreated(userVm.getCreated()); + + if (userVm.getState() != null) { + userVmResponse.setState(userVm.getState().toString()); + } + + userVmResponse.setHaEnable(userVm.isHaEnabled()); + + if (userVm.getDisplayName() != null) { + userVmResponse.setDisplayName(userVm.getDisplayName()); + } else { + userVmResponse.setDisplayName(userVm.getName()); + } + + InstanceGroupVO group = ApiDBUtils.findInstanceGroupForVM(userVm.getId()); + if (group != null) { + userVmResponse.setGroup(group.getName()); + userVmResponse.setGroupId(group.getId()); + } + + // Data Center Info + if (!dataCenters.containsKey(userVm.getDataCenterId())) { + dataCenters.put(userVm.getDataCenterId(), ApiDBUtils.findZoneById(userVm.getDataCenterId())); } - Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId()); - nicResponse.setTrafficType(network.getTrafficType().toString()); - nicResponse.setType(network.getGuestType().toString()); - nicResponse.setIsDefault(singleNicProfile.isDefaultNic()); + userVmResponse.setZoneId(userVm.getDataCenterId()); + userVmResponse.setZoneName(dataCenters.get(userVm.getDataCenterId()).getName()); + - nicResponse.setObjectName("nic"); + // if user is an admin, display host id + if (((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN)) && (userVm.getHostId() != null)) { + Long hostId = userVm.getHostId(); + if (!hosts.containsKey(hostId)) { + hosts.put(hostId, ApiDBUtils.findHostById(hostId)); + } + + userVmResponse.setHostId(hostId); + userVmResponse.setHostName(hosts.get(hostId).getName()); + } + + if(userVm.getHypervisorType() != null){ + userVmResponse.setHypervisor(userVm.getHypervisorType().toString()); + } - nicResponses.add(nicResponse); - } - userVmResponse.setNics(nicResponses); - userVmResponse.setObjectName("virtualmachine"); - return userVmResponse; + // Template Info + if (!templates.containsKey(userVm.getTemplateId())) { + templates.put(userVm.getTemplateId(),ApiDBUtils.findTemplateById(userVm.getTemplateId())); + } + + VMTemplateVO template = templates.get(userVm.getTemplateId()); + if (template != null) { + userVmResponse.setTemplateId(userVm.getTemplateId()); + userVmResponse.setTemplateName(template.getName()); + userVmResponse.setTemplateDisplayText(template.getDisplayText()); + userVmResponse.setPasswordEnabled(template.getEnablePassword()); + } else { + userVmResponse.setTemplateId(-1L); + userVmResponse.setTemplateName("ISO Boot"); + userVmResponse.setTemplateDisplayText("ISO Boot"); + userVmResponse.setPasswordEnabled(false); + } + + if (userVm.getPassword() != null) { + userVmResponse.setPassword(userVm.getPassword()); + } + + // ISO Info + Long isoId = userVm.getIsoId(); + if (isoId != null) { + if (!templates.containsKey(isoId)) { + templates.put(isoId,ApiDBUtils.findTemplateById(isoId)); + } + userVmResponse.setIsoId(isoId); + userVmResponse.setIsoName(templates.get(isoId).getName()); + } + + // Service Offering Info + Long soId = userVm.getServiceOfferingId(); + if (!serviceOfferings.containsKey(soId)) { + serviceOfferings.put(soId, ApiDBUtils.findServiceOfferingById(userVm.getServiceOfferingId())); + } + + ServiceOffering offering = serviceOfferings.get(soId); + userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingName(offering.getName()); + userVmResponse.setCpuNumber(offering.getCpu()); + userVmResponse.setCpuSpeed(offering.getSpeed()); + userVmResponse.setMemory(offering.getRamSize()); + + VolumeVO rootVolume = ApiDBUtils.findRootVolume(userVm.getId()); + if (rootVolume != null) { + userVmResponse.setRootDeviceId(rootVolume.getDeviceId()); + String rootDeviceType = "Not created"; + if (rootVolume.getPoolId() != null) { + StoragePoolVO storagePool = ApiDBUtils.findStoragePoolById(rootVolume.getPoolId()); + rootDeviceType = storagePool.getPoolType().toString(); + } + userVmResponse.setRootDeviceType(rootDeviceType); + } + + // stats calculation + DecimalFormat decimalFormat = new DecimalFormat("#.##"); + String cpuUsed = null; + VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId()); + if (vmStats != null) { + float cpuUtil = (float) vmStats.getCPUUtilization(); + cpuUsed = decimalFormat.format(cpuUtil) + "%"; + userVmResponse.setCpuUsed(cpuUsed); + + Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs()); + userVmResponse.setNetworkKbsRead(networkKbRead.longValue()); + + Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs()); + userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue()); + } + + userVmResponse.setGuestOsId(userVm.getGuestOSId()); + // security groups + List securityGroups = ApiDBUtils.getSecurityGroupsForVm(userVm.getId()); + List securityGroupResponse = new ArrayList(); + for(SecurityGroupVO grp : securityGroups) { + SecurityGroupResponse resp = new SecurityGroupResponse(); + resp.setId(grp.getId()); + resp.setName(grp.getName()); + resp.setDescription(grp.getDescription()); + resp.setObjectName("securitygroup"); + securityGroupResponse.add(resp); + } + + userVmResponse.setSecurityGroupList(securityGroupResponse); + + List nicProfiles = ApiDBUtils.getNics(userVm); + List nicResponses = new ArrayList(); + for (NicProfile singleNicProfile : nicProfiles) { + NicResponse nicResponse = new NicResponse(); + nicResponse.setId(singleNicProfile.getId()); + nicResponse.setIpaddress(singleNicProfile.getIp4Address()); + nicResponse.setGateway(singleNicProfile.getGateway()); + nicResponse.setNetmask(singleNicProfile.getNetmask()); + nicResponse.setNetworkid(singleNicProfile.getNetworkId()); + if (acct.getType() == Account.ACCOUNT_TYPE_ADMIN) { + if (singleNicProfile.getBroadCastUri() != null) { + nicResponse.setBroadcastUri(singleNicProfile.getBroadCastUri().toString()); + } + if (singleNicProfile.getIsolationUri() != null) { + nicResponse.setIsolationUri(singleNicProfile.getIsolationUri().toString()); + } + } + + Long networkId = singleNicProfile.getNetworkId(); + if (!networks.containsKey(networkId)) { + networks.put(networkId, ApiDBUtils.findNetworkById(networkId)); + } + + Network network = networks.get(networkId); + nicResponse.setTrafficType(network.getTrafficType().toString()); + nicResponse.setType(network.getGuestType().toString()); + nicResponse.setIsDefault(singleNicProfile.isDefaultNic()); + nicResponse.setObjectName("nic"); + nicResponses.add(nicResponse); + } + userVmResponse.setNics(nicResponses); + userVmResponse.setObjectName(objectName); + vmResponses.add(userVmResponse); + } + + return vmResponses; } @Override