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; }
