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 2014/03/27 13:29:15 UTC

[09/10] git commit: STRATOS-561 Added CLI command and back-end implementation

STRATOS-561 Added CLI command and back-end implementation


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/bf70f20f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/bf70f20f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/bf70f20f

Branch: refs/heads/master
Commit: bf70f20f9198b1f32b07eea85401e5e1c801df5a
Parents: 5e2fac6
Author: M. Isuru Tharanga Chrishantha Perera <is...@apache.org>
Authored: Thu Mar 27 17:58:28 2014 +0530
Committer: M. Isuru Tharanga Chrishantha Perera <is...@apache.org>
Committed: Thu Mar 27 17:58:28 2014 +0530

----------------------------------------------------------------------
 .../stratos/cli/RestCommandLineService.java     | 27 ++++++++++++++
 .../apache/stratos/cli/StratosApplication.java  |  5 ++-
 .../stratos/cli/commands/SyncCommand.java       |  8 ++--
 .../repository/RepositoryNotification.java      | 39 +++++++++++---------
 .../rest/endpoint/services/ServiceUtils.java    | 15 ++++++++
 .../rest/endpoint/services/StratosAdmin.java    | 11 ++++++
 6 files changed, 82 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
index 61c5314..b49f1c9 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java
@@ -82,6 +82,7 @@ public class RestCommandLineService {
     private final String addTenantEndPoint = "/stratos/admin/tenant";
     private final String unsubscribeTenantEndPoint = "/stratos/admin/cartridge/unsubscribe";
     private final String cartridgeDeploymentEndPoint = "/stratos/admin/cartridge/definition";
+    private final String syncEndPoint = "/stratos/admin/sync";
     private final String partitionDeploymentEndPoint = "/stratos/admin/policy/deployment/partition";
     private final String autoscalingPolicyDeploymentEndPoint = "/stratos/admin/policy/autoscale";
     private final String deploymentPolicyDeploymentEndPoint = "/stratos/admin/policy/deployment";
@@ -1648,6 +1649,32 @@ public class RestCommandLineService {
             httpClient.getConnectionManager().shutdown();
         }
     }
+    
+	public void sync(String alias) throws CommandException {
+		DefaultHttpClient httpClient = new DefaultHttpClient();
+		try {
+			HttpResponse response = restClient.doPost(httpClient, restClient.getBaseURL() + syncEndPoint, alias);
+
+			String responseCode = "" + response.getStatusLine().getStatusCode();
+
+			if (responseCode.equals(CliConstants.RESPONSE_OK)) {
+				System.out.format("Synchronizing repository for alias: %s%n", alias);
+				return;
+			} else {
+				GsonBuilder gsonBuilder = new GsonBuilder();
+				Gson gson = gsonBuilder.create();
+				String resultString = getHttpResponseString(response);
+				ExceptionMapper exception = gson.fromJson(resultString, ExceptionMapper.class);
+				System.out.println(exception);
+				return;
+			}
+
+		} catch (Exception e) {
+			handleException("Exception when synchronizing repository for alias: " + alias, e);
+		} finally {
+			httpClient.getConnectionManager().shutdown();
+		}
+	}
 
     // This class convert JSON string to deploymentpolicylist object
     private class DeploymentPolicyList {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
index 9d435d7..8a888ee 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/StratosApplication.java
@@ -64,6 +64,7 @@ import org.apache.stratos.cli.commands.PartitionCommand;
 import org.apache.stratos.cli.commands.PartitionDeploymentCommand;
 import org.apache.stratos.cli.commands.SubscribeCommand;
 import org.apache.stratos.cli.commands.SubscribedCartridgeInfoCommand;
+import org.apache.stratos.cli.commands.SyncCommand;
 import org.apache.stratos.cli.commands.UndeployCartridgeDefinitionCommand;
 import org.apache.stratos.cli.commands.UndeployServiceDefinitionCommand;
 import org.apache.stratos.cli.commands.UnsubscribeCommand;
@@ -206,8 +207,8 @@ public class StratosApplication extends CommandLineApplication<StratosCommandCon
 		//command = new RemoveDomainMappingCommand();
 		//commands.put(command.getName(), command);
 		
-		//command = new SyncCommand();
-		//commands.put(command.getName(), command);
+		command = new SyncCommand();
+		commands.put(command.getName(), command);
 		
 		//command = new PoliciesCommand();
 		//commands.put(command.getName(), command);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SyncCommand.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SyncCommand.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SyncCommand.java
index 7c32a27..f866813 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SyncCommand.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/commands/SyncCommand.java
@@ -19,13 +19,13 @@
 package org.apache.stratos.cli.commands;
 
 import org.apache.commons.cli.Options;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.stratos.cli.Command;
-import org.apache.stratos.cli.CommandLineService;
+import org.apache.stratos.cli.RestCommandLineService;
 import org.apache.stratos.cli.StratosCommandContext;
 import org.apache.stratos.cli.exception.CommandException;
 import org.apache.stratos.cli.utils.CliConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SyncCommand implements Command<StratosCommandContext> {
 
@@ -60,7 +60,7 @@ public class SyncCommand implements Command<StratosCommandContext> {
 				logger.debug("Synchronizing repository for alias {}", alias);
 			}
 
-			CommandLineService.getInstance().sync(alias);
+			RestCommandLineService.getInstance().sync(alias);
 			return CliConstants.SUCCESSFUL_CODE;
 		} else {
 			context.getStratosApplication().printUsage(getName());

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/repository/RepositoryNotification.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/repository/RepositoryNotification.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/repository/RepositoryNotification.java
index 6b543d2..a814055 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/repository/RepositoryNotification.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/repository/RepositoryNotification.java
@@ -48,24 +48,29 @@ public class RepositoryNotification {
             }
 
             for (CartridgeSubscription cartridgeSubscription : cartridgeSubscriptions) {
-
-                if (cartridgeSubscription.getRepository() != null) {
-                    InstanceNotificationPublisher publisher = new InstanceNotificationPublisher();
-                    publisher.sendArtifactUpdateEvent(cartridgeSubscription.getRepository(), String.valueOf(cartridgeSubscription.getCluster().getId()),
-                            String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
-
-                    if (log.isDebugEnabled()) {
-                        log.debug("Git pull request from " + cartridgeSubscription.getRepository() + "repository, for the tenant " +
-                                String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
-                    }
-
-                } else {
-                    if(log.isDebugEnabled()) {
-                        log.debug("No repository found for subscription with alias: " + cartridgeSubscription.getAlias() + ", type: " + cartridgeSubscription.getType()+
-                                ". Not sending the Artifact Updated event");
-                    }
-                }
+            	updateRepository(cartridgeSubscription);
             }
         }
     }
+    
+	public void updateRepository(CartridgeSubscription cartridgeSubscription) {
+		if (cartridgeSubscription.getRepository() != null) {
+			InstanceNotificationPublisher publisher = new InstanceNotificationPublisher();
+			publisher.sendArtifactUpdateEvent(cartridgeSubscription.getRepository(),
+					String.valueOf(cartridgeSubscription.getCluster().getId()),
+					String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
+
+			if (log.isDebugEnabled()) {
+				log.debug("Git pull request from " + cartridgeSubscription.getRepository()
+						+ "repository, for the tenant "
+						+ String.valueOf(cartridgeSubscription.getSubscriber().getTenantId()));
+			}
+
+		} else {
+			if (log.isDebugEnabled()) {
+				log.debug("No repository found for subscription with alias: " + cartridgeSubscription.getAlias()
+						+ ", type: " + cartridgeSubscription.getType() + ". Not sending the Artifact Updated event");
+			}
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/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 ce3bcf1..54eb15b 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
@@ -954,6 +954,10 @@ public class ServiceUtils {
         }
         return true;
     }
+    
+    public static CartridgeSubscription getCartridgeSubscription(String alias, ConfigurationContext configurationContext) {
+    	return cartridgeSubsciptionManager.getCartridgeSubscription(ApplicationManagementUtil.getTenantId(configurationContext), alias);
+    }
 
     static SubscriptionInfo subscribeToCartridge (CartridgeInfoBean cartridgeInfoBean, ConfigurationContext configurationContext, String tenantUsername,
                                                   String tenantDomain) throws RestAPIException {
@@ -1164,5 +1168,16 @@ public class ServiceUtils {
             throw new RestAPIException(msg, e);
         }
     }
+    
+    static void sendRepositoryNotification(CartridgeSubscription cartridgeSubscription) throws RestAPIException {
+        try {
+            RepositoryNotification repoNotification = new RepositoryNotification();
+            repoNotification.updateRepository(cartridgeSubscription);
+        } catch (Exception e) {
+            String msg = "Failed to get git repository notifications. Cause : " + e.getMessage();
+            log.error(msg, e);
+            throw new RestAPIException(msg, e);
+        }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/bf70f20f/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 8198848..5f411dc 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
@@ -26,6 +26,7 @@ import org.apache.stratos.common.util.ClaimsMgtUtil;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.dto.Cartridge;
 import org.apache.stratos.manager.dto.SubscriptionInfo;
+import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.rest.endpoint.ServiceHolder;
 import org.apache.stratos.rest.endpoint.Utils;
 import org.apache.stratos.rest.endpoint.annotation.AuthorizationAction;
@@ -61,6 +62,7 @@ import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
@@ -961,6 +963,15 @@ public class StratosAdmin extends AbstractAdmin {
 
         ServiceUtils.getGitRepositoryNotification(payload);
     }
+    
+	@POST
+	@Path("/sync")
+	@Consumes("application/json")
+	@AuthorizationAction("/permission/protected/manage/monitor/tenants")
+	public void synchronizeRepository(String alias) throws RestAPIException {
+		CartridgeSubscription cartridgeSubscription = ServiceUtils.getCartridgeSubscription(alias, getConfigContext());
+		ServiceUtils.sendRepositoryNotification(cartridgeSubscription);
+	}
 
     private List<TenantInfoBean> getAllTenants() throws RestAPIException {
         TenantManager tenantManager = ServiceHolder.getTenantManager();