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")

Reply via email to