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
