Fix for agent health stat publisher and introducing integration test to verify 
PCA stat publisher


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

Branch: refs/heads/master
Commit: 8bd92e89a678a2dad14665e5b4ce4b9e769b834b
Parents: 31cbfd5
Author: Akila Perera <[email protected]>
Authored: Fri Aug 28 23:50:59 2015 +0530
Committer: Akila Perera <[email protected]>
Committed: Fri Aug 28 23:51:15 2015 +0530

----------------------------------------------------------------------
 .../python/cartridge.agent/cartridge.agent/healthstats.py |  3 +--
 .../cartridge.agent/modules/databridge/agent.py           | 10 ++++------
 .../modules/databridge/thrift/publisher.py                |  1 -
 products/python-cartridge-agent/integration/pom.xml       |  9 +++++++--
 .../stratos/python.cartridge.agent/test/ADCMTAppTest.java |  4 ++--
 .../stratos/python.cartridge.agent/test/ADCTest.java      |  3 +--
 .../python.cartridge.agent/test/AgentStartupTest.java     |  9 +++++++--
 .../test/PythonAgentTestManager.java                      | 10 ++++++++--
 8 files changed, 30 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
index dddee70..f661294 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/healthstats.py
@@ -66,7 +66,7 @@ class HealthStatisticsPublisherManager(Thread):
                 self.log.debug("Publishing load average: %r" % 
cartridge_stats.load_avg)
                 self.publisher.publish_load_average(cartridge_stats.load_avg)
             except ThriftReceiverOfflineException:
-                self.log.error("Couldn't publish health statistics to CEP. 
Thrift Receiver offline. Reconnecting...")
+                self.log.exception("Couldn't publish health statistics to CEP. 
Thrift Receiver offline. Reconnecting...")
                 self.publisher = HealthStatisticsPublisher()
 
         self.publisher.publisher.disconnect()
@@ -124,7 +124,6 @@ class HealthStatisticsPublisher:
             cep_admin_username,
             cep_admin_password,
             self.stream_definition)
-        self.publisher.start()
 
         HealthStatisticsPublisher.log.debug("HealthStatisticsPublisher 
initialized")
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/agent.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/agent.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/agent.py
index 533cf20..d94688f 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/agent.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/agent.py
@@ -115,7 +115,7 @@ class ThriftEvent:
         """:type : list[T]"""
 
 
-class ThriftPublisher(Thread):
+class ThriftPublisher():
     """
     Handles publishing events to BAM/CEP through thrift using the provided 
address and credentials
     """
@@ -136,14 +136,15 @@ class ThriftPublisher(Thread):
         :return: ThriftPublisher object
         :rtype: ThriftPublisher
         """
-        Thread.__init__(self)
         try:
             port_number = int(port)
         except ValueError:
             raise RuntimeError("Port number for Thrift Publisher is invalid: 
%r" % port)
 
         self.__publisher = Publisher(ip, port_number, stream_definition)
-        #self.__publisher.defineStream(str(stream_definition))
+        self.__publisher.connect(username, password)
+        self.__publisher.defineStream(str(stream_definition))
+        ThriftPublisher.log.debug("ThriftPublisher initializing with stream 
definition: " + str(stream_definition))
         self.stream_definition = stream_definition
         self.stream_id = self.__publisher.streamId
         self.ip = ip
@@ -151,9 +152,6 @@ class ThriftPublisher(Thread):
         self.username = username
         self.password = password
 
-    def run(self):
-        self.__publisher.connect(self.username, self.password)
-
     def publish(self, event):
         """
         Publishes the given event by creating the event bundle from the log 
event

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/publisher.py
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/publisher.py
 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/publisher.py
index e607d1b..de96ced 100644
--- 
a/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/publisher.py
+++ 
b/components/org.apache.stratos.python.cartridge.agent/src/main/python/cartridge.agent/cartridge.agent/modules/databridge/thrift/publisher.py
@@ -50,7 +50,6 @@ class Publisher:
         self.socket.open()
         self.transport.open()
         self.sessionId = Publisher.client.connect(username, password)
-        self.streamId = Publisher.client.defineStream(self.sessionId, 
self.streamDef)
 
     def defineStream(self, streamDef):
         # Create Stream Definition

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/products/python-cartridge-agent/integration/pom.xml
----------------------------------------------------------------------
diff --git a/products/python-cartridge-agent/integration/pom.xml 
b/products/python-cartridge-agent/integration/pom.xml
index 52cc286..707a4ae 100755
--- a/products/python-cartridge-agent/integration/pom.xml
+++ b/products/python-cartridge-agent/integration/pom.xml
@@ -78,7 +78,7 @@
                             </excludes>
                         </configuration>
                         <executions>
-                            <!--execution>
+                            <execution>
                                 <id>default-test</id>
                                 <goals>
                                     <goal>test</goal>
@@ -103,7 +103,7 @@
                                     </suiteXmlFiles>
                                     
<workingDirectory>${basedir}/target</workingDirectory>
                                 </configuration>
-                            </execution-->
+                            </execution>
                             <execution>
                                 <id>adc-mt-test</id>
                                 <goals>
@@ -196,5 +196,10 @@
             <artifactId>org.apache.stratos.messaging</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.thrift</groupId>
+            <artifactId>libthrift</artifactId>
+            <version>0.9.2</version>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java
 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java
index 3104281..2a4c8b5 100644
--- 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java
+++ 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCMTAppTest.java
@@ -51,7 +51,7 @@ public class ADCMTAppTest extends PythonAgentTestManager {
     private static final String TENANT_ID = "-1234";
     private static final String SERVICE_NAME = "tomcat-mt";
 
-    private static boolean hasADCTestCompleted = false;
+    private boolean hasADCTestCompleted = false;
 
     @BeforeSuite
     public void setupADCMTAppTest() {
@@ -95,7 +95,7 @@ public class ADCMTAppTest extends PythonAgentTestManager {
                             if (line.contains("Git clone executed")) {
                                 log.info("Agent has completed git clone. 
Asserting the operation...");
                                 
assertRepoClone(getArtifactUpdatedEventForPublicRepo());
-                                //hasADCTestCompleted = true;
+                                hasADCTestCompleted = true;
                             }
                         }
                     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java
 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java
index 99dc217..de5be67 100755
--- 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java
+++ 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/ADCTest.java
@@ -53,7 +53,7 @@ public class ADCTest extends PythonAgentTestManager {
     private static final String TENANT_ID = "-1234";
     private static final String SERVICE_NAME = "tomcat";
 
-    private static boolean hasADCTestCompleted = false;
+    private boolean hasADCTestCompleted = false;
 
     @BeforeSuite
     public void setupADCTest() {
@@ -107,7 +107,6 @@ public class ADCTest extends PythonAgentTestManager {
                                 }
                             }
                             if (line.contains("Pushed artifacts for tenant")) {
-                                // TODO: Get rid of static var
                                 log.info("ADC Test completed");
                                 hasADCTestCompleted = true;
                             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java
 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java
index 83fc227..c08ab5c 100755
--- 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java
+++ 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/AgentStartupTest.java
@@ -35,7 +35,7 @@ import java.util.Properties;
 
 public class AgentStartupTest extends PythonAgentTestManager {
     private static final Log log = LogFactory.getLog(AgentStartupTest.class);
-    private static final int STARTUP_TIMEOUT = 30000;
+    private static final int STARTUP_TIMEOUT = 60000;
     private static final String RESOURCES_PATH = "/suite-1";
     private static final String CLUSTER_ID = "php.php.domain";
     private static final String DEPLOYMENT_POLICY_NAME = "deployment-policy-1";
@@ -47,6 +47,7 @@ public class AgentStartupTest extends PythonAgentTestManager {
     private static final String PARTITION_ID = "partition-1";
     private static final String TENANT_ID = "-1234";
     private static final String SERVICE_NAME = "php";
+    private boolean startupTestCompleted = false;
 
     @BeforeSuite
     public void setupAgentStartupTest() {
@@ -101,6 +102,10 @@ public class AgentStartupTest extends 
PythonAgentTestManager {
                                 publishEvent(memberInitializedEvent);
                                 log.info("Member initialized event published");
                             }
+                            // TODO: properly mock the CEP server
+                            if (line.contains("Published event to thrift 
stream")) {
+                                startupTestCompleted = true;
+                            }
                         }
                     }
                     sleep(1000);
@@ -110,7 +115,7 @@ public class AgentStartupTest extends 
PythonAgentTestManager {
 
         startupTestThread.start();
 
-        while (!instanceStarted || !instanceActivated) {
+        while (!instanceStarted || !instanceActivated || 
!startupTestCompleted) {
             // wait until the instance activated event is received.
             // this will assert whether instance got activated within timeout 
period; no need for explicit assertions
             sleep(2000);

http://git-wip-us.apache.org/repos/asf/stratos/blob/8bd92e89/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/PythonAgentTestManager.java
----------------------------------------------------------------------
diff --git 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/PythonAgentTestManager.java
 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/PythonAgentTestManager.java
index 6ed4bb3..5ba6c6a 100644
--- 
a/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/PythonAgentTestManager.java
+++ 
b/products/python-cartridge-agent/integration/src/test/java/org/apache/stratos/python.cartridge.agent/test/PythonAgentTestManager.java
@@ -110,8 +110,9 @@ public class PythonAgentTestManager {
 
             this.eventReceiverInitiated = true;
         }
-        // Simulate CEP server socket
-        startServerSocket(cepPort);
+        // Simulate CEP Thrift server
+        //startServerSocket(cepPort);
+        // TODO: create a mock thrift server; sockets will not work with 
health stats publisher
         String agentPath = setupPythonAgent(resourcePath);
         log.info("Python agent working directory name: " + 
PYTHON_AGENT_DIR_NAME);
         log.info("Starting python cartridge agent...");
@@ -120,6 +121,7 @@ public class PythonAgentTestManager {
                 "/cartridge-agent-console.log");
     }
 
+
     protected void tearDown() {
         tearDown(null);
     }
@@ -266,6 +268,10 @@ public class PythonAgentTestManager {
     }
 
 
+    protected static String getResourcesPath() {
+        return PythonAgentTestManager.class.getResource("/").getPath() + 
"/../../src/test/resources";
+    }
+
     protected static String getResourcesPath(String resourcesPath) {
         return PythonAgentTestManager.class.getResource("/").getPath() + 
"/../../src/test/resources" + resourcesPath;
     }

Reply via email to