Updated Branches:
  refs/heads/master 75cabdc3b -> d50cf4f0a

Implemented functionality to read user-data.txt


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

Branch: refs/heads/master
Commit: d50cf4f0a8a565c847436af9e7e7359aa6b75cba
Parents: 75cabdc
Author: Imesh Gunaratne <[email protected]>
Authored: Fri Oct 25 19:21:54 2013 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Fri Oct 25 19:21:54 2013 +0530

----------------------------------------------------------------------
 products/cartridge-agent/pom.xml                |  5 ++
 .../src/main/assembly/assembly.xml              |  2 +
 .../src/main/bin/cartridge-agent.sh             | 50 +++++++++++++++++-
 .../stratos/cartridge/agent/CartridgeAgent.java | 53 ++++++++++++++++----
 .../stratos/cartridge/agent/EventPublisher.java | 21 ++++++--
 .../apache/stratos/cartridge/agent/Main.java    | 20 ++++----
 .../stratos/cartridge/agent/UserData.java       | 30 +++++++++--
 .../src/main/resources/jndi.properties          |  2 +-
 .../src/main/resources/log4j.properties         |  2 +-
 9 files changed, 152 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/pom.xml
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/pom.xml b/products/cartridge-agent/pom.xml
index da1bc7d..d47b481 100644
--- a/products/cartridge-agent/pom.xml
+++ b/products/cartridge-agent/pom.xml
@@ -70,6 +70,11 @@
             <artifactId>org.apache.stratos.messaging</artifactId>
             <version>3.0.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.0</version>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/assembly/assembly.xml
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/src/main/assembly/assembly.xml 
b/products/cartridge-agent/src/main/assembly/assembly.xml
index 98595a1..76bcecc 100644
--- a/products/cartridge-agent/src/main/assembly/assembly.xml
+++ b/products/cartridge-agent/src/main/assembly/assembly.xml
@@ -30,6 +30,8 @@
             <outputDirectory>/bin</outputDirectory>
             <includes>
                 <include>cartridge-agent.sh</include>
+                <include>export-launch-params.rb</include>
+                <include>user-data.json.template</include>
             </includes>
         </fileSet>
         <fileSet>

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/bin/cartridge-agent.sh
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/src/main/bin/cartridge-agent.sh 
b/products/cartridge-agent/src/main/bin/cartridge-agent.sh
index c677d3a..f807169 100755
--- a/products/cartridge-agent/src/main/bin/cartridge-agent.sh
+++ b/products/cartridge-agent/src/main/bin/cartridge-agent.sh
@@ -18,7 +18,53 @@
 # under the License.
 #
 
+set -e
+log_path=/var/log/apache-stratos
+export LOG=$log_path/cartridge-agent-sh.log
+instance_path=/opt
+
+if [[ ! -d $log_path ]]; then
+    mkdir -p $log_path
+fi
+
+echo "Starting cartridge-agent.sh..." | tee -a $LOG
+
+for i in `/usr/bin/ruby export-launch-params.rb`
+do
+    echo "writing user-data parameter $i to user-data.params " | tee -a $LOG
+    value=`echo "${i}" | sed -e s@=@=\"@g`
+    value=$value"\""
+    echo "export" $value >> user-data.params
+done
+source user-data.params
+
+echo "launch parameters exported" | tee -a $LOG
+
+echo "Generating user-data.json..." | tee -a $LOG
+
+PORTS=`echo $PORTS | sed -e s@'|'@,@g`
+
+cp -f user-data.json.template user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@SERVICE_NAME@$SERVICE_NAME@g" > 
user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@CLUSTER_ID@$CLUSTER_ID@g" > user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@MEMBER_ID@$MEMBER_ID@g" > user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@HOST_IP_ADDRESS@$IP_ADDRESS@g" > 
user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@PORT_LIST@$PORTS@g" > user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@MB_IP_ADDRESS@$MB_IP@g" > user-data.json
+cp -f user-data.json user-data.json.tmp
+cat user-data.json.tmp | sed -e "s@MB_PORT@$MB_PORT@g" > user-data.json
+
+echo "user-data.json generated" | tee -a $LOG
+
+echo "Starting Cartridge Agent..." | tee -a $LOG
 lib_path=./../lib/
-class_path=${lib_path}andes-client-0.13.wso2v8.jar:${lib_path}apache-stratos-cartridge-agent-3.0.0-SNAPSHOT.jar:${lib_path}commons-codec-1.8.jar:${lib_path}commons-logging-1.1.1.jar:${lib_path}geronimo-jms_1.1_spec-1.1.0.wso2v1.jar:${lib_path}geronimo-jms_1.1_spec-1.1.jar:${lib_path}gson-2.2.4.jar:${lib_path}log4j-1.2.13.jar:${lib_path}org.apache.log4j-1.2.13.v200706111418.jar:${lib_path}org.apache.stratos.messaging-3.0.0-SNAPSHOT.jar:${lib_path}org.wso2.carbon.logging-4.1.0.jar:${lib_path}slf4j-api-1.7.5.jar:${lib_path}slf4j-log4j12-1.7.5.jar
+class_path=${lib_path}commons-io-2.0.jar:${lib_path}andes-client-0.13.wso2v8.jar:${lib_path}apache-stratos-cartridge-agent-3.0.0-SNAPSHOT.jar:${lib_path}commons-codec-1.8.jar:${lib_path}commons-logging-1.1.1.jar:${lib_path}geronimo-jms_1.1_spec-1.1.0.wso2v1.jar:${lib_path}geronimo-jms_1.1_spec-1.1.jar:${lib_path}gson-2.2.4.jar:${lib_path}log4j-1.2.13.jar:${lib_path}org.apache.log4j-1.2.13.v200706111418.jar:${lib_path}org.apache.stratos.messaging-3.0.0-SNAPSHOT.jar:${lib_path}org.wso2.carbon.logging-4.1.0.jar:${lib_path}slf4j-api-1.7.5.jar:${lib_path}slf4j-log4j12-1.7.5.jar
 
-java -cp $class_path org.apache.stratos.cartridge.agent.Main
\ No newline at end of file
+json_path=`pwd`/user-data.json
+java -cp $class_path org.apache.stratos.cartridge.agent.Main $json_path
+echo "Cartridge Agent started" | tee -a $LOG
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
index 72656ec..047dd92 100644
--- 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
+++ 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
@@ -19,6 +19,8 @@
 
 package org.apache.stratos.cartridge.agent;
 
+import com.google.gson.Gson;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.messaging.event.Event;
@@ -27,6 +29,9 @@ import 
org.apache.stratos.messaging.event.instance.status.MemberStartedEvent;
 
 import javax.jms.JMSException;
 import javax.naming.NamingException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.Socket;
@@ -40,8 +45,30 @@ public class CartridgeAgent implements Runnable {
 
     private UserData userData;
 
-    public CartridgeAgent(UserData userData) {
-        this.userData = userData;
+    public CartridgeAgent(String userDataFilePath) {
+        this.userData = extractUserData(userDataFilePath);
+    }
+
+    private UserData extractUserData(String userDataFilePath) {
+        FileInputStream fileInputStream = null;
+        try {
+            fileInputStream = new FileInputStream(new File(userDataFilePath));
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException("Could not find user data file");
+        }
+
+        try {
+            String json = IOUtils.toString(fileInputStream, "UTF-8");
+            if(log.isDebugEnabled()){
+                log.debug(String.format("User data json: %s", json));
+            }
+            return new Gson().fromJson(json, UserData.class);
+        } catch (IOException e) {
+            if(log.isErrorEnabled()) {
+                log.error(e);
+            }
+        }
+        throw new RuntimeException("Could not read user data file");
     }
 
     @Override
@@ -65,21 +92,27 @@ public class CartridgeAgent implements Runnable {
 
     private boolean isApplicationActive(UserData userData) {
         try {
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Trying to connect to application 
socket: %s %d", userData.getIpAddress(), userData.getPort()));
-            }
+            for(int port : userData.getPorts()) {
+                if (log.isInfoEnabled()) {
+                    log.info(String.format("Trying to connect to application 
socket: %s %d", userData.getIpAddress(), port));
+                }
 
-            SocketAddress httpSockaddr = new 
InetSocketAddress(userData.getIpAddress(), userData.getPort());
-            new Socket().connect(httpSockaddr, 1000);
+                SocketAddress httpSockaddr = new 
InetSocketAddress(userData.getIpAddress(), port);
+                Socket socket = new Socket();
+                socket.connect(httpSockaddr, 1000);
 
+                if (log.isInfoEnabled()) {
+                    log.info(String.format("Successfully connected to socket: 
%s %d", userData.getIpAddress(), port));
+                }
+            }
             if (log.isInfoEnabled()) {
-                log.info("Successfully connected to socket");
+                log.info("Application is active");
             }
             return true;
         } catch (IOException e) {
         }
         if (log.isInfoEnabled()) {
-            log.info("Socket is not available");
+            log.info("All sockets are still not active");
         }
         return false;
     }
@@ -101,7 +134,7 @@ public class CartridgeAgent implements Runnable {
     }
 
     private void publishEvent(Event event) throws JMSException, 
NamingException, IOException, InterruptedException {
-        EventPublisher publisher = new 
EventPublisher(org.apache.stratos.messaging.util.Constants.INSTANCE_STATUS_TOPIC);
+        EventPublisher publisher = new 
EventPublisher(userData.getMbIpAddress(), userData.getMbPort(), 
org.apache.stratos.messaging.util.Constants.INSTANCE_STATUS_TOPIC);
         try {
             publisher.connect();
             publisher.publish(event);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/EventPublisher.java
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/EventPublisher.java
 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/EventPublisher.java
index f120a17..347a771 100644
--- 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/EventPublisher.java
+++ 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/EventPublisher.java
@@ -37,16 +37,29 @@ public class EventPublisher {
     private TopicConnection topicConnection;
     private TopicSession topicSession;
     private Topic topic;
+    private String mbIpAddress;
+    private int mbPort;
     private String topicName;
 
-    public EventPublisher(String topicName) {
+    public EventPublisher(String mbIpAddress, int mbPort, String topicName) {
+        this.mbIpAddress = mbIpAddress;
+        this.mbPort = mbPort;
         this.topicName = topicName;
     }
 
     private Properties getProperties() throws IOException {
-        Properties prop = new Properties();
-        
prop.load(EventPublisher.class.getClassLoader().getResourceAsStream("jndi.properties"));
-        return prop;
+        Properties properties = new Properties();
+        
properties.load(EventPublisher.class.getClassLoader().getResourceAsStream("jndi.properties"));
+
+        // Set message broker ip and port
+        String connectionFactoryName = 
properties.get("connectionfactoryName").toString();
+        String key = "connectionfactory." + connectionFactoryName;
+        String connectionFactoryStr = (String) properties.get(key);
+        connectionFactoryStr = connectionFactoryStr.replace("MB-IP-ADDRESS", 
mbIpAddress);
+        connectionFactoryStr = connectionFactoryStr.replace("MB-PORT", 
String.valueOf(mbPort));
+        properties.setProperty(key, connectionFactoryStr);
+
+        return properties;
     }
 
     public void connect() throws NamingException, JMSException, IOException {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java
 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java
index f578ef1..2236885 100644
--- 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java
+++ 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java
@@ -19,9 +19,16 @@
 
 package org.apache.stratos.cartridge.agent;
 
+import com.google.gson.Gson;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Cartridge agent main class.
  */
@@ -30,15 +37,8 @@ public class Main {
 
     public static void main(String[] args) {
         try {
-            if ((args != null) && (args.length == 5)) {
-                UserData userData = new UserData();
-                userData.setServiceName(args[0]);
-                userData.setClusterId(args[1]);
-                userData.setMemberId(args[2]);
-                userData.setIpAddress(args[3]);
-                userData.setPort(Integer.parseInt(args[4]));
-
-                Runnable runnable = new CartridgeAgent(userData);
+            if ((args != null) && (args.length == 1)) {
+                Runnable runnable = new CartridgeAgent(args[0]);
                 Thread thread = new Thread(runnable);
                 thread.start();
             } else {
@@ -52,7 +52,7 @@ public class Main {
     private static void printInvalidArgs() {
         if (log.isErrorEnabled()) {
             log.error("Arguments are not valid. Cartridge agent could not be 
started.");
-            log.error("Expected: service-name cluster-id member-id ip-address 
port");
+            log.error("Expected: user-data-file-path");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/UserData.java
----------------------------------------------------------------------
diff --git 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/UserData.java
 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/UserData.java
index e7a275f..dc2e00b 100644
--- 
a/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/UserData.java
+++ 
b/products/cartridge-agent/src/main/java/org/apache/stratos/cartridge/agent/UserData.java
@@ -19,6 +19,8 @@
 
 package org.apache.stratos.cartridge.agent;
 
+import java.util.List;
+
 /**
  * User data definition.
  */
@@ -27,7 +29,9 @@ public class UserData {
     private String clusterId;
     private String memberId;
     private String ipAddress;
-    private int port;
+    private List<Integer> ports;
+    private String mbIpAddress;
+    private int mbPort;
 
     public String getServiceName() {
         return serviceName;
@@ -61,11 +65,27 @@ public class UserData {
         this.ipAddress = ipAddress;
     }
 
-    public int getPort() {
-        return port;
+    public List<Integer> getPorts() {
+        return ports;
+    }
+
+    public void setPorts(List<Integer> ports) {
+        this.ports = ports;
+    }
+
+    public String getMbIpAddress() {
+        return mbIpAddress;
+    }
+
+    public void setMbIpAddress(String mbIpAddress) {
+        this.mbIpAddress = mbIpAddress;
+    }
+
+    public int getMbPort() {
+        return mbPort;
     }
 
-    public void setPort(int port) {
-        this.port = port;
+    public void setMbPort(int mbPort) {
+        this.mbPort = mbPort;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/resources/jndi.properties
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/src/main/resources/jndi.properties 
b/products/cartridge-agent/src/main/resources/jndi.properties
index 05bb5c3..d3b29bc 100644
--- a/products/cartridge-agent/src/main/resources/jndi.properties
+++ b/products/cartridge-agent/src/main/resources/jndi.properties
@@ -18,5 +18,5 @@
 #
 
 connectionfactoryName=topicConnectionfactory
-connectionfactory.topicConnectionfactory=amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5677'
+connectionfactory.topicConnectionfactory=amqp://admin:admin@carbon/carbon?brokerlist='tcp://MB-IP-ADDRESS:MB-PORT'
 
java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d50cf4f0/products/cartridge-agent/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/products/cartridge-agent/src/main/resources/log4j.properties 
b/products/cartridge-agent/src/main/resources/log4j.properties
index 17c221d..be7cf20 100644
--- a/products/cartridge-agent/src/main/resources/log4j.properties
+++ b/products/cartridge-agent/src/main/resources/log4j.properties
@@ -34,4 +34,4 @@ log4j.appender.FILE_APPENDER.threshold=DEBUG
 log4j.appender.CONSOLE_APPENDER.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE_APPENDER.layout.ConversionPattern=[%d{ISO8601}] %5p - 
[%c{1}] %m%n
 
-log4j.logger.org.apache.stratos=ERROR
\ No newline at end of file
+log4j.logger.org.apache.stratos.cartridge.agent=DEBUG
\ No newline at end of file

Reply via email to