From f4a42ab0d7aa559e007e263b54e67d4ce9a0e2ad Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 3 Oct 2016 15:56:32 -0300 Subject: [PATCH] CLOUDSTACK-9535: [API] listVMSnapshots improvement --- .../com/cloud/vm/snapshot/VMSnapshotService.java | 3 ++- .../user/vmsnapshot/ListVMSnapshotCmd.java | 7 ++++--- server/src/com/cloud/api/ApiResponseHelper.java | 16 ++++++++++++++++ .../cloud/vm/snapshot/VMSnapshotManagerImpl.java | 5 +++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java index 839da73b4b8..12767b3db15 100644 --- a/api/src/com/cloud/vm/snapshot/VMSnapshotService.java +++ b/api/src/com/cloud/vm/snapshot/VMSnapshotService.java @@ -27,11 +27,12 @@ import com.cloud.exception.InsufficientServerCapacityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.uservm.UserVm; +import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; public interface VMSnapshotService { - List listVMSnapshots(ListVMSnapshotCmd cmd); + Pair, Integer> listVMSnapshots(ListVMSnapshotCmd cmd); VMSnapshot getVMSnapshotById(Long id); diff --git a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java index ad5126e4680..9b2634de39c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmsnapshot/ListVMSnapshotCmd.java @@ -28,6 +28,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VMSnapshotResponse; +import com.cloud.utils.Pair; import com.cloud.vm.snapshot.VMSnapshot; @APICommand(name = "listVMSnapshot", description = "List virtual machine snapshot by conditions", responseObject = VMSnapshotResponse.class, since = "4.2.0", entityType = {VMSnapshot.class}, @@ -69,15 +70,15 @@ public class ListVMSnapshotCmd extends BaseListTaggedResourcesCmd { @Override public void execute() { - List result = _vmSnapshotService.listVMSnapshots(this); + Pair,Integer> result = _vmSnapshotService.listVMSnapshots(this); ListResponse response = new ListResponse(); List snapshotResponses = new ArrayList(); - for (VMSnapshot r : result) { + for (VMSnapshot r : result.first()) { VMSnapshotResponse vmSnapshotResponse = _responseGenerator.createVMSnapshotResponse(r); vmSnapshotResponse.setObjectName("vmSnapshot"); snapshotResponses.add(vmSnapshotResponse); } - response.setResponses(snapshotResponses); + response.setResponses(snapshotResponses, result.second()); response.setResponseName(getCommandName()); setResponseObject(response); } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 66b8faab88c..6a7f0abde1e 100644 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -194,6 +194,7 @@ import com.cloud.configuration.ResourceLimit; import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.Pod; import com.cloud.dc.StorageNetworkIpRange; @@ -201,6 +202,7 @@ import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; import com.cloud.domain.Domain; +import com.cloud.domain.DomainVO; import com.cloud.event.Event; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; @@ -552,6 +554,10 @@ public class ApiResponseHelper implements ResponseGenerator { UserVm vm = ApiDBUtils.findUserVmById(vmSnapshot.getVmId()); if (vm != null) { vmSnapshotResponse.setVirtualMachineid(vm.getUuid()); + DataCenterVO datacenter = ApiDBUtils.findZoneById(vm.getDataCenterId()); + if (datacenter != null) { + vmSnapshotResponse.setZoneId(datacenter.getUuid()); + } } if (vmSnapshot.getParent() != null) { VMSnapshot vmSnapshotParent = ApiDBUtils.getVMSnapshotById(vmSnapshot.getParent()); @@ -565,6 +571,16 @@ public class ApiResponseHelper implements ResponseGenerator { vmSnapshotResponse.setProjectId(project.getUuid()); vmSnapshotResponse.setProjectName(project.getName()); } + Account account = ApiDBUtils.findAccountById(vmSnapshot.getAccountId()); + if (account != null) { + vmSnapshotResponse.setAccountName(account.getAccountName()); + } + DomainVO domain = ApiDBUtils.findDomainById(vmSnapshot.getDomainId()); + if (domain != null) { + vmSnapshotResponse.setDomainId(domain.getUuid()); + vmSnapshotResponse.setDomainName(domain.getName()); + } + vmSnapshotResponse.setCurrent(vmSnapshot.getCurrent()); vmSnapshotResponse.setType(vmSnapshot.getType().toString()); vmSnapshotResponse.setObjectName("vmsnapshot"); diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java index d8f459627b8..bb1536d2810 100644 --- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java +++ b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java @@ -163,7 +163,7 @@ public class VMSnapshotManagerImpl extends MutualExclusiveIdsManagerBase impleme } @Override - public List listVMSnapshots(ListVMSnapshotCmd cmd) { + public Pair, Integer> listVMSnapshots(ListVMSnapshotCmd cmd) { Account caller = getCaller(); List permittedAccounts = new ArrayList(); @@ -243,7 +243,8 @@ public class VMSnapshotManagerImpl extends MutualExclusiveIdsManagerBase impleme sc.setParameters("id", id); } - return _vmSnapshotDao.search(sc, searchFilter); + Pair,Integer> searchAndCount = _vmSnapshotDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(searchAndCount.first(), searchAndCount.second()); }