Updated Branches: refs/heads/master fc0fc65b9 -> 0a9729fec
fixing STRATOS-434 Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/8c80d5ac Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/8c80d5ac Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/8c80d5ac Branch: refs/heads/master Commit: 8c80d5acaebebc0881c8913e0accded22ed7da9d Parents: ca578e3 Author: Isuru <[email protected]> Authored: Wed Feb 12 13:53:05 2014 +0530 Committer: Isuru <[email protected]> Committed: Wed Feb 12 13:53:05 2014 +0530 ---------------------------------------------------------------------- .../service/ServiceDeploymentManager.java | 24 +++++ .../manager/persistence/PersistenceManager.java | 2 + .../RegistryBasedPersistenceManager.java | 95 ++++++++++++++++++++ .../DataInsertionAndRetrievalManager.java | 5 ++ .../bean/util/converter/PojoConverter.java | 25 ++++++ .../rest/endpoint/services/ServiceUtils.java | 66 +++++++++----- .../rest/endpoint/services/StratosAdmin.java | 21 +++++ 7 files changed, 215 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java index b955c30..b5e3889 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java @@ -328,6 +328,30 @@ public class ServiceDeploymentManager { } } + public Service getService (String type) throws ADCException { + + try { + return new DataInsertionAndRetrievalManager().getService(type); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in getting Service for type " + type; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } + } + + public Collection<Service> getServices () throws ADCException { + + try { + return new DataInsertionAndRetrievalManager().getServices(); + + } catch (PersistenceManagerException e) { + String errorMsg = "Error in getting deployed Services"; + log.error(errorMsg, e); + throw new ADCException(errorMsg, e); + } + } + public void undeployService (String type) throws ADCException { DataInsertionAndRetrievalManager dataInsertionAndRetrievalManager = new DataInsertionAndRetrievalManager(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java index 61aa70d..d971273 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/PersistenceManager.java @@ -41,6 +41,8 @@ public abstract class PersistenceManager { public abstract void persistService (Service service) throws PersistenceManagerException; + public abstract Collection<Service> getServices () throws PersistenceManagerException; + public abstract Service getService (String cartridgeType) throws PersistenceManagerException; public abstract void removeService (String cartridgeType) throws PersistenceManagerException; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java index f3e6f3e..0070e82 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/persistence/RegistryBasedPersistenceManager.java @@ -256,6 +256,30 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { } } + + @Override + public Collection<Service> getServices() throws PersistenceManagerException { + + int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); + if (tenantId != MultitenantConstants.SUPER_TENANT_ID) { + // TODO: This is only a workaround. Proper fix is to write to tenant registry + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext carbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + carbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); + + return traverseAndGetDeloyedServices(STRATOS_MANAGER_REOSURCE + SERVICES); + + } finally { + PrivilegedCarbonContext.endTenantFlow(); + } + + } else { + return traverseAndGetDeloyedServices(STRATOS_MANAGER_REOSURCE + SERVICES); + } + } + @Override public Service getService(String cartridgeType) throws PersistenceManagerException { @@ -279,6 +303,77 @@ public class RegistryBasedPersistenceManager extends PersistenceManager { } } + public Collection<Service> traverseAndGetDeloyedServices (String resourcePath) throws PersistenceManagerException { + + if (log.isDebugEnabled()) { + log.debug("Root resource path: " + resourcePath); + } + + Object resourceObj; + + try { + resourceObj = RegistryManager.getInstance().retrieve(resourcePath); + + } catch (RegistryException e) { + throw new PersistenceManagerException(e); + } + + Collection<Service> services = new ArrayList<Service>(); + + if (resourceObj == null) { + // there is no resource at the given path + return null; + + } else if (resourceObj instanceof String[]) { + + // get the paths for all Service instances + String[] serviceResourcePaths = (String[]) resourceObj; + if (log.isDebugEnabled()) { + for (String retrievedResourcePath : serviceResourcePaths) { + log.debug("Retrieved resource sub-path " + retrievedResourcePath); + } + } + + // traverse the paths recursively + for (String serviceResourcePath : serviceResourcePaths) { + + if (log.isDebugEnabled()) { + log.debug("Traversing resource path " + serviceResourcePath); + } + + services.addAll(traverseAndGetDeloyedServices(serviceResourcePath)); + } + + } else { + // De-serialize + Object serviceObj; + + try { + serviceObj = Deserializer.deserializeFromByteArray((byte[]) resourceObj); + + } catch (Exception e) { + // issue might be de-serializing only this object, therefore log and continue without throwing + log.error("Error while de-serializing the object retrieved from " + resourcePath, e); + return null; + } + + if (serviceObj != null && serviceObj instanceof Service) { + + Service deserilizedService = (Service) serviceObj; + if (log.isDebugEnabled()) { + log.debug("Successfully de-serialized Service: " + deserilizedService.toString()); + } + + services.add(deserilizedService); + + } + } + + // remove any nulls + services.removeAll(Collections.singleton(null)); + return services; + } + public Service getDeployedService (String cartridgeType) throws PersistenceManagerException { Object byteObj; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java index ff6c669..3574f77 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/retriever/DataInsertionAndRetrievalManager.java @@ -218,6 +218,11 @@ public class DataInsertionAndRetrievalManager { persistenceManager.persistService(service); } + public Collection<Service> getServices() throws PersistenceManagerException { + + return persistenceManager.getServices(); + } + public Service getService (String cartridgeType) throws PersistenceManagerException { return persistenceManager.getService(cartridgeType); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java index 8300426..bf89549 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java @@ -20,6 +20,7 @@ package org.apache.stratos.rest.endpoint.bean.util.converter; import org.apache.stratos.cloud.controller.pojo.*; +import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.Partition; import org.apache.stratos.rest.endpoint.bean.autoscaler.partition.PartitionGroup; @@ -30,6 +31,7 @@ import org.apache.stratos.rest.endpoint.bean.topology.Member; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; public class PojoConverter { @@ -590,4 +592,27 @@ public class PojoConverter { return partitionList; } + + public static ServiceDefinitionBean convertToServiceDefinitionBean (Service service) { + + ServiceDefinitionBean serviceDefinitionBean = new ServiceDefinitionBean(); + serviceDefinitionBean.setCartridgeType(service.getType()); + serviceDefinitionBean.setTenantRange(service.getTenantRange()); + serviceDefinitionBean.setClusterDomain(service.getClusterId()); + serviceDefinitionBean.setAutoscalingPolicyName(service.getAutoscalingPolicyName()); + serviceDefinitionBean.setDeploymentPolicyName(service.getDeploymentPolicyName()); + + return serviceDefinitionBean; + } + + public static List<ServiceDefinitionBean> convertToServiceDefinitionBeans (Collection<Service> services) { + + List<ServiceDefinitionBean> serviceDefinitionBeans = new ArrayList<ServiceDefinitionBean>(); + + for (Service service : services) { + serviceDefinitionBeans.add(convertToServiceDefinitionBean(service)); + } + + return serviceDefinitionBeans; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/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 9c42e5b..49afe32 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 @@ -18,40 +18,20 @@ package org.apache.stratos.rest.endpoint.services; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.Set; -import java.util.regex.Pattern; - import org.apache.axis2.AxisFault; import org.apache.axis2.context.ConfigurationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.*; import org.apache.stratos.cloud.controller.pojo.Properties; -import org.apache.stratos.cloud.controller.pojo.Property; import org.apache.stratos.manager.client.AutoscalerServiceClient; import org.apache.stratos.manager.client.CloudControllerServiceClient; +import org.apache.stratos.manager.deploy.service.Service; import org.apache.stratos.manager.deploy.service.ServiceDeploymentManager; import org.apache.stratos.manager.dto.Cartridge; import org.apache.stratos.manager.dto.SubscriptionInfo; -import org.apache.stratos.manager.exception.ADCException; -import org.apache.stratos.manager.exception.AlreadySubscribedException; -import org.apache.stratos.manager.exception.DuplicateCartridgeAliasException; -import org.apache.stratos.manager.exception.InvalidCartridgeAliasException; -import org.apache.stratos.manager.exception.InvalidRepositoryException; -import org.apache.stratos.manager.exception.NotSubscribedException; -import org.apache.stratos.manager.exception.PolicyException; -import org.apache.stratos.manager.exception.RepositoryCredentialsRequiredException; -import org.apache.stratos.manager.exception.RepositoryRequiredException; -import org.apache.stratos.manager.exception.RepositoryTransportException; -import org.apache.stratos.manager.exception.UnregisteredCartridgeException; +import org.apache.stratos.manager.exception.*; import org.apache.stratos.manager.manager.CartridgeSubscriptionManager; import org.apache.stratos.manager.subscription.CartridgeSubscription; import org.apache.stratos.manager.subscription.DataCartridgeSubscription; @@ -67,9 +47,13 @@ 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.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean; +import org.apache.stratos.rest.endpoint.bean.cartridge.definition.ServiceDefinitionBean; import org.apache.stratos.rest.endpoint.bean.util.converter.PojoConverter; import org.apache.stratos.rest.endpoint.exception.RestAPIException; +import java.util.*; +import java.util.regex.Pattern; + public class ServiceUtils { private static Log log = LogFactory.getLog(ServiceUtils.class); private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager(); @@ -547,6 +531,42 @@ public class ServiceUtils { } } + public static List<ServiceDefinitionBean> getdeployedServiceInformation () throws RestAPIException { + + Collection<Service> services = null; + + try { + services = serviceDeploymentManager.getServices(); + + } catch (ADCException e) { + throw new RestAPIException("Error in getting Service Cluster details", e); + } + + if (services != null && !services.isEmpty()) { + return PojoConverter.convertToServiceDefinitionBeans(services); + } + + return null; + } + + public static ServiceDefinitionBean getDeployedServiceInformation (String type) throws RestAPIException { + + Service service = null; + + try { + service = serviceDeploymentManager.getService(type); + + } catch (ADCException e) { + throw new RestAPIException("Error in getting Service Cluster information for type " + type, e); + } + + if (service != null) { + return PojoConverter.convertToServiceDefinitionBean(service); + } + + return null; + } + static List<Cartridge> getSubscriptions (String cartridgeSearchString, ConfigurationContext configurationContext) throws ADCException { List<Cartridge> cartridges = new ArrayList<Cartridge>(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/8c80d5ac/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 530bc74..4437a75 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 @@ -792,6 +792,27 @@ public class StratosAdmin extends AbstractAdmin { serviceDefinitionBean.getTenantRange()); } + @GET + @Path("/service") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + public ServiceDefinitionBean[] getServices() throws RestAPIException { + List<ServiceDefinitionBean> serviceDefinitionBeans = ServiceUtils.getdeployedServiceInformation(); + return serviceDefinitionBeans == null || serviceDefinitionBeans.isEmpty() ? new ServiceDefinitionBean[0] : + serviceDefinitionBeans.toArray(new ServiceDefinitionBean[serviceDefinitionBeans.size()]); + } + + @GET + @Path("/service/{serviceType}") + @Produces("application/json") + @Consumes("application/json") + @AuthorizationAction("/permission/protected/manage/monitor/tenants") + public ServiceDefinitionBean getService(@PathParam("serviceType") String serviceType)throws RestAPIException { + + return ServiceUtils.getDeployedServiceInformation(serviceType); + } + @DELETE @Path("/service/definition/{serviceType}") @Produces("application/json")
