Merge branch '4.13'

This commit is contained in:
Daan Hoogland 2020-02-26 16:18:41 +01:00
commit a62a10c814
24 changed files with 134 additions and 42 deletions

View File

@ -29,7 +29,7 @@ public interface Project extends PartOf, Identity, InternalIdentity {
}
public enum ListProjectResourcesCriteria {
ListProjectResourcesOnly, SkipProjectResources
ListProjectResourcesOnly, SkipProjectResources, ListAllIncludingProjectResources
}
String getDisplayText();

View File

@ -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);
}

View File

@ -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.

View File

@ -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);
@ -429,6 +435,13 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
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();

View File

@ -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);

View File

@ -185,6 +185,14 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im
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();

View File

@ -35,6 +35,8 @@ public interface ImageStoreDao extends GenericDao<ImageStoreVO, Long> {
List<ImageStoreVO> findImageCacheByScope(ZoneScope scope);
Integer countAllImageStores();
List<ImageStoreVO> listImageStores();
List<ImageStoreVO> listImageCacheStores();

View File

@ -110,6 +110,14 @@ public class ImageStoreDaoImpl extends GenericDaoBase<ImageStoreVO, Long> implem
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();

View File

@ -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();
}

View File

@ -2001,6 +2001,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) {

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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<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 {

View File

@ -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; }
}

View File

@ -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<ServiceOfferingJoinVO> filterOfferingsOnCurrentTags(List<ServiceOfferingJoinVO> 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<List<AffinityGroupJoinVO>, Integer>(affinityGroups, affinityGroups.size());
return new Pair<List<AffinityGroupJoinVO>, Integer>(affinityGroups, uniqueGroupsPair.second());
}

View File

@ -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<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);

View File

@ -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);

View File

@ -283,6 +283,11 @@ public class MockUsageEventDao implements UsageEventDao{
return null;
}
@Override
public Integer countAll() {
return null;
}
@Override
public List<UsageEventVO> listLatestEvents(Date endDate) {
return null;

View File

@ -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:[];