Skip to content
2 changes: 1 addition & 1 deletion api/src/main/java/com/cloud/projects/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public enum State {
}

public enum ListProjectResourcesCriteria {
ListProjectResourcesOnly, SkipProjectResources
ListProjectResourcesOnly, SkipProjectResources, ListAllIncludingProjectResources
}

String getDisplayText();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,22 +125,22 @@ public String getCommandName() {
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()) {
ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, showCapacities);
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);
}
Expand Down
2 changes: 2 additions & 0 deletions engine/schema/src/main/java/com/cloud/host/dao/HostDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
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.
Expand Down
13 changes: 13 additions & 0 deletions engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -159,6 +160,11 @@ public void init() {
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);
Expand Down Expand Up @@ -429,6 +435,13 @@ public long countBy(long clusterId, ResourceState... states) {
return hosts.size();
}

@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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,14 @@ public List<DomainRouterVO> listByDataCenter(final long dcId) {
return listBy(sc);
}

@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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ public interface ImageStoreDao extends GenericDao<ImageStoreVO, Long> {

List<ImageStoreVO> findImageCacheByScope(ZoneScope scope);

Integer countAllImageStores();

List<ImageStoreVO> listImageStores();

List<ImageStoreVO> listImageCacheStores();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ public List<ImageStoreVO> findImageCacheByScope(ZoneScope scope) {
return listBy(sc);
}

@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();
Expand Down
2 changes: 2 additions & 0 deletions framework/db/src/main/java/com/cloud/utils/db/GenericDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Original file line number Diff line number Diff line change
Expand Up @@ -1996,6 +1996,15 @@ public Integer getDistinctCount(SearchCriteria<T> sc, String[] distinctColumns)
}
}

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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@

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;

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})
Expand All @@ -42,9 +45,10 @@ public String getCommandName() {

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
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;
Expand All @@ -45,9 +46,10 @@ public String getCommandName() {
@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
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;

Expand All @@ -42,9 +43,10 @@ public String getCommandName() {

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
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;

Expand All @@ -42,9 +43,10 @@ public String getCommandName() {

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
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;

Expand All @@ -47,9 +48,10 @@ public String getCommandName() {

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
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;

Expand All @@ -42,9 +43,10 @@ public String getCommandName() {

@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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
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;
Expand All @@ -68,11 +69,13 @@
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;
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -133,14 +138,16 @@ private void updateHostMetrics(final Metrics metrics, final HostJoinVO host) {
@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) {
Expand Down Expand Up @@ -308,9 +315,9 @@ private CapacityDaoImpl.SummedCapacity getCapacity(final int capacityType, final
}

@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 {
Expand Down
Loading