You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/12/10 21:12:47 UTC
[7/8] git commit: committing changes related to SM information model
and relevant Rest APIs
committing changes related to SM information model and relevant Rest APIs
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/749d1d1e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/749d1d1e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/749d1d1e
Branch: refs/heads/master
Commit: 749d1d1e42045697da037ec35160bd3eb030f925
Parents: c00e48f
Author: Isuru <is...@wso2.com>
Authored: Wed Dec 11 01:38:52 2013 +0530
Committer: Isuru <is...@wso2.com>
Committed: Wed Dec 11 01:38:52 2013 +0530
----------------------------------------------------------------------
.../topology/model/TopologyClusterModel.java | 312 +++++++++++++++++--
.../rest/endpoint/services/ServiceUtils.java | 40 ++-
.../rest/endpoint/services/StratosAdmin.java | 32 ++
3 files changed, 356 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/749d1d1e/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterModel.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterModel.java b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterModel.java
index f70c0d2..52e75cc 100644
--- a/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterModel.java
+++ b/components/org.apache.stratos.adc.mgt/src/main/java/org/apache/stratos/adc/mgt/topology/model/TopologyClusterModel.java
@@ -23,18 +23,17 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.stratos.messaging.domain.topology.Cluster;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class TopologyClusterModel {
private static final Log log = LogFactory.getLog(TopologyClusterModel.class);
- private Map<TenantIdAndAliasTopologyKey, Cluster> tenantIdAndAliasTopologyKeyToClusterMap;
- private Map<Integer, List<Cluster>> tenantIdToClusterMap;
- private Map<TenantIdAndTypeTopologyKey , List<Cluster>> tenantIdAndTypeTopologyKeyToClusterMap;
+
+ private Map<Integer, Set<CartridgeTypeContext>> tenantIdToCartridgeTypeContextMap;
+ //private Map<TenantIdAndAliasTopologyKey, Cluster> tenantIdAndAliasTopologyKeyToClusterMap;
+ //private Map<Integer, List<Cluster>> tenantIdToClusterMap;
+ //private Map<TenantIdAndTypeTopologyKey , List<Cluster>> tenantIdAndTypeTopologyKeyToClusterMap;
private static TopologyClusterModel topologyClusterModel;
//locks
@@ -43,9 +42,10 @@ public class TopologyClusterModel {
private static volatile ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
private TopologyClusterModel() {
- tenantIdAndAliasTopologyKeyToClusterMap = new HashMap<TenantIdAndAliasTopologyKey, Cluster>();
- tenantIdAndTypeTopologyKeyToClusterMap = new HashMap<TenantIdAndTypeTopologyKey, List<Cluster>>();
- tenantIdToClusterMap = new HashMap<Integer, List<Cluster>>();
+ //tenantIdAndAliasTopologyKeyToClusterMap = new HashMap<TenantIdAndAliasTopologyKey, Cluster>();
+ //tenantIdAndTypeTopologyKeyToClusterMap = new HashMap<TenantIdAndTypeTopologyKey, List<Cluster>>();
+ //tenantIdToClusterMap = new HashMap<Integer, List<Cluster>>();
+ tenantIdToCartridgeTypeContextMap = new HashMap<Integer, Set<CartridgeTypeContext>>();
}
public static TopologyClusterModel getInstance () {
@@ -60,7 +60,7 @@ public class TopologyClusterModel {
return topologyClusterModel;
}
- public void addCluster (int tenantId, String cartridgeType, String subscriptionAlias, Cluster cluster) {
+ /*public void addCluster (int tenantId, String cartridgeType, String subscriptionAlias, Cluster cluster) {
List<Cluster> clusters;
writeLock.lock();
@@ -92,43 +92,317 @@ public class TopologyClusterModel {
} finally {
writeLock.unlock();
}
+ } */
+
+ public void addCluster (int tenantId, String cartridgeType, String subscriptionAlias, Cluster cluster) {
+
+ Set<CartridgeTypeContext> cartridgeTypeContextSet = null;
+ Set<SubscriptionAliasContext> subscriptionAliasContextSet = null;
+
+ writeLock.lock();
+ try {
+ //check if a set of CartridgeTypeContext instances already exist for given tenant Id
+ cartridgeTypeContextSet = tenantIdToCartridgeTypeContextMap.get(tenantId);
+ if(cartridgeTypeContextSet != null) {
+ CartridgeTypeContext cartridgeTypeContext = null;
+ //iterate through the set
+ Iterator<CartridgeTypeContext> typeCtxIterator = cartridgeTypeContextSet.iterator();
+ while (typeCtxIterator.hasNext()) {
+ //see if the set contains a CartridgeTypeContext instance with the given cartridge type
+ cartridgeTypeContext = typeCtxIterator.next();
+ if (cartridgeTypeContext.getType().equals(cartridgeType)){
+ //if so, get the SubscriptionAliasContext set
+ subscriptionAliasContextSet = cartridgeTypeContext.getSubscriptionAliasContextSet();
+ break;
+ }
+ }
+ //check if a SubscriptionAliasContext set is not found
+ if(subscriptionAliasContextSet == null) {
+ //no SubscriptionAliasContext instance
+ //create a new SubscriptionAliasContext instance
+ SubscriptionAliasContext subscriptionAliasContext = new SubscriptionAliasContext(subscriptionAlias,
+ cluster);
+ //create a SubscriptionAliasContext set
+ subscriptionAliasContextSet = new HashSet<SubscriptionAliasContext>();
+ //add the created SubscriptionAliasContext instance to SubscriptionAliasContext set
+ subscriptionAliasContextSet.add(subscriptionAliasContext);
+ //set it to the CartridgeTypeContext instance
+ cartridgeTypeContext = new CartridgeTypeContext(cartridgeType);
+ cartridgeTypeContext.setSubscriptionAliasContextSet(subscriptionAliasContextSet);
+ //add to the cartridgeTypeContextSet
+ cartridgeTypeContextSet.add(cartridgeTypeContext);
+
+ } else {
+ //iterate through the set
+ Iterator<SubscriptionAliasContext> aliasIterator = subscriptionAliasContextSet.iterator();
+ while (aliasIterator.hasNext()) {
+ //see if the set contains a SubscriptionAliasContext instance with the given alias
+ SubscriptionAliasContext subscriptionAliasContext = aliasIterator.next();
+ if (subscriptionAliasContext.getSubscriptionAlias().equals(subscriptionAlias)) {
+ //remove the existing one
+ aliasIterator.remove();
+ break;
+ }
+ }
+ //now, add the new cluster object
+ subscriptionAliasContextSet.add(new SubscriptionAliasContext(subscriptionAlias, cluster));
+ }
+
+ } else {
+ //no entries for this tenant, go from down to top creating relevant objects and populating them
+ //create a new SubscriptionAliasContext instance
+ SubscriptionAliasContext subscriptionAliasContext = new SubscriptionAliasContext(subscriptionAlias,
+ cluster);
+ //create a SubscriptionAliasContext set
+ subscriptionAliasContextSet = new HashSet<SubscriptionAliasContext>();
+ //add the created SubscriptionAliasContext instance to SubscriptionAliasContext set
+ subscriptionAliasContextSet.add(subscriptionAliasContext);
+
+ //create a new CartridgeTypeContext instance
+ CartridgeTypeContext cartridgeTypeContext = new CartridgeTypeContext(cartridgeType);
+ //link the SubscriptionAliasContextSet to it
+ cartridgeTypeContext.setSubscriptionAliasContextSet(subscriptionAliasContextSet);
+
+ //Create CartridgeTypeContext instance
+ cartridgeTypeContextSet = new HashSet<CartridgeTypeContext>();
+ //link the SubscriptionAliasContext set to CartridgeTypeContext instance
+ cartridgeTypeContext.setSubscriptionAliasContextSet(subscriptionAliasContextSet);
+
+ //link the CartridgeTypeContext set to the [tenant Id -> CartridgeTypeContext] map
+ tenantIdToCartridgeTypeContextMap.put(tenantId, cartridgeTypeContextSet);
+ }
+
+ } finally {
+ writeLock.unlock();
+ }
}
- public Cluster getCluster (int tenantId, String subscriptionAlias) {
+ public Cluster getCluster (int tenantId, String cartridgeType, String subscriptionAlias) {
+
+ Set<CartridgeTypeContext> cartridgeTypeContextSet = null;
+ Set<SubscriptionAliasContext> subscriptionAliasContextSet = null;
readLock.lock();
try {
- return tenantIdAndAliasTopologyKeyToClusterMap.get(new TenantIdAndAliasTopologyKey(tenantId, subscriptionAlias));
+ //check if a set of CartridgeTypeContext instances already exist for given tenant Id
+ cartridgeTypeContextSet = tenantIdToCartridgeTypeContextMap.get(tenantId);
+ if(cartridgeTypeContextSet != null) {
+ CartridgeTypeContext cartridgeTypeContext = null;
+ //iterate through the set
+ Iterator<CartridgeTypeContext> typeCtxIterator = cartridgeTypeContextSet.iterator();
+ while (typeCtxIterator.hasNext()) {
+ //see if the set contains a CartridgeTypeContext instance with the given cartridge type
+ cartridgeTypeContext = typeCtxIterator.next();
+ if (cartridgeTypeContext.getType().equals(cartridgeType)){
+ //if so, get the SubscriptionAliasContext set
+ subscriptionAliasContextSet = cartridgeTypeContext.getSubscriptionAliasContextSet();
+ break;
+ }
+ }
+ if(subscriptionAliasContextSet != null) {
+ //iterate through the set
+ Iterator<SubscriptionAliasContext> aliasIterator = subscriptionAliasContextSet.iterator();
+ while (aliasIterator.hasNext()) {
+ //see if the set contains a SubscriptionAliasContext instance with the given alias
+ SubscriptionAliasContext subscriptionAliasContext = aliasIterator.next();
+ if (subscriptionAliasContext.getSubscriptionAlias().equals(subscriptionAlias)) {
+ return subscriptionAliasContext.getCluster();
+ }
+ }
+ }
+ }
} finally {
readLock.unlock();
}
+
+ return null;
}
- public List<Cluster> getClusters (int tenantId, String cartridgeType) {
+ public Set<Cluster> getClusters (int tenantId, String cartridgeType) {
+
+ Set<CartridgeTypeContext> cartridgeTypeContextSet = null;
+ Set<SubscriptionAliasContext> subscriptionAliasContextSet = null;
+ Set<Cluster> clusterSet = null;
readLock.lock();
try {
- return tenantIdAndTypeTopologyKeyToClusterMap.get(new TenantIdAndTypeTopologyKey(tenantId, cartridgeType));
+ cartridgeTypeContextSet = tenantIdToCartridgeTypeContextMap.get(tenantId);
+ if(cartridgeTypeContextSet != null) {
+ //iterate through the set
+ Iterator<CartridgeTypeContext> typeCtxIterator = cartridgeTypeContextSet.iterator();
+ while (typeCtxIterator.hasNext()) {
+ //iterate and get each of SubscriptionAliasContext sets
+ CartridgeTypeContext cartridgeTypeContext = typeCtxIterator.next();
+ subscriptionAliasContextSet = cartridgeTypeContext.getSubscriptionAliasContextSet();
+
+ if (subscriptionAliasContextSet != null) {
+ //iterate and convert to Cluster set
+ Iterator<SubscriptionAliasContext> aliasCtxIterator = subscriptionAliasContextSet.iterator();
+ clusterSet = new HashSet<Cluster>();
+ while (aliasCtxIterator.hasNext()) {
+ clusterSet.add(aliasCtxIterator.next().getCluster());
+ }
+ }
+ }
+ }
} finally {
readLock.unlock();
}
+
+ return clusterSet;
}
- public List<Cluster> getClusters (int tenantId) {
+ public Set<Cluster> getClusters (int tenantId) {
+
+ Set<CartridgeTypeContext> cartridgeTypeContextSet = null;
+ Set<SubscriptionAliasContext> subscriptionAliasContextSet = null;
+ Set<Cluster> clusterSet = null;
readLock.lock();
try {
- return tenantIdToClusterMap.get(tenantId);
+ cartridgeTypeContextSet = tenantIdToCartridgeTypeContextMap.get(tenantId);
+ if(cartridgeTypeContextSet != null) {
+ CartridgeTypeContext cartridgeTypeContext = null;
+ //iterate through the set
+ Iterator<CartridgeTypeContext> typeCtxIterator = cartridgeTypeContextSet.iterator();
+ while (typeCtxIterator.hasNext()) {
+ //see if the set contains a CartridgeTypeContext instance with the given cartridge type
+ }
+
+ if (subscriptionAliasContextSet != null) {
+ //iterate and convert to Cluster set
+ Iterator<SubscriptionAliasContext> aliasCtxIterator = subscriptionAliasContextSet.iterator();
+ clusterSet = new HashSet<Cluster>();
+ while (aliasCtxIterator.hasNext()) {
+ clusterSet.add(aliasCtxIterator.next().getCluster());
+ }
+ }
+ }
} finally {
readLock.unlock();
}
+
+ return clusterSet;
}
- public void removeCluster (int tenantId, String subscriptionAlias) {
- tenantIdAndAliasTopologyKeyToClusterMap.remove(new TenantIdAndAliasTopologyKey(tenantId, subscriptionAlias));
+ public void removeCluster (int tenantId, String cartridgeType, String subscriptionAlias) {
+
+ Set<CartridgeTypeContext> cartridgeTypeContextSet = null;
+ Set<SubscriptionAliasContext> subscriptionAliasContextSet = null;
+
+ writeLock.lock();
+ try {
+ //check if a set of CartridgeTypeContext instances already exist for given tenant Id
+ cartridgeTypeContextSet = tenantIdToCartridgeTypeContextMap.get(tenantId);
+ if(cartridgeTypeContextSet != null) {
+ CartridgeTypeContext cartridgeTypeContext = null;
+ //iterate through the set
+ Iterator<CartridgeTypeContext> typeCtxIterator = cartridgeTypeContextSet.iterator();
+ while (typeCtxIterator.hasNext()) {
+ //see if the set contains a CartridgeTypeContext instance with the given cartridge type
+ cartridgeTypeContext = typeCtxIterator.next();
+ if (cartridgeTypeContext.getType().equals(cartridgeType)){
+ //if so, get the SubscriptionAliasContext set
+ subscriptionAliasContextSet = cartridgeTypeContext.getSubscriptionAliasContextSet();
+ break;
+ }
+ }
+ if(subscriptionAliasContextSet != null) {
+ //iterate through the set
+ Iterator<SubscriptionAliasContext> aliasIterator = subscriptionAliasContextSet.iterator();
+ while (aliasIterator.hasNext()) {
+ //see if the set contains a SubscriptionAliasContext instance with the given alias
+ SubscriptionAliasContext subscriptionAliasContext = aliasIterator.next();
+ if (subscriptionAliasContext.getSubscriptionAlias().equals(subscriptionAlias)) {
+ //remove the existing one
+ aliasIterator.remove();
+ break;
+ }
+ }
+ }
+ }
+
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ private class CartridgeTypeContext {
+
+ private String type;
+ private Set<SubscriptionAliasContext> subscriptionAliasContextSet;
+
+ public CartridgeTypeContext (String type) {
+ this.type = type;
+ }
+
+ public void setSubscriptionAliasContextSet (Set<SubscriptionAliasContext> subscriptionAliasContextSet) {
+ this.subscriptionAliasContextSet = subscriptionAliasContextSet;
+ }
+
+ public String getType () {
+ return type;
+ }
+
+ public Set<SubscriptionAliasContext> getSubscriptionAliasContextSet () {
+ return subscriptionAliasContextSet;
+ }
+
+ public boolean equals(Object other) {
+
+ if(this == other) {
+ return true;
+ }
+ if(!(other instanceof CartridgeTypeContext)) {
+ return false;
+ }
+
+ CartridgeTypeContext that = (CartridgeTypeContext)other;
+ return this.type.equals(that.type);
+ }
+
+ public int hashCode () {
+ return type.hashCode();
+ }
+ }
+
+ private class SubscriptionAliasContext {
+
+ private String subscriptionAlias;
+ private Cluster cluster;
+
+ public SubscriptionAliasContext(String subscriptionAlias, Cluster cluster) {
+ this.subscriptionAlias = subscriptionAlias;
+ this.cluster = cluster;
+ }
+
+ public String getSubscriptionAlias () {
+ return subscriptionAlias;
+ }
+
+ public Cluster getCluster () {
+ return cluster;
+ }
+
+ public boolean equals(Object other) {
+
+ if(this == other) {
+ return true;
+ }
+ if(!(other instanceof SubscriptionAliasContext)) {
+ return false;
+ }
+
+ SubscriptionAliasContext that = (SubscriptionAliasContext)other;
+ return this.subscriptionAlias.equals(that.subscriptionAlias);
+ }
+
+ public int hashCode () {
+ return subscriptionAlias.hashCode();
+ }
}
private class TenantIdAndAliasTopologyKey {
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/749d1d1e/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index a83a594..632684a 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -31,32 +31,27 @@ import org.apache.stratos.adc.mgt.exception.*;
import org.apache.stratos.adc.mgt.internal.DataHolder;
import org.apache.stratos.adc.mgt.manager.CartridgeSubscriptionManager;
import org.apache.stratos.adc.mgt.subscription.CartridgeSubscription;
+import org.apache.stratos.adc.mgt.topology.model.TopologyClusterModel;
import org.apache.stratos.adc.mgt.utils.ApplicationManagementUtil;
import org.apache.stratos.adc.mgt.utils.CartridgeConstants;
import org.apache.stratos.adc.mgt.utils.PersistenceManager;
import org.apache.stratos.adc.topology.mgt.service.TopologyManagementService;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
import org.apache.stratos.cloud.controller.pojo.CartridgeConfig;
import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
import org.apache.stratos.cloud.controller.pojo.LoadbalancerConfig;
import org.apache.stratos.cloud.controller.pojo.Properties;
+import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.rest.endpoint.Constants;
-import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean;
import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition;
import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup;
import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
-import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
-import org.apache.stratos.rest.endpoint.bean.cartridge.definition.LoadBalancerBean;
import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter;
import org.apache.stratos.rest.endpoint.exception.RestAPIException;
import org.wso2.carbon.context.PrivilegedCarbonContext;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
+import java.util.*;
import java.util.regex.Pattern;
public class ServiceUtils {
@@ -787,6 +782,33 @@ public class ServiceUtils {
}
+
+ public static Cluster getCluster (String cartridgeType, String subscriptionAlias, ConfigurationContext configurationContext) {
+
+ return TopologyClusterModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext)
+ ,cartridgeType , subscriptionAlias);
+ }
+
+ public static Cluster[] getClustersForTenant (ConfigurationContext configurationContext) {
+
+ Set<Cluster> clusterSet = TopologyClusterModel.getInstance().getClusters(ApplicationManagementUtil.
+ getTenantId(configurationContext));
+
+ return (clusterSet != null && clusterSet.size() > 0 ) ?
+ clusterSet.toArray(new Cluster[clusterSet.size()]) : new Cluster[0];
+
+ }
+
+ public static Cluster[] getClustersForTenantAndCartridgeType (ConfigurationContext configurationContext,
+ String cartridgeType) {
+
+ Set<Cluster> clusterSet = TopologyClusterModel.getInstance().getClusters(ApplicationManagementUtil.
+ getTenantId(configurationContext), cartridgeType);
+
+ return (clusterSet != null && clusterSet.size() > 0 ) ?
+ clusterSet.toArray(new Cluster[clusterSet.size()]) : new Cluster[0];
+ }
+
static void unsubscribe(String alias, String tenantDomain) throws ADCException, NotSubscribedException {
cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias);
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/749d1d1e/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index 0ca7ebf..22029fa 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -27,6 +27,7 @@ import org.apache.stratos.common.beans.TenantInfoBean;
import org.apache.stratos.common.exception.StratosException;
import org.apache.stratos.common.util.ClaimsMgtUtil;
import org.apache.stratos.common.util.CommonUtil;
+import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.rest.endpoint.ServiceHolder;
import org.apache.stratos.rest.endpoint.annotation.AuthorizationAction;
import org.apache.stratos.rest.endpoint.annotation.SuperTenantService;
@@ -291,6 +292,37 @@ public class StratosAdmin extends AbstractAdmin {
}
}
+ @GET
+ @Path("/cluster")
+ @Produces("application/json")
+ @Consumes("application/json")
+ @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+ public Cluster[] getClustersForTenant() throws ADCException {
+
+ return ServiceUtils.getClustersForTenant(getConfigContext());
+ }
+
+ @GET
+ @Path("/cluster/{cartridgeType}")
+ @Produces("application/json")
+ @Consumes("application/json")
+ @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+ public Cluster[] getClusters(@PathParam("cartridgeType") String cartridgeType) throws ADCException {
+
+ return ServiceUtils.getClustersForTenantAndCartridgeType(getConfigContext(), cartridgeType);
+ }
+
+ @GET
+ @Path("/cluster/{cartridgeType}/{subscriptionAlias}")
+ @Produces("application/json")
+ @Consumes("application/json")
+ @AuthorizationAction("/permission/protected/manage/monitor/tenants")
+ public Cluster getCluster(@PathParam("cartridgeType") String cartridgeType,
+ @PathParam("subscriptionAlias") String subscriptionAlias) throws ADCException {
+
+ return ServiceUtils.getCluster(cartridgeType, subscriptionAlias, getConfigContext());
+ }
+
@POST
@Path("/cartridge/unsubscribe")
@Consumes("application/json")