This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.13
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.13 by this push:
new 4d8a2da api: Fix count and item issues returned by list APIs (#3894)
4d8a2da is described below
commit 4d8a2da133b74f2de9ecc599eebafdfc68e6fa60
Author: Pearl Dsilva <[email protected]>
AuthorDate: Wed Feb 26 20:44:23 2020 +0530
api: Fix count and item issues returned by list APIs (#3894)
---
api/src/main/java/com/cloud/projects/Project.java | 2 +-
.../api/command/admin/cluster/ListClustersCmd.java | 8 +++----
.../src/main/java/com/cloud/host/dao/HostDao.java | 2 ++
.../main/java/com/cloud/host/dao/HostDaoImpl.java | 13 +++++++++++
.../java/com/cloud/vm/dao/DomainRouterDao.java | 7 ++++++
.../java/com/cloud/vm/dao/DomainRouterDaoImpl.java | 8 +++++++
.../storage/datastore/db/ImageStoreDao.java | 2 ++
.../storage/datastore/db/ImageStoreDaoImpl.java | 8 +++++++
.../main/java/com/cloud/utils/db/GenericDao.java | 2 ++
.../java/com/cloud/utils/db/GenericDaoBase.java | 9 ++++++++
.../cloudstack/api/ListClustersMetricsCmd.java | 8 +++++--
.../apache/cloudstack/api/ListHostsMetricsCmd.java | 6 ++++--
.../cloudstack/api/ListStoragePoolsMetricsCmd.java | 6 ++++--
.../apache/cloudstack/api/ListVMsMetricsCmd.java | 6 ++++--
.../cloudstack/api/ListVolumesMetricsCmd.java | 6 ++++--
.../apache/cloudstack/api/ListZonesMetricsCmd.java | 6 ++++--
.../apache/cloudstack/metrics/MetricsService.java | 3 ++-
.../cloudstack/metrics/MetricsServiceImpl.java | 25 ++++++++++++++--------
.../response/InfrastructureResponse.java | 12 +++++++++++
.../java/com/cloud/api/query/QueryManagerImpl.java | 12 +++++------
.../com/cloud/server/ManagementServerImpl.java | 2 +-
.../java/com/cloud/user/AccountManagerImpl.java | 14 ++++++------
.../java/com/cloud/user/MockUsageEventDao.java | 5 +++++
ui/scripts/system.js | 12 +++++------
24 files changed, 138 insertions(+), 46 deletions(-)
diff --git a/api/src/main/java/com/cloud/projects/Project.java
b/api/src/main/java/com/cloud/projects/Project.java
index 5fff308..7cc370c 100644
--- a/api/src/main/java/com/cloud/projects/Project.java
+++ b/api/src/main/java/com/cloud/projects/Project.java
@@ -29,7 +29,7 @@ public interface Project extends PartOf, Identity,
InternalIdentity {
}
public enum ListProjectResourcesCriteria {
- ListProjectResourcesOnly, SkipProjectResources
+ ListProjectResourcesOnly, SkipProjectResources,
ListAllIncludingProjectResources
}
String getDisplayText();
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
index 74ad764..dadc208 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
@@ -125,7 +125,7 @@ public class ListClustersCmd extends BaseListCmd {
return s_name;
}
- protected List<ClusterResponse> getClusterResponses() {
+ protected Pair<List<ClusterResponse>, Integer> getClusterResponses() {
Pair<List<? extends Cluster>, Integer> result =
_mgr.searchForClusters(this);
List<ClusterResponse> clusterResponses = new
ArrayList<ClusterResponse>();
for (Cluster cluster : result.first()) {
@@ -133,14 +133,14 @@ public class ListClustersCmd extends BaseListCmd {
clusterResponse.setObjectName("cluster");
clusterResponses.add(clusterResponse);
}
- return clusterResponses;
+ return new Pair<List<ClusterResponse>, Integer>(clusterResponses,
result.second());
}
@Override
public void execute() {
- List<ClusterResponse> clusterResponses = getClusterResponses();
+ Pair<List<ClusterResponse>, Integer> clusterResponses =
getClusterResponses();
ListResponse<ClusterResponse> response = new
ListResponse<ClusterResponse>();
- response.setResponses(clusterResponses, clusterResponses.size());
+ response.setResponses(clusterResponses.first(),
clusterResponses.second());
response.setResponseName(getCommandName());
this.setResponseObject(response);
}
diff --git a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
index dd45c09..781f82f 100644
--- a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
+++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
@@ -37,6 +37,8 @@ import com.cloud.utils.fsm.StateDao;
public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status,
Status.Event, Host> {
long countBy(long clusterId, ResourceState... states);
+ Integer countAllByType(final Host.Type type);
+
/**
* Mark all hosts associated with a certain management server
* as disconnected.
diff --git a/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
b/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
index 71f0aef..2b2a80b 100644
--- a/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
@@ -105,6 +105,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO,
Long> implements HostDao
protected SearchBuilder<HostVO> UnmanagedDirectConnectSearch;
protected SearchBuilder<HostVO> UnmanagedApplianceSearch;
protected SearchBuilder<HostVO> MaintenanceCountSearch;
+ protected SearchBuilder<HostVO> HostTypeCountSearch;
protected SearchBuilder<HostVO> ClusterStatusSearch;
protected SearchBuilder<HostVO> TypeNameZoneSearch;
protected SearchBuilder<HostVO> AvailHypevisorInZone;
@@ -159,6 +160,11 @@ public class HostDaoImpl extends GenericDaoBase<HostVO,
Long> implements HostDao
MaintenanceCountSearch.and("resourceState",
MaintenanceCountSearch.entity().getResourceState(), SearchCriteria.Op.IN);
MaintenanceCountSearch.done();
+ HostTypeCountSearch = createSearchBuilder();
+ HostTypeCountSearch.and("type",
HostTypeCountSearch.entity().getType(), SearchCriteria.Op.EQ);
+ HostTypeCountSearch.and("removed",
HostTypeCountSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
+ HostTypeCountSearch.done();
+
TypePodDcStatusSearch = createSearchBuilder();
HostVO entity = TypePodDcStatusSearch.entity();
TypePodDcStatusSearch.and("type", entity.getType(),
SearchCriteria.Op.EQ);
@@ -430,6 +436,13 @@ public class HostDaoImpl extends GenericDaoBase<HostVO,
Long> implements HostDao
}
@Override
+ public Integer countAllByType(final Host.Type type) {
+ SearchCriteria<HostVO> sc = HostTypeCountSearch.create();
+ sc.setParameters("type", type);
+ return getCount(sc);
+ }
+
+ @Override
public List<HostVO> listByDataCenterId(long id) {
SearchCriteria<HostVO> sc = DcSearch.create();
sc.setParameters("dc", id);
diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
index ef8829e..c4fd2f6 100644
--- a/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDao.java
@@ -96,6 +96,13 @@ public interface DomainRouterDao extends
GenericDao<DomainRouterVO, Long> {
*/
public List<DomainRouterVO> listRunningByDomain(Long id);
+ /**
+ * gets the total count by role
+ * @Param role Router role
+ * @return count of resources
+ */
+ Integer countAllByRole(Role role);
+
List<DomainRouterVO> findBy(long accountId, long dcId, Role role);
List<DomainRouterVO> findByNetwork(long networkId);
diff --git
a/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
index 85a8a93..17f0ffd 100644
--- a/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/DomainRouterDaoImpl.java
@@ -186,6 +186,14 @@ public class DomainRouterDaoImpl extends
GenericDaoBase<DomainRouterVO, Long> im
}
@Override
+ public Integer countAllByRole(final Role role) {
+ final SearchCriteria<DomainRouterVO> sc = createSearchCriteria();
+ sc.addAnd("role", SearchCriteria.Op.EQ, role);
+ sc.addAnd("removed", Op.NULL);
+ return getCount(sc);
+ }
+
+ @Override
public List<DomainRouterVO> findBy(final long accountId, final long dcId) {
final SearchCriteria<DomainRouterVO> sc = AllFieldsSearch.create();
sc.setParameters("account", accountId);
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
index d0f8fe8..1861b21 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
@@ -35,6 +35,8 @@ public interface ImageStoreDao extends
GenericDao<ImageStoreVO, Long> {
List<ImageStoreVO> findImageCacheByScope(ZoneScope scope);
+ Integer countAllImageStores();
+
List<ImageStoreVO> listImageStores();
List<ImageStoreVO> listImageCacheStores();
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
index 9d53262..38124ea 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDaoImpl.java
@@ -111,6 +111,14 @@ public class ImageStoreDaoImpl extends
GenericDaoBase<ImageStoreVO, Long> implem
}
@Override
+ public Integer countAllImageStores() {
+ SearchCriteria<ImageStoreVO> sc = createSearchCriteria();
+ sc.addAnd("role", SearchCriteria.Op.EQ, DataStoreRole.Image);
+ sc.addAnd("removed", SearchCriteria.Op.NULL);
+ return getCount(sc);
+ }
+
+ @Override
public List<ImageStoreVO> listImageStores() {
SearchCriteria<ImageStoreVO> sc = createSearchCriteria();
sc.addAnd("role", SearchCriteria.Op.EQ, DataStoreRole.Image);
diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
b/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
index 63047e7..04c0882 100644
--- a/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
@@ -278,4 +278,6 @@ public interface GenericDao<T, ID extends Serializable> {
Map<String, Attribute> getAllAttributes();
Pair<List<T>, Integer> searchAndDistinctCount(final SearchCriteria<T> sc,
final Filter filter, final String[] distinctColumns);
+
+ Integer countAll();
}
diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
index fb923c6..32b1984 100644
--- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
@@ -1996,6 +1996,15 @@ public abstract class GenericDaoBase<T, ID extends
Serializable> extends Compone
}
}
+ public Integer countAll() {
+ SearchCriteria<T> sc = null;
+ if (_removed != null) {
+ sc = createSearchCriteria();
+ sc.addAnd(_removed.second().field.getName(),
SearchCriteria.Op.NULL);
+ }
+ return getCount(sc);
+ }
+
public Integer getCount(SearchCriteria<T> sc) {
String clause = sc != null ? sc.getWhereClause() : null;
if (clause != null && clause.length() == 0) {
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
index ef259e1..cdd5a67 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListClustersMetricsCmd.java
@@ -19,6 +19,7 @@ package org.apache.cloudstack.api;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
+import org.apache.cloudstack.api.response.ClusterResponse;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.ClusterMetricsResponse;
@@ -26,6 +27,8 @@ import org.apache.cloudstack.response.ClusterMetricsResponse;
import javax.inject.Inject;
import java.util.List;
+import com.cloud.utils.Pair;
+
@APICommand(name = ListClustersMetricsCmd.APINAME, description = "Lists
clusters metrics", responseObject = ClusterMetricsResponse.class,
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false,
responseView = ResponseObject.ResponseView.Full,
since = "4.9.3", authorized = {RoleType.Admin})
@@ -42,9 +45,10 @@ public class ListClustersMetricsCmd extends ListClustersCmd {
@Override
public void execute() {
- final List<ClusterMetricsResponse> metricsResponses =
metricsService.listClusterMetrics(getClusterResponses());
+ Pair<List<ClusterResponse>, Integer> clusterResponses =
getClusterResponses();
+ final List<ClusterMetricsResponse> metricsResponses =
metricsService.listClusterMetrics(clusterResponses);
ListResponse<ClusterMetricsResponse> response = new ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, clusterResponses.second());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
index 9010063..db80395 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListHostsMetricsCmd.java
@@ -21,6 +21,7 @@ package org.apache.cloudstack.api;
import com.cloud.host.Host;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.admin.host.ListHostsCmd;
+import org.apache.cloudstack.api.response.HostResponse;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.HostMetricsResponse;
@@ -45,9 +46,10 @@ public class ListHostsMetricsCmd extends ListHostsCmd {
@Override
public void execute() {
setType(Host.Type.Routing.toString());
- final List<HostMetricsResponse> metricsResponses =
metricsService.listHostMetrics(getHostResponses().getResponses());
+ ListResponse<HostResponse> hosts = getHostResponses();
+ final List<HostMetricsResponse> metricsResponses =
metricsService.listHostMetrics(hosts.getResponses());
ListResponse<HostMetricsResponse> response = new ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, hosts.getCount());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
index 4206568..35f2f76 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListStoragePoolsMetricsCmd.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.api;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.StoragePoolResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.StoragePoolMetricsResponse;
@@ -42,9 +43,10 @@ public class ListStoragePoolsMetricsCmd extends
ListStoragePoolsCmd {
@Override
public void execute() {
- final List<StoragePoolMetricsResponse> metricsResponses =
metricsService.listStoragePoolMetrics(_queryService.searchForStoragePools(this).getResponses());
+ ListResponse<StoragePoolResponse> storagePools =
_queryService.searchForStoragePools(this);
+ final List<StoragePoolMetricsResponse> metricsResponses =
metricsService.listStoragePoolMetrics(storagePools.getResponses());
ListResponse<StoragePoolMetricsResponse> response = new
ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, storagePools.getCount());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
index 2321f51..1cec5a3 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVMsMetricsCmd.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.api;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.admin.vm.ListVMsCmdByAdmin;
import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.VmMetricsResponse;
@@ -42,9 +43,10 @@ public class ListVMsMetricsCmd extends ListVMsCmdByAdmin {
@Override
public void execute() {
- final List<VmMetricsResponse> metricsResponses =
metricsService.listVmMetrics(_queryService.searchForUserVMs(this).getResponses());
+ ListResponse<UserVmResponse> userVms =
_queryService.searchForUserVMs(this);
+ final List<VmMetricsResponse> metricsResponses =
metricsService.listVmMetrics(userVms.getResponses());
ListResponse<VmMetricsResponse> response = new ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, userVms.getCount());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
index df0adec..efa65c0 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListVolumesMetricsCmd.java
@@ -24,6 +24,7 @@ import javax.inject.Inject;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.VolumeMetricsResponse;
@@ -47,9 +48,10 @@ public class ListVolumesMetricsCmd extends ListVolumesCmd {
@Override
public void execute() {
- final List<VolumeMetricsResponse> metricsResponses =
metricsService.listVolumeMetrics(_queryService.searchForVolumes(this).getResponses());
+ ListResponse<VolumeResponse> volumes =
_queryService.searchForVolumes(this);
+ final List<VolumeMetricsResponse> metricsResponses =
metricsService.listVolumeMetrics(volumes.getResponses());
ListResponse<VolumeMetricsResponse> response = new ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, volumes.getCount());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
index 1a51a5f..c63d05c 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/api/ListZonesMetricsCmd.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.api;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.user.zone.ListZonesCmd;
import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.ZoneMetricsResponse;
@@ -42,9 +43,10 @@ public class ListZonesMetricsCmd extends ListZonesCmd {
@Override
public void execute() {
- final List<ZoneMetricsResponse> metricsResponses =
metricsService.listZoneMetrics(_queryService.listDataCenters(this).getResponses());
+ ListResponse<ZoneResponse> zones = _queryService.listDataCenters(this);
+ final List<ZoneMetricsResponse> metricsResponses =
metricsService.listZoneMetrics(zones.getResponses());
ListResponse<ZoneMetricsResponse> response = new ListResponse<>();
- response.setResponses(metricsResponses, metricsResponses.size());
+ response.setResponses(metricsResponses, zones.getCount());
response.setResponseName(getCommandName());
setResponseObject(response);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
index deb1da8..a1e0289 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsService.java
@@ -17,6 +17,7 @@
package org.apache.cloudstack.metrics;
+import com.cloud.utils.Pair;
import com.cloud.utils.component.PluggableService;
import org.apache.cloudstack.api.response.ClusterResponse;
import org.apache.cloudstack.api.response.HostResponse;
@@ -41,6 +42,6 @@ public interface MetricsService extends PluggableService {
List<VmMetricsResponse> listVmMetrics(List<UserVmResponse> vmResponses);
List<StoragePoolMetricsResponse>
listStoragePoolMetrics(List<StoragePoolResponse> poolResponses);
List<HostMetricsResponse> listHostMetrics(List<HostResponse>
poolResponses);
- List<ClusterMetricsResponse> listClusterMetrics(List<ClusterResponse>
poolResponses);
+ List<ClusterMetricsResponse>
listClusterMetrics(Pair<List<ClusterResponse>, Integer> clusterResponses);
List<ZoneMetricsResponse> listZoneMetrics(List<ZoneResponse>
poolResponses);
}
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
index 9f20fc3..1a9cd27 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java
@@ -51,6 +51,7 @@ import
org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.commons.beanutils.BeanUtils;
import com.cloud.alert.AlertManager;
+import com.cloud.alert.dao.AlertDao;
import com.cloud.api.ApiDBUtils;
import com.cloud.api.query.dao.HostJoinDao;
import com.cloud.api.query.vo.HostJoinVO;
@@ -68,11 +69,13 @@ import com.cloud.host.Host;
import com.cloud.host.HostStats;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
+import com.cloud.network.router.VirtualRouter;
import com.cloud.org.Cluster;
import com.cloud.org.Grouping;
import com.cloud.org.Managed;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
+import com.cloud.utils.Pair;
import com.cloud.utils.component.ComponentLifecycleBase;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
@@ -105,6 +108,8 @@ public class MetricsServiceImpl extends
ComponentLifecycleBase implements Metric
private AccountManager accountMgr;
@Inject
private ManagementServerHostDao managementServerHostDao;
+ @Inject
+ private AlertDao alertDao;
protected MetricsServiceImpl() {
super();
@@ -133,14 +138,16 @@ public class MetricsServiceImpl extends
ComponentLifecycleBase implements Metric
@Override
public InfrastructureResponse listInfrastructure() {
final InfrastructureResponse response = new InfrastructureResponse();
- response.setZones(dataCenterDao.listAllZones().size());
- response.setPods(podDao.listAllPods(null).size());
- response.setClusters(clusterDao.listAllClusters(null).size());
- response.setHosts(hostDao.listByType(Host.Type.Routing).size());
- response.setStoragePools(storagePoolDao.listAll().size());
- response.setImageStores(imageStoreDao.listImageStores().size());
+ response.setZones(dataCenterDao.countAll());
+ response.setPods(podDao.countAll());
+ response.setClusters(clusterDao.countAll());
+ response.setHosts(hostDao.countAllByType(Host.Type.Routing));
+ response.setStoragePools(storagePoolDao.countAll());
+ response.setImageStores(imageStoreDao.countAllImageStores());
response.setSystemvms(vmInstanceDao.listByTypes(VirtualMachine.Type.ConsoleProxy,
VirtualMachine.Type.SecondaryStorageVm).size());
- response.setRouters(domainRouterDao.listAll().size());
+
response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER));
+
response.setInternalLbs(domainRouterDao.countAllByRole(VirtualRouter.Role.INTERNAL_LB_VM));
+ response.setAlerts(alertDao.countAll());
int cpuSockets = 0;
for (final Host host : hostDao.listByType(Host.Type.Routing)) {
if (host.getCpuSockets() != null) {
@@ -308,9 +315,9 @@ public class MetricsServiceImpl extends
ComponentLifecycleBase implements Metric
}
@Override
- public List<ClusterMetricsResponse>
listClusterMetrics(List<ClusterResponse> clusterResponses) {
+ public List<ClusterMetricsResponse>
listClusterMetrics(Pair<List<ClusterResponse>, Integer> clusterResponses) {
final List<ClusterMetricsResponse> metricsResponses = new
ArrayList<>();
- for (final ClusterResponse clusterResponse: clusterResponses) {
+ for (final ClusterResponse clusterResponse: clusterResponses.first()) {
ClusterMetricsResponse metricsResponse = new
ClusterMetricsResponse();
try {
diff --git
a/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
b/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
index 03b54ab..280b799 100644
---
a/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
+++
b/plugins/metrics/src/main/java/org/apache/cloudstack/response/InfrastructureResponse.java
@@ -55,6 +55,10 @@ public class InfrastructureResponse extends BaseResponse {
@Param(description = "Number of routers")
private Integer routers;
+ @SerializedName("ilbvms")
+ @Param(description = "Number of internal LBs")
+ private Integer internalLbs;
+
@SerializedName("cpusockets")
@Param(description = "Number of cpu sockets")
private Integer cpuSockets;
@@ -63,6 +67,10 @@ public class InfrastructureResponse extends BaseResponse {
@Param(description = "Number of management servers")
private Integer managementServers;
+ @SerializedName("alerts")
+ @Param(description = "Number of Alerts")
+ private Integer alerts;
+
public InfrastructureResponse() {
setObjectName("infrastructure");
}
@@ -106,4 +114,8 @@ public class InfrastructureResponse extends BaseResponse {
public void setManagementServers(Integer managementServers) {
this.managementServers = managementServers;
}
+
+ public void setAlerts(Integer alerts) { this.alerts = alerts; }
+
+ public void setInternalLbs(Integer internalLbs) { this.internalLbs =
internalLbs; }
}
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 9028565..c815be8 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -31,9 +31,6 @@ import java.util.stream.Stream;
import javax.inject.Inject;
-import com.cloud.agent.api.storage.OVFProperty;
-import com.cloud.storage.TemplateOVFPropertyVO;
-import com.cloud.storage.dao.TemplateOVFPropertiesDao;
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
import org.apache.cloudstack.affinity.AffinityGroupDomainMapVO;
import org.apache.cloudstack.affinity.AffinityGroupResponse;
@@ -123,6 +120,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.cloud.agent.api.storage.OVFProperty;
import com.cloud.api.query.dao.AccountJoinDao;
import com.cloud.api.query.dao.AffinityGroupJoinDao;
import com.cloud.api.query.dao.AsyncJobJoinDao;
@@ -206,9 +204,11 @@ import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.StoragePoolTagVO;
+import com.cloud.storage.TemplateOVFPropertyVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Volume;
import com.cloud.storage.dao.StoragePoolTagsDao;
+import com.cloud.storage.dao.TemplateOVFPropertiesDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.tags.ResourceTagVO;
import com.cloud.tags.dao.ResourceTagDao;
@@ -2661,7 +2661,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
}
}
}
- return new Pair<>(result.first(), result.first().size());
+ return new Pair<>(result.first(), result.second());
}
private List<ServiceOfferingJoinVO>
filterOfferingsOnCurrentTags(List<ServiceOfferingJoinVO> offerings,
ServiceOfferingVO currentVmOffering) {
@@ -2872,7 +2872,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
}
}
}
- return new Pair<>(filteredOfferings, filteredOfferings.size());
+ return new Pair<>(filteredOfferings, result.second());
}
@Override
@@ -3626,7 +3626,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain,
searchFilter, domainId));
}
- return new Pair<List<AffinityGroupJoinVO>, Integer>(affinityGroups,
affinityGroups.size());
+ return new Pair<List<AffinityGroupJoinVO>, Integer>(affinityGroups,
uniqueGroupsPair.second());
}
diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 147c527..5bed8d6 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -1303,7 +1303,7 @@ public class ManagementServerImpl extends ManagerBase
implements ManagementServe
plan = new DataCenterDeployment(srcHost.getDataCenterId(),
srcHost.getPodId(), srcHost.getClusterId(), null, null, null);
}
- final Pair<List<? extends Host>, Integer> otherHosts = new Pair<List<?
extends Host>, Integer>(allHosts, new Integer(allHosts.size()));
+ final Pair<List<? extends Host>, Integer> otherHosts = new Pair<List<?
extends Host>, Integer>(allHosts, allHostsPair.second());
List<Host> suitableHosts = new ArrayList<Host>();
final ExcludeList excludes = new ExcludeList();
excludes.addHost(srcHostId);
diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java
b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
index 20d769f..77f21f0 100644
--- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
@@ -2670,16 +2670,18 @@ public class AccountManagerImpl extends ManagerBase
implements AccountManager, M
// set project information
if (projectId != null) {
if (!forProjectInvitation) {
- if (projectId.longValue() == -1) {
- if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) {
+ if (projectId == -1L) {
+ if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN) {
+
domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly);
+ if (listAll) {
+
domainIdRecursiveListProject.third(ListProjectResourcesCriteria.ListAllIncludingProjectResources);
+ }
+ } else {
permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId()));
-
- //permittedAccounts can be empty when the caller is
not a part of any project (a domain account)
+ // permittedAccounts can be empty when the caller is
not a part of any project (a domain account)
if (permittedAccounts.isEmpty()) {
permittedAccounts.add(caller.getId());
}
- } else {
-
domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly);
}
} else {
Project project = _projectMgr.getProject(projectId);
diff --git a/server/src/test/java/com/cloud/user/MockUsageEventDao.java
b/server/src/test/java/com/cloud/user/MockUsageEventDao.java
index 5d8ed6c..ab844ee 100644
--- a/server/src/test/java/com/cloud/user/MockUsageEventDao.java
+++ b/server/src/test/java/com/cloud/user/MockUsageEventDao.java
@@ -284,6 +284,11 @@ public class MockUsageEventDao implements UsageEventDao{
}
@Override
+ public Integer countAll() {
+ return null;
+ }
+
+ @Override
public List<UsageEventVO> listLatestEvents(Date endDate) {
return null;
}
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index fe9b359..e016b22 100755
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -2455,7 +2455,7 @@
*/
if (cloudStack.context &&
cloudStack.context.projects == null) { //non-project view
$.ajax({
- url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" +
args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
+ url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&page=" + args.page +
"&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
data: data2,
async: false,
success: function (json) {
@@ -3039,7 +3039,7 @@
// Get project routers
$.ajax({
- url:
createURL("listInternalLoadBalancerVMs&zoneid=" + selectedZoneObj.id +
"&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") +
"&projectid=-1"),
+ url:
createURL("listInternalLoadBalancerVMs&zoneid=" + selectedZoneObj.id + "&page="
+ args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
success: function (json) {
var items =
json.listinternallbvmsresponse.internalloadbalancervm ?
json.listinternallbvmsresponse.internalloadbalancervm:[];
@@ -3592,7 +3592,7 @@
*/
if (cloudStack.context &&
cloudStack.context.projects == null) { //non-project view
$.ajax({
- url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" +
args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
+ url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&page=" + args.page +
"&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
dataType: 'json',
data: data2,
async: false,
@@ -6521,7 +6521,7 @@
// Get project routers
$.ajax({
- url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" +
args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
+ url:
createURL("listRouters&zoneid=" + selectedZoneObj.id + "&page=" + args.page +
"&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
data: data2,
success: function (json) {
var items =
json.listroutersresponse.router ?
@@ -9454,7 +9454,7 @@
*/
if
(cloudStack.context && cloudStack.context.projects == null) { //non-project view
$.ajax({
- url:
createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" +
pageSize + "&projectid=-1"),
+ url:
createURL("listRouters&page=" + args.page + "&pagesize=" + pageSize +
"&projectid=-1"),
async: false,
success:
function (json) {
var items
= json.listroutersresponse.router ? json.listroutersresponse.router:[];
@@ -9877,7 +9877,7 @@
}
$.ajax({
- url:
createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" +
pageSize + array1.join("") + "&projectid=-1"),
+ url: createURL("listRouters&page="
+ args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
data: data2,
async: false,
success: function (json) {