mirror of https://github.com/apache/cloudstack.git
bug 10848: Introducing an api - ListCapacityByType. Add the basic DB layer in the command.
This commit is contained in:
parent
bf13273889
commit
d763d809cc
|
|
@ -52,7 +52,7 @@ public class ListCapacityByTypeCmd extends BaseListCmd {
|
|||
@Parameter(name=ApiConstants.POD_ID, type=CommandType.LONG, description="lists capacity by the Pod ID")
|
||||
private Long podId;
|
||||
|
||||
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="lists capacity by the Zone ID")
|
||||
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="lists capacity by the Zone ID")
|
||||
private Long zoneId;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package com.cloud.capacity.dao;
|
|||
import java.util.List;
|
||||
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
public interface CapacityDao extends GenericDao<CapacityVO, Long> {
|
||||
|
|
@ -29,5 +30,7 @@ public interface CapacityDao extends GenericDao<CapacityVO, Long> {
|
|||
CapacityVO findByHostIdType(Long hostId, short capacityType);
|
||||
void clearNonStorageCapacities2();
|
||||
List<Long> orderClustersInZoneOrPodByHostCapacities(long id, int requiredCpu, long requiredRam, short capacityTypeForOrdering, boolean isZone, float cpuOverprovisioningFactor);
|
||||
List<Long> listHostsWithEnoughCapacity(int requiredCpu, long requiredRam, Long clusterId, String hostType, float cpuOverprovisioningFactor);
|
||||
List<Long> listHostsWithEnoughCapacity(int requiredCpu, long requiredRam, Long clusterId, String hostType, float cpuOverprovisioningFactor);
|
||||
List<SummedCapacity> findCapacityByType(short capacityType, Long zoneId, Long podId,
|
||||
Long clusterId, Long startIndex, Long pageSize);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,10 +29,17 @@ import javax.ejb.Local;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.storage.dao.VolumeDaoImpl.SumCount;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.GenericSearchBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@Local(value = { CapacityDao.class })
|
||||
|
|
@ -53,6 +60,7 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
|
|||
|
||||
private SearchBuilder<CapacityVO> _hostIdTypeSearch;
|
||||
private SearchBuilder<CapacityVO> _hostOrPoolIdSearch;
|
||||
protected GenericSearchBuilder<CapacityVO, SummedCapacity> SummedCapactySearch;
|
||||
|
||||
private static final String LIST_HOSTS_IN_CLUSTER_WITH_ENOUGH_CAPACITY = "SELECT a.host_id FROM (host JOIN op_host_capacity a ON host.id = a.host_id AND host.cluster_id = ? AND host.type = ? " +
|
||||
"AND (a.total_capacity * ? - a.used_capacity) >= ? and a.capacity_type = 1) " +
|
||||
|
|
@ -68,6 +76,44 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
|
|||
_hostOrPoolIdSearch.and("hostId", _hostOrPoolIdSearch.entity().getHostOrPoolId(), SearchCriteria.Op.EQ);
|
||||
_hostOrPoolIdSearch.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SummedCapacity> findCapacityByType(short capacityType, Long zoneId, Long podId, Long clusterId, Long startIndex, Long pageSize){
|
||||
|
||||
SummedCapactySearch = createSearchBuilder(SummedCapacity.class);
|
||||
SummedCapactySearch.select("sumUsed", Func.SUM, SummedCapactySearch.entity().getUsedCapacity());
|
||||
SummedCapactySearch.select("sumTotal", Func.SUM, SummedCapactySearch.entity().getTotalCapacity());
|
||||
SummedCapactySearch.select("clusterId", Func.NATIVE, SummedCapactySearch.entity().getClusterId());
|
||||
SummedCapactySearch.select("podId", Func.NATIVE, SummedCapactySearch.entity().getPodId());
|
||||
|
||||
SummedCapactySearch.and("dcId", SummedCapactySearch.entity().getDataCenterId(), Op.EQ);
|
||||
SummedCapactySearch.and("capacityType", SummedCapactySearch.entity().getCapacityType(), Op.EQ);
|
||||
SummedCapactySearch.groupBy(SummedCapactySearch.entity().getClusterId());
|
||||
|
||||
if (podId != null){
|
||||
SummedCapactySearch.and("podId", SummedCapactySearch.entity().getPodId(), Op.EQ);
|
||||
}
|
||||
if (clusterId != null){
|
||||
SummedCapactySearch.and("clusterId", SummedCapactySearch.entity().getClusterId(), Op.EQ);
|
||||
}
|
||||
SummedCapactySearch.done();
|
||||
|
||||
|
||||
SearchCriteria<SummedCapacity> sc = SummedCapactySearch.create();
|
||||
sc.setParameters("dcId", zoneId);
|
||||
sc.setParameters("capacityType", capacityType);
|
||||
if (podId != null){
|
||||
sc.setParameters("podId", podId);
|
||||
}
|
||||
if (clusterId != null){
|
||||
sc.setParameters("clusterId", clusterId);
|
||||
}
|
||||
|
||||
Filter filter = new Filter(CapacityVO.class, null, true, startIndex, pageSize);
|
||||
List<SummedCapacity> results = customSearchIncludingRemoved(sc, filter);
|
||||
return results;
|
||||
|
||||
}
|
||||
|
||||
public void updateAllocated(Long hostId, long allocatedAmount, short capacityType, boolean add) {
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
|
|
@ -231,5 +277,14 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
|
|||
} catch (Throwable e) {
|
||||
throw new CloudRuntimeException("Caught: " + sql, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class SummedCapacity {
|
||||
public long sumUsed;
|
||||
public long sumTotal;
|
||||
public long clusterId;
|
||||
public long podId;
|
||||
public SummedCapacity() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ import com.cloud.async.dao.AsyncJobDao;
|
|||
import com.cloud.capacity.Capacity;
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
import com.cloud.capacity.dao.CapacityDao;
|
||||
import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
import com.cloud.configuration.ConfigurationVO;
|
||||
|
|
@ -3221,7 +3222,12 @@ public class ManagementServerImpl implements ManagementServer {
|
|||
|
||||
@Override
|
||||
public List<CapacityVO> listCapacityByType(ListCapacityByTypeCmd cmd) {
|
||||
return null;
|
||||
|
||||
List<SummedCapacity> results = _capacityDao.findCapacityByType(cmd.getType().shortValue(), cmd.getZoneId(), cmd.getPodId(), cmd.getClusterId(), cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
for (SummedCapacity sum : results){
|
||||
s_logger.info("Total - " +sum.sumTotal+ " Used - " +sum.sumUsed+ " cluster " +sum.clusterId+ " pod " +sum.podId);
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue