Repository: cloudstack Updated Branches: refs/heads/master 75cd79a23 -> 70142c4ac
Added "usageid" parameter to the "listUsageRecords" API call. Can be used only together with "type" parameter specified Signed-off-by: Ilia Shakitko <i.shaki...@tech.leaseweb.com> Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/70142c4a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/70142c4a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/70142c4a Branch: refs/heads/master Commit: 70142c4acb84a2d2b1fe8806c159493e4a556532 Parents: 75cd79a Author: Ilia Shakitko <i.shaki...@tech.leaseweb.com> Authored: Tue Sep 9 15:42:07 2014 +0200 Committer: Rohit Yadav <rohit.ya...@shapeblue.com> Committed: Wed Sep 10 12:19:34 2014 +0200 ---------------------------------------------------------------------- .../org/apache/cloudstack/api/ApiConstants.java | 1 + .../command/admin/usage/GetUsageRecordsCmd.java | 7 + .../src/com/cloud/usage/UsageServiceImpl.java | 131 +++++++++++++++++++ 3 files changed, 139 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70142c4a/api/src/org/apache/cloudstack/api/ApiConstants.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index 6baa95c..762ad70 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -268,6 +268,7 @@ public class ApiConstants { public static final String VIRTUAL_MACHINE_ID = "virtualmachineid"; public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids"; public static final String VIRTUAL_MACHINE_ID_IP = "vmidipmap"; + public static final String USAGE_ID = "usageid"; public static final String VLAN = "vlan"; public static final String VLAN_RANGE = "vlanrange"; http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70142c4a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java ---------------------------------------------------------------------- diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java index 21a7e4a..8c1ce87 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/GetUsageRecordsCmd.java @@ -73,6 +73,9 @@ public class GetUsageRecordsCmd extends BaseListCmd { @Parameter(name = ApiConstants.TYPE, type = CommandType.LONG, description = "List usage records for the specified usage type") private Long usageType; + @Parameter(name = ApiConstants.USAGE_ID, type = CommandType.STRING, description = "List usage records for the specified usage UUID. Can be used only together with TYPE parameter.") + private String usageId; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -105,6 +108,10 @@ public class GetUsageRecordsCmd extends BaseListCmd { return projectId; } + public String getUsageId() { + return usageId; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/cloudstack/blob/70142c4a/server/src/com/cloud/usage/UsageServiceImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/usage/UsageServiceImpl.java b/server/src/com/cloud/usage/UsageServiceImpl.java index d1f62aa..db0d047 100755 --- a/server/src/com/cloud/usage/UsageServiceImpl.java +++ b/server/src/com/cloud/usage/UsageServiceImpl.java @@ -27,6 +27,26 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.network.VpnUserVO; +import com.cloud.network.dao.LoadBalancerVO; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.VpnUserDao; +import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.dao.PortForwardingRulesDao; +import com.cloud.network.security.SecurityGroupVO; +import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.storage.SnapshotVO; +import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VolumeVO; +import com.cloud.storage.dao.SnapshotDao; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VolumeDao; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.VMInstanceDao; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -81,6 +101,26 @@ public class UsageServiceImpl extends ManagerBase implements UsageService, Manag private TimeZone _usageTimezone; @Inject private AccountService _accountService; + @Inject + private VMInstanceDao _vmDao; + @Inject + private SnapshotDao _snapshotDao; + @Inject + private SecurityGroupDao _sgDao; + @Inject + private VpnUserDao _vpnUserDao; + @Inject + private PortForwardingRulesDao _pfDao; + @Inject + private LoadBalancerDao _lbDao; + @Inject + private VMTemplateDao _vmTemplateDao; + @Inject + private VolumeDao _volumeDao; + @Inject + private IPAddressDao _ipDao; + @Inject + private HostDao _hostDao; public UsageServiceImpl() { } @@ -131,6 +171,7 @@ public class UsageServiceImpl extends ManagerBase implements UsageService, Manag Account caller = CallContext.current().getCallingAccount(); Long usageType = cmd.getUsageType(); Long projectId = cmd.getProjectId(); + String usageId = cmd.getUsageId(); if (projectId != null) { if (accountId != null) { @@ -217,6 +258,96 @@ public class UsageServiceImpl extends ManagerBase implements UsageService, Manag sc.addAnd("usageType", SearchCriteria.Op.EQ, usageType); } + if (usageId != null) { + if (usageType == null) { + throw new InvalidParameterValueException("Usageid must be specified together with usageType"); + } + + Long usageDbId = null; + + switch (usageType.intValue()) { + case UsageTypes.NETWORK_BYTES_RECEIVED: + case UsageTypes.NETWORK_BYTES_SENT: + case UsageTypes.RUNNING_VM: + case UsageTypes.ALLOCATED_VM: + case UsageTypes.VM_SNAPSHOT: + VMInstanceVO vm = _vmDao.findByUuidIncludingRemoved(usageId); + if (vm != null) { + usageDbId = vm.getId(); + } + + if (vm == null && (usageType == UsageTypes.NETWORK_BYTES_RECEIVED || usageType == UsageTypes.NETWORK_BYTES_SENT)) { + HostVO host = _hostDao.findByUuidIncludingRemoved(usageId); + if (host != null) { + usageDbId = host.getId(); + } + } + break; + case UsageTypes.SNAPSHOT: + SnapshotVO snap = _snapshotDao.findByUuidIncludingRemoved(usageId); + if (snap != null) { + usageDbId = snap.getId(); + } + break; + case UsageTypes.TEMPLATE: + case UsageTypes.ISO: + VMTemplateVO tmpl = _vmTemplateDao.findByUuidIncludingRemoved(usageId); + if (tmpl != null) { + usageDbId = tmpl.getId(); + } + break; + case UsageTypes.LOAD_BALANCER_POLICY: + LoadBalancerVO lb = _lbDao.findByUuidIncludingRemoved(usageId); + if (lb != null) { + usageDbId = lb.getId(); + } + break; + case UsageTypes.PORT_FORWARDING_RULE: + PortForwardingRuleVO pf = _pfDao.findByUuidIncludingRemoved(usageId); + if (pf != null) { + usageDbId = pf.getId(); + } + break; + case UsageTypes.VOLUME: + case UsageTypes.VM_DISK_IO_READ: + case UsageTypes.VM_DISK_IO_WRITE: + case UsageTypes.VM_DISK_BYTES_READ: + case UsageTypes.VM_DISK_BYTES_WRITE: + VolumeVO volume = _volumeDao.findByUuidIncludingRemoved(usageId); + if (volume != null) { + usageDbId = volume.getId(); + } + break; + case UsageTypes.VPN_USERS: + VpnUserVO vpnUser = _vpnUserDao.findByUuidIncludingRemoved(usageId); + if (vpnUser != null) { + usageDbId = vpnUser.getId(); + } + break; + case UsageTypes.SECURITY_GROUP: + SecurityGroupVO sg = _sgDao.findByUuidIncludingRemoved(usageId); + if (sg != null) { + usageDbId = sg.getId(); + } + break; + case UsageTypes.IP_ADDRESS: + IPAddressVO ip = _ipDao.findByUuidIncludingRemoved(usageId); + if (ip != null) { + usageDbId = ip.getId(); + } + break; + default: + break; + } + + if (usageDbId != null) { + sc.addAnd("usageId", SearchCriteria.Op.EQ, usageDbId); + } else { + // return an empty list if usageId was not found + return new Pair<List<? extends Usage>, Integer>(new ArrayList<Usage>(), new Integer(0)); + } + } + if ((adjustedStartDate != null) && (adjustedEndDate != null) && adjustedStartDate.before(adjustedEndDate)) { sc.addAnd("startDate", SearchCriteria.Op.BETWEEN, adjustedStartDate, adjustedEndDate); sc.addAnd("endDate", SearchCriteria.Op.BETWEEN, adjustedStartDate, adjustedEndDate);