diff --git a/api/src/main/java/com/cloud/projects/Project.java b/api/src/main/java/com/cloud/projects/Project.java index 5fff3082c36..7cc370c8df1 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 74ad764608c..dadc208e71b 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 getClusterResponses() { + protected Pair, Integer> getClusterResponses() { Pair, Integer> result = _mgr.searchForClusters(this); List clusterResponses = new ArrayList(); 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, Integer>(clusterResponses, result.second()); } @Override public void execute() { - List clusterResponses = getClusterResponses(); + Pair, Integer> clusterResponses = getClusterResponses(); ListResponse response = new ListResponse(); - 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 dd45c0987ad..781f82fc3be 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, StateDao { 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 71f0aef39d6..2b2a80bb69a 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 implements HostDao protected SearchBuilder UnmanagedDirectConnectSearch; protected SearchBuilder UnmanagedApplianceSearch; protected SearchBuilder MaintenanceCountSearch; + protected SearchBuilder HostTypeCountSearch; protected SearchBuilder ClusterStatusSearch; protected SearchBuilder TypeNameZoneSearch; protected SearchBuilder AvailHypevisorInZone; @@ -159,6 +160,11 @@ public class HostDaoImpl extends GenericDaoBase 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); @@ -429,6 +435,13 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return hosts.size(); } + @Override + public Integer countAllByType(final Host.Type type) { + SearchCriteria sc = HostTypeCountSearch.create(); + sc.setParameters("type", type); + return getCount(sc); + } + @Override public List listByDataCenterId(long id) { SearchCriteria sc = DcSearch.create(); 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 ef8829ef018..c4fd2f6c974 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 { */ public List listRunningByDomain(Long id); + /** + * gets the total count by role + * @Param role Router role + * @return count of resources + */ + Integer countAllByRole(Role role); + List findBy(long accountId, long dcId, Role role); List 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 85a8a936b5c..17f0ffdeff4 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 @@ -185,6 +185,14 @@ public class DomainRouterDaoImpl extends GenericDaoBase im return listBy(sc); } + @Override + public Integer countAllByRole(final Role role) { + final SearchCriteria sc = createSearchCriteria(); + sc.addAnd("role", SearchCriteria.Op.EQ, role); + sc.addAnd("removed", Op.NULL); + return getCount(sc); + } + @Override public List findBy(final long accountId, final long dcId) { final SearchCriteria sc = AllFieldsSearch.create(); 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 d0f8fe87850..1861b21a38a 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 { List findImageCacheByScope(ZoneScope scope); + Integer countAllImageStores(); + List listImageStores(); List 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 9d532625c0a..38124ea49e0 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 @@ -110,6 +110,14 @@ public class ImageStoreDaoImpl extends GenericDaoBase implem return listBy(sc); } + @Override + public Integer countAllImageStores() { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("role", SearchCriteria.Op.EQ, DataStoreRole.Image); + sc.addAnd("removed", SearchCriteria.Op.NULL); + return getCount(sc); + } + @Override public List listImageStores() { SearchCriteria sc = createSearchCriteria(); 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 63047e7c699..04c0882f22c 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 { Map getAllAttributes(); Pair, Integer> searchAndDistinctCount(final SearchCriteria 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 13f94fcfc22..314cd7c1c6c 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 @@ -2001,6 +2001,15 @@ public abstract class GenericDaoBase extends Compone } } + public Integer countAll() { + SearchCriteria sc = null; + if (_removed != null) { + sc = createSearchCriteria(); + sc.addAnd(_removed.second().field.getName(), SearchCriteria.Op.NULL); + } + return getCount(sc); + } + public Integer getCount(SearchCriteria 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 ef259e19a73..cdd5a67e933 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 metricsResponses = metricsService.listClusterMetrics(getClusterResponses()); + Pair, Integer> clusterResponses = getClusterResponses(); + final List metricsResponses = metricsService.listClusterMetrics(clusterResponses); ListResponse 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 90100631d6b..db80395a297 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 metricsResponses = metricsService.listHostMetrics(getHostResponses().getResponses()); + ListResponse hosts = getHostResponses(); + final List metricsResponses = metricsService.listHostMetrics(hosts.getResponses()); ListResponse 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 420656800fa..35f2f7634f9 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 metricsResponses = metricsService.listStoragePoolMetrics(_queryService.searchForStoragePools(this).getResponses()); + ListResponse storagePools = _queryService.searchForStoragePools(this); + final List metricsResponses = metricsService.listStoragePoolMetrics(storagePools.getResponses()); ListResponse 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 2321f519472..1cec5a31612 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 metricsResponses = metricsService.listVmMetrics(_queryService.searchForUserVMs(this).getResponses()); + ListResponse userVms = _queryService.searchForUserVMs(this); + final List metricsResponses = metricsService.listVmMetrics(userVms.getResponses()); ListResponse 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 df0adec0a77..efa65c0a6b6 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 metricsResponses = metricsService.listVolumeMetrics(_queryService.searchForVolumes(this).getResponses()); + ListResponse volumes = _queryService.searchForVolumes(this); + final List metricsResponses = metricsService.listVolumeMetrics(volumes.getResponses()); ListResponse 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 1a51a5fbe00..c63d05c71dd 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 metricsResponses = metricsService.listZoneMetrics(_queryService.listDataCenters(this).getResponses()); + ListResponse zones = _queryService.listDataCenters(this); + final List metricsResponses = metricsService.listZoneMetrics(zones.getResponses()); ListResponse 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 deb1da89c9f..a1e0289ff17 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 listVmMetrics(List vmResponses); List listStoragePoolMetrics(List poolResponses); List listHostMetrics(List poolResponses); - List listClusterMetrics(List poolResponses); + List listClusterMetrics(Pair, Integer> clusterResponses); List listZoneMetrics(List 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 6e6c0ea7e24..14ee29c08dc 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) { @@ -309,9 +316,9 @@ public class MetricsServiceImpl extends ComponentLifecycleBase implements Metric } @Override - public List listClusterMetrics(List clusterResponses) { + public List listClusterMetrics(Pair, Integer> clusterResponses) { final List 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 03b54abd2ec..280b7998fbb 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 fcd50e56bbc..3da75bf9262 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -2737,7 +2737,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 filterOfferingsOnCurrentTags(List offerings, ServiceOfferingVO currentVmOffering) { @@ -2948,7 +2948,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q } } } - return new Pair<>(filteredOfferings, filteredOfferings.size()); + return new Pair<>(filteredOfferings, result.second()); } @Override @@ -3702,7 +3702,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, domainId)); } - return new Pair, Integer>(affinityGroups, affinityGroups.size()); + return new Pair, 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 ac3460c22e1..6bf4ce3d670 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -1310,7 +1310,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe plan = new DataCenterDeployment(srcHost.getDataCenterId(), srcHost.getPodId(), srcHost.getClusterId(), null, null, null); } - final Pair, Integer> otherHosts = new Pair, Integer>(allHosts, new Integer(allHosts.size())); + final Pair, Integer> otherHosts = new Pair, Integer>(allHosts, allHostsPair.second()); List suitableHosts = new ArrayList(); 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 f40b888808a..98b4aa8a83e 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -2667,16 +2667,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 5d8ed6c4555..ab844ee69e3 100644 --- a/server/src/test/java/com/cloud/user/MockUsageEventDao.java +++ b/server/src/test/java/com/cloud/user/MockUsageEventDao.java @@ -283,6 +283,11 @@ public class MockUsageEventDao implements UsageEventDao{ return null; } + @Override + public Integer countAll() { + return null; + } + @Override public List listLatestEvents(Date endDate) { return null; diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 6164a019b71..6206c317f77 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, @@ -6571,7 +6571,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 ? @@ -9554,7 +9554,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:[];