From e55e6c283f25f53881db2c7086614754174679b5 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Fri, 27 Aug 2010 15:40:47 -0700 Subject: [PATCH] Refactoring work on listCapacities, listConfigurations, listClusters, and listDiskOfferings commands. The work represents consolidating the Criteria object into just pulling the search criteria directly from the command. Also changed BaseListCmd to server the startIndex and pageSizeVal [includes default page size of 50] rather than have each search command compute these things. --- server/src/com/cloud/api/BaseListCmd.java | 23 ++++ .../cloud/api/commands/ListCapacityCmd.java | 128 ++++++------------ .../com/cloud/api/commands/ListCfgsByCmd.java | 89 +++--------- .../cloud/api/commands/ListClustersCmd.java | 98 ++++---------- .../api/commands/ListDiskOfferingsCmd.java | 104 ++++---------- .../cloud/api/response/CapacityResponse.java | 94 +++++++++++++ .../cloud/api/response/ClusterResponse.java | 72 ++++++++++ .../api/response/ConfigurationResponse.java | 50 +++++++ .../com/cloud/server/ManagementServer.java | 19 +-- .../cloud/server/ManagementServerImpl.java | 101 +++++--------- 10 files changed, 403 insertions(+), 375 deletions(-) create mode 100644 server/src/com/cloud/api/response/CapacityResponse.java create mode 100644 server/src/com/cloud/api/response/ClusterResponse.java create mode 100644 server/src/com/cloud/api/response/ConfigurationResponse.java diff --git a/server/src/com/cloud/api/BaseListCmd.java b/server/src/com/cloud/api/BaseListCmd.java index efc7441e973..bed689b72bd 100644 --- a/server/src/com/cloud/api/BaseListCmd.java +++ b/server/src/com/cloud/api/BaseListCmd.java @@ -2,6 +2,8 @@ package com.cloud.api; public abstract class BaseListCmd extends BaseCmd { + private static final long DEFAULT_PAGE_SIZE = 50; + ///////////////////////////////////////////////////// /////////// BaseList API parameters ///////////////// ///////////////////////////////////////////////////// @@ -31,4 +33,25 @@ public abstract class BaseListCmd extends BaseCmd { public Integer getPageSize() { return pageSize; } + + public Long getPageSizeVal() { + Long pageSize = DEFAULT_PAGE_SIZE; + Integer pageSizeInt = getPageSize(); + if (pageSizeInt != null) { + pageSize = pageSizeInt.longValue(); + } + return pageSize; + } + + public Long getStartIndex() { + Long startIndex = Long.valueOf(0); + Long pageSizeVal = getPageSizeVal(); + if (page != null) { + int pageNum = page.intValue(); + if (pageNum > 0) { + startIndex = Long.valueOf(pageSizeVal * (pageNum-1)); + } + } + return startIndex; + } } diff --git a/server/src/com/cloud/api/commands/ListCapacityCmd.java b/server/src/com/cloud/api/commands/ListCapacityCmd.java index 08659ee7b3c..a48f87f292e 100644 --- a/server/src/com/cloud/api/commands/ListCapacityCmd.java +++ b/server/src/com/cloud/api/commands/ListCapacityCmd.java @@ -30,31 +30,25 @@ import java.util.StringTokenizer; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; +import com.cloud.api.response.CapacityResponse; import com.cloud.capacity.CapacityVO; +import com.cloud.serializer.SerializerHelper; import com.cloud.server.Criteria; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.storage.StoragePoolVO; import com.cloud.utils.Pair; - -public class ListCapacityCmd extends BaseCmd{ + +@Implementation(method="listCapacities") +public class ListCapacityCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCapacityCmd.class.getName()); private static final DecimalFormat s_percentFormat = new DecimalFormat("####.##"); private static final String s_name = "listcapacityresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.HOST_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.TYPE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -97,86 +91,54 @@ public class ListCapacityCmd extends BaseCmd{ /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; - } - public List> getProperties() { - return s_properties; - } - - public List> execute(Map params) { - Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); - Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); - Long hostId = (Long)params.get(BaseCmd.Properties.HOST_ID.getName()); - String type = (String)params.get(BaseCmd.Properties.TYPE.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); + } - Long startIndex = Long.valueOf(0); - int pageSizeNum = 1000000; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - Criteria c = new Criteria ("capacityType", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - c.addCriteria(Criteria.DATACENTERID, zoneId); - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.HOSTID, hostId); - c.addCriteria(Criteria.TYPE, type); - - List capacities = getManagementServer().listCapacities(c); - - if (capacities == null ) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to get capacity statistic"); - } - - List summedCapacities = sumCapacities(capacities); - List> capacitiesTags = new ArrayList>(); - Object[] cTag = new Object[summedCapacities.size()]; - int i=0; - - for (CapacityVO capacity : summedCapacities) { - List> capacityData = new ArrayList>(); - capacityData.add(new Pair(BaseCmd.Properties.TYPE.getName(), capacity.getCapacityType())); - capacityData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), capacity.getDataCenterId())); - capacityData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().getDataCenterBy(capacity.getDataCenterId()).getName())); - if (capacity.getPodId() != null) { - capacityData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), capacity.getPodId())); - capacityData.add(new Pair(BaseCmd.Properties.POD_NAME.getName(), (capacity.getPodId() > 0) ? getManagementServer().findHostPodById(capacity.getPodId()).getName() : "All")); - } - capacityData.add(new Pair(BaseCmd.Properties.CAPACITY_USED.getName(), Long.valueOf(capacity.getUsedCapacity()).toString())); - capacityData.add(new Pair(BaseCmd.Properties.CAPACITY_TOTAL.getName(), Long.valueOf(capacity.getTotalCapacity()).toString())); - try { - if (capacity.getTotalCapacity() != 0) { - float percent = (float)capacity.getUsedCapacity()/(float)capacity.getTotalCapacity()*100; - capacityData.add(new Pair(BaseCmd.Properties.PERCENT_USED.getName(), s_percentFormat.format(percent))); - } - else { - capacityData.add(new Pair(BaseCmd.Properties.PERCENT_USED.getName(), s_percentFormat.format(0))); - } - } catch (Exception ex) { - throw new ServerApiException (BaseCmd.INTERNAL_ERROR, "unable to get capacity statistic"); - } - cTag[i++] = capacityData; - } - - Pair capacityTag = new Pair("capacity", cTag); - capacitiesTags.add(capacityTag); - return capacitiesTags; + @Override + public Long getPageSizeVal() { + Long pageSizeVal = 1000000L; + Integer pageSize = getPageSize(); + if (pageSize != null) { + pageSizeVal = pageSize.longValue(); + } + return pageSizeVal; + } + + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List capacities = (List)getResponseObject(); + + List summedCapacities = sumCapacities(capacities); + List response = new ArrayList(); + for (CapacityVO summedCapacity : summedCapacities) { + CapacityResponse capacityResponse = new CapacityResponse(); + capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity()); + capacityResponse.setCapacityType(summedCapacity.getCapacityType()); + capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity()); + capacityResponse.setPodId(summedCapacity.getPodId()); + capacityResponse.setZoneId(summedCapacity.getDataCenterId()); + // TODO: implement +// capacityResponse.setPodName(podName); +// capacityResponse.setZoneName(zoneName); + if (summedCapacity.getTotalCapacity() != 0) { + capacityResponse.setPercentUsed(s_percentFormat.format(summedCapacity.getUsedCapacity() / summedCapacity.getTotalCapacity())); + } else { + capacityResponse.setPercentUsed(s_percentFormat.format(0L)); + } + } + + return SerializerHelper.toSerializedString(response); } - public List sumCapacities(List hostCapacities) { + private List sumCapacities(List hostCapacities) { Map totalCapacityMap = new HashMap(); Map usedCapacityMap = new HashMap(); Set poolIdsToIgnore = new HashSet(); Criteria c = new Criteria(); + // TODO: implement List allStoragePools = getManagementServer().searchForStoragePools(c); for (StoragePoolVO pool : allStoragePools) { StoragePoolType poolType = pool.getPoolType(); diff --git a/server/src/com/cloud/api/commands/ListCfgsByCmd.java b/server/src/com/cloud/api/commands/ListCfgsByCmd.java index e42f6eba497..44e4771ed39 100644 --- a/server/src/com/cloud/api/commands/ListCfgsByCmd.java +++ b/server/src/com/cloud/api/commands/ListCfgsByCmd.java @@ -20,31 +20,21 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.ConfigurationResponse; import com.cloud.configuration.ConfigurationVO; -import com.cloud.server.Criteria; -import com.cloud.utils.Pair; +import com.cloud.serializer.SerializerHelper; -public class ListCfgsByCmd extends BaseCmd { +@Implementation(method="searchForConfigurations") +public class ListCfgsByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListCfgsByCmd.class.getName()); private static final String s_name = "listconfigurationsresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.CATEGORY, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -74,61 +64,26 @@ public class ListCfgsByCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } - @Override - public List> execute(Map params) { - String name = (String) params.get(BaseCmd.Properties.NAME.getName()); - String category = (String) params.get(BaseCmd.Properties.CATEGORY.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 100; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List configurations = (List)getResponseObject(); + + List response = new ArrayList(); + for (ConfigurationVO cfg : configurations) { + ConfigurationResponse cfgResponse = new ConfigurationResponse(); + cfgResponse.setCategory(cfg.getCategory()); + cfgResponse.setDescription(cfg.getDescription()); + cfgResponse.setName(cfg.getName()); + cfgResponse.setValue(cfg.getValue()); + + response.add(cfgResponse); } - - Criteria c = new Criteria ("name", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.CATEGORY, category); - } - - List configs = getManagementServer().searchForConfigurations(c, false); - - if (configs == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to find configuration values for specified search criteria."); - } - - List> cfgTags = new ArrayList>(); - Object[] cfgDataTags = new Object[configs.size()]; - - int i = 0; - for (ConfigurationVO config : configs) { - List> cfgData = new ArrayList>(); - cfgData.add(new Pair(BaseCmd.Properties.CATEGORY.getName(), config.getCategory())); - cfgData.add(new Pair(BaseCmd.Properties.NAME.getName(), config.getName())); - cfgData.add(new Pair(BaseCmd.Properties.VALUE.getName(), config.getValue())); - cfgData.add(new Pair(BaseCmd.Properties.DESCRIPTION.getName(), config.getDescription())); - cfgDataTags[i++] = cfgData; - } - Pair cfgTag = new Pair("configuration", cfgDataTags); - cfgTags.add(cfgTag); - return cfgTags; + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/commands/ListClustersCmd.java b/server/src/com/cloud/api/commands/ListClustersCmd.java index 4c5ca1efdd6..6e1764fb927 100644 --- a/server/src/com/cloud/api/commands/ListClustersCmd.java +++ b/server/src/com/cloud/api/commands/ListClustersCmd.java @@ -20,34 +20,21 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.ClusterResponse; import com.cloud.dc.ClusterVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.server.Criteria; -import com.cloud.utils.Pair; +import com.cloud.serializer.SerializerHelper; -public class ListClustersCmd extends BaseCmd { +@Implementation(method="searchForClusters") +public class ListClustersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName()); private static final String s_name = "listclustersresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -90,68 +77,29 @@ public class ListClustersCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } - @Override - public List> execute(Map params) { - Long id = (Long) params.get(BaseCmd.Properties.ID.getName()); - String name = (String) params.get(BaseCmd.Properties.NAME.getName()); - Long podId = (Long) params.get(BaseCmd.Properties.POD_ID.getName()); - Long zoneId = (Long) params.get(BaseCmd.Properties.ZONE_ID.getName()); - Integer page = (Integer) params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer) params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.DATACENTERID, zoneId); + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List clusters = (List)getResponseObject(); - List clusters = getManagementServer().searchForClusters(c); - - if (clusters == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find clusters"); - } - - List> clusterTags = new ArrayList>(); - Object[] cTag = new Object[clusters.size()]; - int i = 0; + List response = new ArrayList(); for (ClusterVO cluster : clusters) { - List> clusterData = new ArrayList>(); - - clusterData.add(new Pair(BaseCmd.Properties.ID.getName(), cluster.getId())); - clusterData.add(new Pair(BaseCmd.Properties.NAME.getName(), cluster.getName())); - - HostPodVO pod = getManagementServer().findHostPodById(cluster.getPodId()); - clusterData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), pod.getId())); - clusterData.add(new Pair(BaseCmd.Properties.POD_NAME.getName(), pod.getName())); - - DataCenterVO zone = getManagementServer().findDataCenterById(cluster.getDataCenterId()); - clusterData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), zone.getId())); - clusterData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), zone.getName())); - - cTag[i++] = clusterData; + ClusterResponse clusterResponse = new ClusterResponse(); + clusterResponse.setId(cluster.getId()); + clusterResponse.setName(cluster.getName()); + clusterResponse.setPodId(cluster.getPodId()); + clusterResponse.setZoneId(cluster.getDataCenterId()); + // TODO: implement +// HostPodVO pod = getManagementServer().findHostPodById(cluster.getPodId()); +// clusterResponse.setPodName(podName); +// DataCenterVO zone = getManagementServer().findDataCenterById(cluster.getDataCenterId()); +// clusterResponse.setZoneName(zoneName); } - - Pair clusterTag = new Pair("cluster", cTag); - clusterTags.add(clusterTag); - - return clusterTags; + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java b/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java index c3c3363bc84..c9c27691868 100644 --- a/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java +++ b/server/src/com/cloud/api/commands/ListDiskOfferingsCmd.java @@ -20,34 +20,22 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.server.Criteria; +import com.cloud.api.response.DiskOfferingResponse; +import com.cloud.serializer.SerializerHelper; import com.cloud.storage.DiskOfferingVO; -import com.cloud.utils.Pair; - -public class ListDiskOfferingsCmd extends BaseCmd { + +@Implementation(method="searchForDiskOfferings") +public class ListDiskOfferingsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListDiskOfferingsCmd.class.getName()); private static final String s_name = "listdiskofferingsresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -86,62 +74,28 @@ public class ListDiskOfferingsCmd extends BaseCmd { @Override public String getName() { return s_name; - } - @Override - public List> getProperties() { - return s_properties; - } + } - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - String name = (String)params.get(BaseCmd.Properties.NAME.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - }else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.DOMAINID, domainId); - } - - List offerings = getManagementServer().searchForDiskOfferings(c); - - List> offeringTags = new ArrayList>(); - Object[] diskOffTag = new Object[offerings.size()]; - int i = 0; - for (DiskOfferingVO offering : offerings) { - List> offeringData = new ArrayList>(); - - offeringData.add(new Pair(BaseCmd.Properties.ID.getName(), Long.toString(offering.getId()))); - offeringData.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), offering.getDomainId())); - offeringData.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(offering.getDomainId()).getName())); - offeringData.add(new Pair(BaseCmd.Properties.NAME.getName(), offering.getName())); - offeringData.add(new Pair(BaseCmd.Properties.DISPLAY_TEXT.getName(), offering.getDisplayText())); - offeringData.add(new Pair(BaseCmd.Properties.DISK_SIZE.getName(), offering.getDiskSizeInBytes())); - offeringData.add(new Pair(BaseCmd.Properties.IS_MIRRORED.getName(), offering.isMirrored())); - offeringData.add(new Pair(BaseCmd.Properties.TAGS.getName(), offering.getTags())); - diskOffTag[i++] = offeringData; - } - Pair offeringTag = new Pair("diskoffering", diskOffTag); - offeringTags.add(offeringTag); - return offeringTags; + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List offerings = (List)getResponseObject(); + + List response = new ArrayList(); + for (DiskOfferingVO offering : offerings) { + DiskOfferingResponse diskOffResp = new DiskOfferingResponse(); + diskOffResp.setCreated(offering.getCreated()); + diskOffResp.setDiskSize(offering.getDiskSize()); + diskOffResp.setDisplayText(offering.getDisplayText()); + diskOffResp.setDomainId(offering.getDomainId()); + diskOffResp.setId(offering.getId()); + diskOffResp.setName(offering.getName()); + diskOffResp.setTags(offering.getTags()); + // TODO: implement +// getManagementServer().findDomainIdById(offering.getDomainId()).getName() +// diskOffResp.setDomain(domain); + + } + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/CapacityResponse.java b/server/src/com/cloud/api/response/CapacityResponse.java new file mode 100644 index 00000000000..b29b9548419 --- /dev/null +++ b/server/src/com/cloud/api/response/CapacityResponse.java @@ -0,0 +1,94 @@ +package com.cloud.api.response; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class CapacityResponse implements ResponseObject { + @Param(name="type") + private Short capacityType; + + @Param(name="zoneid") + private Long zoneId; + + @Param(name="zonename") + private String zoneName; + + @Param(name="podid") + private Long podId; + + @Param(name="podname") + private String podName; + + @Param(name="capacityused") + private Long capacityUsed; + + @Param(name="capacityTotal") + private Long capacityTotal; + + @Param(name="percentused") + private String percentUsed; + + public Short getCapacityType() { + return capacityType; + } + + public void setCapacityType(Short capacityType) { + this.capacityType = capacityType; + } + + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public Long getPodId() { + return podId; + } + + public void setPodId(Long podId) { + this.podId = podId; + } + + public String getPodName() { + return podName; + } + + public void setPodName(String podName) { + this.podName = podName; + } + + public Long getCapacityUsed() { + return capacityUsed; + } + + public void setCapacityUsed(Long capacityUsed) { + this.capacityUsed = capacityUsed; + } + + public Long getCapacityTotal() { + return capacityTotal; + } + + public void setCapacityTotal(Long capacityTotal) { + this.capacityTotal = capacityTotal; + } + + public String getPercentUsed() { + return percentUsed; + } + + public void setPercentUsed(String percentUsed) { + this.percentUsed = percentUsed; + } +} diff --git a/server/src/com/cloud/api/response/ClusterResponse.java b/server/src/com/cloud/api/response/ClusterResponse.java new file mode 100644 index 00000000000..f51b5bf2c1a --- /dev/null +++ b/server/src/com/cloud/api/response/ClusterResponse.java @@ -0,0 +1,72 @@ +package com.cloud.api.response; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class ClusterResponse implements ResponseObject { + @Param(name="id") + private Long id; + + @Param(name="name") + private String name; + + @Param(name="podid") + private Long podId; + + @Param(name="podname") + private String podName; + + @Param(name="zoneid") + private Long zoneId; + + @Param(name="zonename") + private String zoneName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getPodId() { + return podId; + } + + public void setPodId(Long podId) { + this.podId = podId; + } + + public String getPodName() { + return podName; + } + + public void setPodName(String podName) { + this.podName = podName; + } + + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } +} diff --git a/server/src/com/cloud/api/response/ConfigurationResponse.java b/server/src/com/cloud/api/response/ConfigurationResponse.java new file mode 100644 index 00000000000..18d9fccada6 --- /dev/null +++ b/server/src/com/cloud/api/response/ConfigurationResponse.java @@ -0,0 +1,50 @@ +package com.cloud.api.response; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class ConfigurationResponse implements ResponseObject { + @Param(name="category") + private String category; + + @Param(name="name") + private String name; + + @Param(name="value") + private String value; + + @Param(name="description") + private String description; + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 66b62ad801f..995bd250601 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -33,6 +33,10 @@ import com.cloud.api.commands.EnableUserCmd; import com.cloud.api.commands.GetCloudIdentifierCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListAsyncJobsCmd; +import com.cloud.api.commands.ListCapacityCmd; +import com.cloud.api.commands.ListCfgsByCmd; +import com.cloud.api.commands.ListClustersCmd; +import com.cloud.api.commands.ListDiskOfferingsCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -837,7 +841,7 @@ public interface ManagementServer { * returns the a map of the names/values in the configuraton table * @return map of configuration name/values */ - List searchForConfigurations(Criteria c, boolean showHidden); + List searchForConfigurations(ListCfgsByCmd c); /** * returns the instance id of this management server. @@ -866,7 +870,7 @@ public interface ManagementServer { * @param c * @return */ - List searchForClusters(Criteria c); + List searchForClusters(ListClustersCmd c); /** * Searches for Pods by the specified search criteria @@ -1526,10 +1530,10 @@ public interface ManagementServer { /** * list all the capacity rows in capacity operations table - * @param c + * @param cmd * @return List of capacities */ - List listCapacities(Criteria c); + List listCapacities(ListCapacityCmd cmd); public long getMemoryUsagebyHost(Long hostId); @@ -1636,12 +1640,11 @@ public interface ManagementServer { /** * Search for disk offerings based on search criteria - * @param c the criteria to use for searching for disk offerings + * @param cmd the command containing the criteria to use for searching for disk offerings * @return a list of disk offerings that match the given criteria */ - List searchForDiskOfferings(Criteria c); - - + List searchForDiskOfferings(ListDiskOfferingsCmd cmd); + /** * * @param jobId async-call job id diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 5cc490e75cb..28652b7a78b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -72,6 +72,10 @@ import com.cloud.api.commands.EnableUserCmd; import com.cloud.api.commands.GetCloudIdentifierCmd; import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.ListAsyncJobsCmd; +import com.cloud.api.commands.ListCapacityCmd; +import com.cloud.api.commands.ListCfgsByCmd; +import com.cloud.api.commands.ListClustersCmd; +import com.cloud.api.commands.ListDiskOfferingsCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -3859,14 +3863,14 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForClusters(Criteria c) { - Filter searchFilter = new Filter(ClusterVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + public List searchForClusters(ListClustersCmd cmd) { + Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchCriteria sc = _clusterDao.createSearchCriteria(); - Object id = c.getCriteria(Criteria.ID); - Object name = c.getCriteria(Criteria.NAME); - Object podId = c.getCriteria(Criteria.PODID); - Object zoneId = c.getCriteria(Criteria.DATACENTERID); + Object id = cmd.getId(); + Object name = cmd.getName(); + Object podId = cmd.getPodId(); + Object zoneId = cmd.getZoneId(); if (id != null) { sc.addAnd("id", SearchCriteria.Op.EQ, id); @@ -4073,13 +4077,13 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForConfigurations(Criteria c, boolean showHidden) { - Filter searchFilter = new Filter(ConfigurationVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + public List searchForConfigurations(ListCfgsByCmd cmd) { + Filter searchFilter = new Filter(ConfigurationVO.class, "name", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchCriteria sc = _configDao.createSearchCriteria(); - Object name = c.getCriteria(Criteria.NAME); - Object category = c.getCriteria(Criteria.CATEGORY); - Object keyword = c.getCriteria(Criteria.KEYWORD); + Object name = cmd.getConfigName(); + Object category = cmd.getCategory(); + Object keyword = cmd.getKeyword(); if (keyword != null) { SearchCriteria ssc = _configDao.createSearchCriteria(); @@ -4101,9 +4105,8 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("category", SearchCriteria.Op.EQ, category); } - if (!showHidden) { - sc.addAnd("category", SearchCriteria.Op.NEQ, "Hidden"); - } + // hidden configurations are not displayed using the search API + sc.addAnd("category", SearchCriteria.Op.NEQ, "Hidden"); return _configDao.search(sc, searchFilter); } @@ -6302,21 +6305,7 @@ public class ManagementServerImpl implements ManagementServer { @Override public List searchForAlerts(ListAlertsCmd cmd) { - Integer page = cmd.getPage(); - Integer pageSize = cmd.getPageSize(); - Long startIndex = Long.valueOf(0); - long pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = pageSizeNum * (pageNum - 1L); - } - } - - Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, startIndex, pageSizeNum); + Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchCriteria sc = _alertDao.createSearchCriteria(); @@ -6338,20 +6327,20 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List listCapacities(Criteria c) { + public List listCapacities(ListCapacityCmd cmd) { // make sure capacity is accurate before displaying it anywhere // NOTE: listCapacities is currently called by the UI only, so this // shouldn't be called much since it checks all hosts/VMs // to figure out what has been allocated. _alertMgr.recalculateCapacity(); - Filter searchFilter = new Filter(CapacityVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + Filter searchFilter = new Filter(CapacityVO.class, "capacityType", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchCriteria sc = _capacityDao.createSearchCriteria(); - Object type = c.getCriteria(Criteria.TYPE); - Object zoneId = c.getCriteria(Criteria.DATACENTERID); - Object podId = c.getCriteria(Criteria.PODID); - Object hostId = c.getCriteria(Criteria.HOSTID); + Object type = cmd.getType(); + Object zoneId = cmd.getZoneId(); + Object podId = cmd.getPodId(); + Object hostId = cmd.getHostId(); if (type != null) { sc.addAnd("capacityType", SearchCriteria.Op.EQ, type); @@ -6715,16 +6704,15 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForDiskOfferings(Criteria c) { - Filter searchFilter = new Filter(DiskOfferingVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + public List searchForDiskOfferings(ListDiskOfferingsCmd cmd) { + Filter searchFilter = new Filter(DiskOfferingVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _diskOfferingDao.createSearchBuilder(); // SearchBuilder and SearchCriteria are now flexible so that the search builder can be built with all possible // search terms and only those with criteria can be set. The proper SQL should be generated as a result. - Object name = c.getCriteria(Criteria.NAME); - //Object domainId = c.getCriteria(Criteria.DOMAINID); - Object id = c.getCriteria(Criteria.ID); - Object keyword = c.getCriteria(Criteria.KEYWORD); + Object name = cmd.getDiskOfferingName(); + Object id = cmd.getId(); + Object keyword = cmd.getKeyword(); sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); @@ -7645,21 +7633,7 @@ public class ManagementServerImpl implements ManagementServer { @Override public List searchForAsyncJobs(ListAsyncJobsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { - Integer pageSize = cmd.getPageSize(); - Integer page = cmd.getPage(); - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - Filter searchFilter = new Filter(AsyncJobVO.class, "id", true, startIndex, Long.valueOf(pageSizeNum)); + Filter searchFilter = new Filter(AsyncJobVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _jobDao.createSearchBuilder(); Object accountId = null; @@ -8025,19 +7999,12 @@ public class ManagementServerImpl implements ManagementServer { User user = findUserById(userId); if ((user == null) || (user.getRemoved() != null)) throw new InvalidParameterValueException("Unable to find active user by id " + userId); - - Criteria c = new Criteria (); - c.addCriteria(Criteria.NAME, "cloud.identifier"); - List configs = searchForConfigurations(c, true); - - String cloudIdentifier; - if (configs == null || configs.size() != 1) { - cloudIdentifier = ""; - } else { - cloudIdentifier = configs.get(0).getValue(); + String cloudIdentifier = _configDao.getValue("cloud.identifier"); + if (cloudIdentifier == null) { + cloudIdentifier = ""; } - + String signature = ""; try { //get the user obj to get his secret key