You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2014/09/10 12:25:01 UTC

git commit: updated refs/heads/master to 70142c4

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....@tech.leaseweb.com>
Signed-off-by: Rohit Yadav <ro...@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....@tech.leaseweb.com>
Authored: Tue Sep 9 15:42:07 2014 +0200
Committer: Rohit Yadav <ro...@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);