cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bhais...@apache.org
Subject [cloudstack] branch master updated: CLOUDSTACK-9405: add details parameter in listDomains API to reduce the execution time
Date Sun, 23 Jul 2017 21:15:31 GMT
This is an automated email from the ASF dual-hosted git repository.

bhaisaab pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new afbbb81  CLOUDSTACK-9405: add details parameter in listDomains API to reduce the
execution time
afbbb81 is described below

commit afbbb810f09afb66944d1fb5132df0e6059fba8e
Author: Wei Zhou <w.zhou@tech.leaseweb.com>
AuthorDate: Mon Nov 14 11:57:59 2016 +0100

    CLOUDSTACK-9405: add details parameter in listDomains API to reduce the execution time
---
 .../org/apache/cloudstack/api/ApiConstants.java    |  4 ++
 .../api/command/admin/domain/ListDomainsCmd.java   | 31 +++++++++++++++
 server/src/com/cloud/api/ApiDBUtils.java           |  5 ++-
 .../src/com/cloud/api/query/QueryManagerImpl.java  |  2 +-
 .../com/cloud/api/query/ViewResponseHelper.java    |  5 ++-
 .../src/com/cloud/api/query/dao/DomainJoinDao.java |  5 ++-
 .../com/cloud/api/query/dao/DomainJoinDaoImpl.java | 28 +++++++------
 ui/scripts/accounts.js                             |  6 ++-
 ui/scripts/configuration.js                        | 12 +++++-
 ui/scripts/system.js                               | 46 ++++++++++++++++++----
 10 files changed, 116 insertions(+), 28 deletions(-)

diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index febbb0f..10470b5 100644
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -666,4 +666,8 @@ public class ApiConstants {
     public enum VMDetails {
         all, group, nics, stats, secgrp, tmpl, servoff, diskoff, iso, volume, min, affgrp;
     }
+
+    public enum DomainDetails {
+        all, resource, min;
+    }
 }
diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
index e382ed9..9c1ae22 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/domain/ListDomainsCmd.java
@@ -16,10 +16,15 @@
 // under the License.
 package org.apache.cloudstack.api.command.admin.domain;
 
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiConstants.DomainDetails;
 import org.apache.cloudstack.api.BaseListCmd;
 import org.apache.cloudstack.api.Parameter;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
@@ -27,6 +32,7 @@ import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ListResponse;
 
 import com.cloud.domain.Domain;
+import com.cloud.exception.InvalidParameterValueException;
 
 @APICommand(name = "listDomains", description = "Lists domains and provides detailed information
for listed domains", responseObject = DomainResponse.class, responseView = ResponseView.Restricted,
entityType = {Domain.class},
         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
@@ -53,6 +59,12 @@ public class ListDomainsCmd extends BaseListCmd {
                description = "If set to false, list only resources belonging to the command's
caller; if set to true - list resources that the caller is authorized to see. Default value
is false")
     private Boolean listAll;
 
+    @Parameter(name = ApiConstants.DETAILS,
+               type = CommandType.LIST,
+               collectionType = CommandType.STRING,
+               description = "comma separated list of domain details requested, value can
be a list of [ all, resource, min]")
+    private List<String> viewDetails;
+
     /////////////////////////////////////////////////////
     /////////////////// Accessors ///////////////////////
     /////////////////////////////////////////////////////
@@ -73,6 +85,25 @@ public class ListDomainsCmd extends BaseListCmd {
         return listAll == null ? false : listAll;
     }
 
+    public EnumSet<DomainDetails> getDetails() throws InvalidParameterValueException
{
+        EnumSet<DomainDetails> dv;
+        if (viewDetails == null || viewDetails.size() <= 0) {
+            dv = EnumSet.of(DomainDetails.all);
+        } else {
+            try {
+                ArrayList<DomainDetails> dc = new ArrayList<DomainDetails>();
+                for (String detail : viewDetails) {
+                    dc.add(DomainDetails.valueOf(detail));
+                }
+                dv = EnumSet.copyOf(dc);
+            } catch (IllegalArgumentException e) {
+                throw new InvalidParameterValueException("The details parameter contains
a non permitted value. The allowed values are " +
+                    EnumSet.allOf(DomainDetails.class));
+            }
+        }
+        return dv;
+    }
+
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
     /////////////////////////////////////////////////////
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index a0e74aa..e88a102 100644
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -33,6 +33,7 @@ import org.apache.cloudstack.affinity.AffinityGroup;
 import org.apache.cloudstack.affinity.AffinityGroupResponse;
 import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
 import org.apache.cloudstack.api.ApiCommandJobType;
+import org.apache.cloudstack.api.ApiConstants.DomainDetails;
 import org.apache.cloudstack.api.ApiConstants.HostDetails;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
@@ -1852,8 +1853,8 @@ public class ApiDBUtils {
         return s_imageStoreJoinDao.newImageStoreView(vr);
     }
 
-    public static DomainResponse newDomainResponse(ResponseView view, DomainJoinVO ve) {
-        return s_domainJoinDao.newDomainResponse(view, ve);
+    public static DomainResponse newDomainResponse(ResponseView view, EnumSet<DomainDetails>
details, DomainJoinVO ve) {
+        return s_domainJoinDao.newDomainResponse(view, details, ve);
     }
 
     public static AccountResponse newAccountResponse(ResponseView view, AccountJoinVO ve)
{
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index be165ba..f8e0307 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -1878,7 +1878,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase
implements Q
             respView = ResponseView.Full;
         }
 
-        List<DomainResponse> domainResponses = ViewResponseHelper.createDomainResponse(respView,
result.first().toArray(
+        List<DomainResponse> domainResponses = ViewResponseHelper.createDomainResponse(respView,
cmd.getDetails(), result.first().toArray(
                 new DomainJoinVO[result.first().size()]));
         response.setResponses(domainResponses, result.second());
         return response;
diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java
index bc41843..dfed7ba 100644
--- a/server/src/com/cloud/api/query/ViewResponseHelper.java
+++ b/server/src/com/cloud/api/query/ViewResponseHelper.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.apache.log4j.Logger;
 import org.apache.cloudstack.affinity.AffinityGroupResponse;
+import org.apache.cloudstack.api.ApiConstants.DomainDetails;
 import org.apache.cloudstack.api.ApiConstants.HostDetails;
 import org.apache.cloudstack.api.ApiConstants.VMDetails;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
@@ -348,10 +349,10 @@ public class ViewResponseHelper {
         return new ArrayList<StoragePoolResponse>(vrDataList.values());
     }
 
-    public static List<DomainResponse> createDomainResponse(ResponseView view, DomainJoinVO...
domains) {
+    public static List<DomainResponse> createDomainResponse(ResponseView view, EnumSet<DomainDetails>
details, DomainJoinVO... domains) {
         List<DomainResponse> respList = new ArrayList<DomainResponse>();
         for (DomainJoinVO vt : domains){
-            respList.add(ApiDBUtils.newDomainResponse(view, vt));
+            respList.add(ApiDBUtils.newDomainResponse(view, details, vt));
         }
         return respList;
     }
diff --git a/server/src/com/cloud/api/query/dao/DomainJoinDao.java b/server/src/com/cloud/api/query/dao/DomainJoinDao.java
index 164679c..94efc28 100644
--- a/server/src/com/cloud/api/query/dao/DomainJoinDao.java
+++ b/server/src/com/cloud/api/query/dao/DomainJoinDao.java
@@ -16,6 +16,9 @@
 // under the License.
 package com.cloud.api.query.dao;
 
+import java.util.EnumSet;
+
+import org.apache.cloudstack.api.ApiConstants.DomainDetails;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ResourceLimitAndCountResponse;
@@ -26,7 +29,7 @@ import com.cloud.utils.db.GenericDao;
 
 public interface DomainJoinDao extends GenericDao<DomainJoinVO, Long> {
 
-    DomainResponse newDomainResponse(ResponseView view, DomainJoinVO vol);
+    DomainResponse newDomainResponse(ResponseView view, EnumSet<DomainDetails> details,
DomainJoinVO vol);
 
     DomainJoinVO newDomainView(Domain vol);
 
diff --git a/server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java
index 6aecb81..1f123cd 100644
--- a/server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/DomainJoinDaoImpl.java
@@ -16,9 +16,11 @@
 // under the License.
 package com.cloud.api.query.dao;
 
+import java.util.EnumSet;
 import java.util.List;
 
 
+import org.apache.cloudstack.api.ApiConstants.DomainDetails;
 import org.apache.cloudstack.api.ResponseObject.ResponseView;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ResourceLimitAndCountResponse;
@@ -49,7 +51,7 @@ public class DomainJoinDaoImpl extends GenericDaoBase<DomainJoinVO, Long>
implem
     }
 
     @Override
-    public DomainResponse newDomainResponse(ResponseView view, DomainJoinVO domain) {
+    public DomainResponse newDomainResponse(ResponseView view, EnumSet<DomainDetails>
details, DomainJoinVO domain) {
         DomainResponse domainResponse = new DomainResponse();
         domainResponse.setDomainName(domain.getName());
         domainResponse.setId(domain.getUuid());
@@ -72,17 +74,19 @@ public class DomainJoinDaoImpl extends GenericDaoBase<DomainJoinVO,
Long> implem
         domainResponse.setState(domain.getState().toString());
         domainResponse.setNetworkDomain(domain.getNetworkDomain());
 
-        boolean fullView = (view == ResponseView.Full && domain.getId() == Domain.ROOT_DOMAIN);
-        setResourceLimits(domain, fullView, domainResponse);
-
-        //get resource limits for projects
-        long projectLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getProjectLimit(),
fullView, ResourceType.project, domain.getId());
-        String projectLimitDisplay = (fullView || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit);
-        long projectTotal = (domain.getProjectTotal() == null) ? 0 : domain.getProjectTotal();
-        String projectAvail = (fullView || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit
- projectTotal);
-        domainResponse.setProjectLimit(projectLimitDisplay);
-        domainResponse.setProjectTotal(projectTotal);
-        domainResponse.setProjectAvailable(projectAvail);
+        if (details.contains(DomainDetails.all) || details.contains(DomainDetails.resource))
{
+            boolean fullView = (view == ResponseView.Full && domain.getId() == Domain.ROOT_DOMAIN);
+            setResourceLimits(domain, fullView, domainResponse);
+
+            //get resource limits for projects
+            long projectLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getProjectLimit(),
fullView, ResourceType.project, domain.getId());
+            String projectLimitDisplay = (fullView || projectLimit == -1) ? "Unlimited" :
String.valueOf(projectLimit);
+            long projectTotal = (domain.getProjectTotal() == null) ? 0 : domain.getProjectTotal();
+            String projectAvail = (fullView || projectLimit == -1) ? "Unlimited" : String.valueOf(projectLimit
- projectTotal);
+            domainResponse.setProjectLimit(projectLimitDisplay);
+            domainResponse.setProjectTotal(projectTotal);
+            domainResponse.setProjectAvailable(projectAvail);
+        }
 
         domainResponse.setObjectName("domain");
 
diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js
index 439683f..77c528f 100644
--- a/ui/scripts/accounts.js
+++ b/ui/scripts/accounts.js
@@ -1948,7 +1948,11 @@
                                         select: function(args) {
                                             if (isAdmin() || isDomainAdmin()) {
                                                 $.ajax({
-                                                    url: createURL("listDomains&listAll=true"),
+                                                    url: createURL('listDomains'),
+                                                    data: {
+                                                        listAll: true,
+                                                        details: 'min'
+                                                    },
                                                     success: function(json) {
                                                         var items = [];
                                                         items.push({
diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js
index 921735b..8fb7ebe 100644
--- a/ui/scripts/configuration.js
+++ b/ui/scripts/configuration.js
@@ -1287,7 +1287,11 @@
                                         dependsOn: 'isPublic',
                                         select: function(args) {
                                             $.ajax({
-                                                url: createURL("listDomains&listAll=true"),
+                                                url: createURL('listDomains'),
+                                                data: {
+                                                    listAll: true,
+                                                    details: 'min'
+                                                },
                                                 dataType: "json",
                                                 async: false,
                                                 success: function(json) {
@@ -1999,7 +2003,11 @@
                                         dependsOn: 'isPublic',
                                         select: function(args) {
                                             $.ajax({
-                                                url: createURL("listDomains&listAll=true"),
+                                                url: createURL('listDomains'),
+                                                data: {
+                                                    listAll: true,
+                                                    details: 'min'
+                                                },
                                                 dataType: "json",
                                                 async: false,
                                                 success: function(json) {
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 6c1b89d..f16ffe8 100755
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -54,6 +54,7 @@
                             $.ajax({
                                 url: createURL('listDomains'),
                                 data: {
+                                    details: 'min',
                                     listAll: true
                                 },
                                 success: function (json) {
@@ -78,6 +79,7 @@
                         url: createURL('listDomains'),
                         data: {
                             id: data.domainid,
+                            details: 'min',
                             listAll: true
                         },
                         success: function (json) {
@@ -552,6 +554,7 @@
                                                                 $.ajax({
                                                                     url: createURL('listDomains'),
                                                                     data: {
+                                                                        details: 'min',
                                                                         listAll: true
                                                                     },
                                                                     success: function (json)
{
@@ -1852,6 +1855,7 @@
                                                             $.ajax({
                                                                 url: createURL('listDomains'),
                                                                 data: {
+                                                                    details: 'min',
                                                                     listAll: true
                                                                 },
                                                                 success: function (json)
{
@@ -7893,7 +7897,11 @@
                                                     },
                                                     select: function (args) {
                                                         $.ajax({
-                                                            url: createURL("listDomains&listAll=true"),
+                                                            url: createURL('listDomains'),
+                                                            data: {
+                                                                listAll: true,
+                                                                details: 'min'
+                                                            },
                                                             dataType: "json",
                                                             async: false,
                                                             success: function (json) {
@@ -13324,7 +13332,11 @@
                                         dependsOn: 'isDedicated',
                                         select: function (args) {
                                             $.ajax({
-                                                url: createURL("listDomains&listAll=true"),
+                                                url: createURL('listDomains'),
+                                                data: {
+                                                    listAll: true,
+                                                    details: 'min'
+                                                },
                                                 dataType: "json",
                                                 async: false,
                                                 success: function (json) {
@@ -13542,7 +13554,11 @@
                                             },
                                             select: function (args) {
                                                 $.ajax({
-                                                    url: createURL("listDomains&listAll=true"),
+                                                    url: createURL('listDomains'),
+                                                    data: {
+                                                        listAll: true,
+                                                        details: 'min'
+                                                    },
                                                     dataType: "json",
                                                     async: false,
                                                     success: function (json) {
@@ -14143,7 +14159,11 @@
                                         dependsOn: 'isDedicated',
                                         select: function (args) {
                                             $.ajax({
-                                                url: createURL("listDomains&listAll=true"),
+                                                url: createURL('listDomains'),
+                                                data: {
+                                                    listAll: true,
+                                                    details: 'min'
+                                                },
                                                 dataType: "json",
                                                 async: false,
                                                 success: function (json) {
@@ -14714,7 +14734,11 @@
                                             },
                                             select: function (args) {
                                                 $.ajax({
-                                                    url: createURL("listDomains&listAll=true"),
+                                                    url: createURL('listDomains'),
+                                                    data: {
+                                                        listAll: true,
+                                                        details: 'min'
+                                                    },
                                                     dataType: "json",
                                                     async: false,
                                                     success: function (json) {
@@ -15699,7 +15723,11 @@
                                         dependsOn: 'isDedicated',
                                         select: function (args) {
                                             $.ajax({
-                                                url: createURL("listDomains&listAll=true"),
+                                                url: createURL('listDomains'),
+                                                data: {
+                                                    listAll: true,
+                                                    details: 'min'
+                                                },
                                                 dataType: "json",
                                                 success: function (json) {
                                                     var domainObjs = json.listdomainsresponse.domain;
@@ -16045,7 +16073,11 @@
                                             },
                                             select: function (args) {
                                                 $.ajax({
-                                                    url: createURL("listDomains&listAll=true"),
+                                                    url: createURL('listDomains'),
+                                                    data: {
+                                                        listAll: true,
+                                                        details: 'min'
+                                                    },
                                                     dataType: "json",
                                                     async: false,
                                                     success: function (json) {

-- 
To stop receiving notification emails like this one, please contact
['"commits@cloudstack.apache.org" <commits@cloudstack.apache.org>'].

Mime
View raw message