Repository: stratos Updated Branches: refs/heads/docker-integration 76e425dca -> d1ebdc603
http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/products/stratos/modules/distribution/pom.xml ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/pom.xml b/products/stratos/modules/distribution/pom.xml index 34a600a..59a85d5 100755 --- a/products/stratos/modules/distribution/pom.xml +++ b/products/stratos/modules/distribution/pom.xml @@ -485,6 +485,11 @@ <artifactId>org.apache.stratos.cep.extension</artifactId> <version>4.1.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.eclipse.paho</groupId> + <artifactId>mqtt-client</artifactId> + <version>0.4.0</version> + </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jta_1.1_spec</artifactId> http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/products/stratos/modules/distribution/src/assembly/bin.xml ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/assembly/bin.xml b/products/stratos/modules/distribution/src/assembly/bin.xml index c2e82d3..cef5a88 100755 --- a/products/stratos/modules/distribution/src/assembly/bin.xml +++ b/products/stratos/modules/distribution/src/assembly/bin.xml @@ -576,7 +576,8 @@ <include>org.apache.activemq:activemq-client:jar</include> <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec:jar</include> <include>org.fusesource.hawtbuf:hawtbuf:jar</include> - <include>org.apache.stratos:org.apache.stratos.kubernetes.client:jar</include> + <include>org.eclipse.paho:mqtt-client:jar</include> + <include>org.apache.stratos:org.apache.stratos.kubernetes.client:jar</include> <include>org.jboss.resteasy:resteasy-jaxrs:jar</include> <include>org.jboss.resteasy:resteasy-jaxb-provider:jar</include> <include>org.jboss.resteasy:resteasy-jackson-provider:jar</include> http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/.gitmodules ---------------------------------------------------------------------- diff --git a/tools/.gitmodules b/tools/.gitmodules new file mode 100644 index 0000000..53ebd0b --- /dev/null +++ b/tools/.gitmodules @@ -0,0 +1,3 @@ +[submodule "cartridge_agent"] + path = cartridge_agent + url = ./python-cartridge-agent/cartridge_agent http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/cartridge_agent ---------------------------------------------------------------------- diff --git a/tools/cartridge_agent b/tools/cartridge_agent new file mode 160000 index 0000000..66e5047 --- /dev/null +++ b/tools/cartridge_agent @@ -0,0 +1 @@ +Subproject commit 66e50479db36f0c11e539ea3f8c3bc68ad5d9d6c http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/agent.properties ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/agent.properties b/tools/python-cartridge-agent/cartridge-agent/agent.properties new file mode 100644 index 0000000..f9724fc --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/agent.properties @@ -0,0 +1,47 @@ +[agent] +mb.ip =MB-IP +mb.port =MB-PORT +listen.address =localhost +thrift.receiver.ip =CEP-IP +thrift.receiver.port =CEP-PORT +jndi.properties.template.file.path =${script_path}/../conf/templates/jndi.properties.template +jndi.properties.dir =${script_path}/../conf +log4j.configuration =file://${script_path}/../conf/log4j.properties +param.file.path =${script_path}/../payload/launch-params +extensions.dir =${script_path}/../extensions +cep.stats.publisher.enabled =true +lb.private.ip = +lb.public.ip = +javax.net.ssl.trustStore =CERT-TRUSTSTORE +javax.net.ssl.trustStorePassword =TRUSTSTORE-PASSWORD +enable.artifact.update =true +auto.commit =false +auto.checkout =true +artifact.update.interval =15 +enable.data.publisher =ENABLE-DATA-PUBLISHER +monitoring.server.ip =MONITORING-SERVER-IP +monitoring.server.port =MONITORING-SERVER-PORT +monitoring.server.secure.port =MONITORING-SERVER-SECURE-PORT +monitoring.server.admin.username =MONITORING-SERVER-ADMIN-USERNAME +monitoring.server.admin.password =MONITORING-SERVER-ADMIN-PASSWORD +log.file.paths =LOG_FILE_PATHS +APP_PATH =APP_PATH +super.tenant.repository.path =/repository/deployment/server/ +tenant.repository.path =/repository/tenants/ +extension.instance.started =instance-started.sh +extension.start.servers =start-servers.sh +extension.instance.activated =instance-activated.sh +extension.artifacts.updated =artifacts-updated.sh +extension.clean =clean.sh +extension.mount.volumes =mount_volumes.sh +extension.member.started =member-started.sh +extension.member.activated =member-activated.sh +extension.member.suspended =member-suspended.sh +extension.member.terminated =member-terminated.sh +extension.complete.topology =complete-topology.sh +extension.complete.tenant =complete-tenant.sh +extension.subscription.domain.added =subscription-domain-added.sh +extension.subscription.domain.removed =subscription-domain-removed.sh +extension.artifacts.copy =artifacts-copy.sh +extension.tenant.subscribed =tenant-subscribed.sh +extension.tenant.unsubscribed =tenant-unsubscribed.sh \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/agent.py ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/agent.py b/tools/python-cartridge-agent/cartridge-agent/agent.py new file mode 100644 index 0000000..40b7e49 --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/agent.py @@ -0,0 +1,272 @@ +#!/usr/bin/env python +import stomp +import time +import logging +import sys +import random +import os +import threading +import socket +import json +import extensionhandler +import util +import subprocess +import ConfigParser + +# Parse properties file +properties = ConfigParser.SafeConfigParser() +properties.read('agent.properties') + +#TODO: check from properties file +util.validateRequiredSystemProperties() + +payloadPath=sys.argv[1] +extensionsDir=sys.argv[2] +extensionhandler.onArtifactUpdatedEvent(extensionsDir,'artifacts-updated.sh') + +fo = open(payloadPath, "r+") +str = fo.read(1000); + +print "Read String is : ", str + +sd = dict(u.split("=") for u in str.split(",")) + +print [i for i in sd.keys()] + + +print "HOST_NAME ", sd['HOST_NAME'] + +hostname=sd['HOST_NAME'] +service_name=sd['SERVICE_NAME'] +multitenant=sd['MULTITENANT'] +tenant_id=sd['TENANT_ID'] +tenantrange=sd['TENANT_RANGE'] +cartridealies=sd['CARTRIDGE_ALIAS'] +cluster_id=sd['CLUSTER_ID'] +cartridge_key=sd['CARTRIDGE_KEY'] +deployement=sd['DEPLOYMENT'] +repourl=sd['REPO_URL'] +ports=sd['PORTS'] +puppetip=sd['PUPPET_IP'] +puppethostname=sd['PUPPET_HOSTNAME'] +puppetenv=sd['PUPPET_ENV'] +persistance_mapping = sd['PERSISTENCE_MAPPING'] if 'PERSISTENCE_MAPPING' in sd else None + +if 'COMMIT_ENABLED' in sd: + commitenabled=sd['COMMIT_ENABLED'] + +if 'DB_HOST' in sd: + dbhost=sd['DB_HOST'] + +if multitenant == "true": + app_path = sd['APP_PATH'] +else: + app_path = "" + +env_params = {} +env_params['STRATOS_APP_PATH']= app_path +env_params['STRATOS_PARAM_FILE_PATH']=properties.get("agent", "param.file.path") +env_params['STRATOS_SERVICE_NAME']=service_name +env_params['STRATOS_TENANT_ID']=tenant_id +env_params['STRATOS_CARTRIDGE_KEY']=cartridge_key +env_params['STRATOS_LB_CLUSTER_ID']=sd['LB_CLUSTER_ID'] +env_params['STRATOS_CLUSTER_ID']=cluster_id +env_params['STRATOS_NETWORK_PARTITION_ID']=sd['NETWORK_PARTITION_ID'] +env_params['STRATOS_PARTITION_ID']=sd['PARTITION_ID'] +env_params['STRATOS_PERSISTENCE_MAPPINGS']=persistance_mapping +env_params['STRATOS_REPO_URL']=sd['REPO_URL'] +# envParams['STRATOS_LB_IP']= +# envParams['STRATOS_LB_PUBLIC_IP']= +# envParams['']= +# envParams['']= +# envParams['']= +# envParams['']= + +extensionhandler.onInstanceStartedEvent(extensionsDir, 'instance-started.sh.erb', multitenant, 'artifacts-copy.sh.erb', app_path, env_params) + + +def runningSuspendScript(): + print "inside thread" + os.system('./script.sh') +def MyThread2(): + pass + +def listeningTopology(): + class MyListener(stomp.ConnectionListener): + def on_error(self, headers, message): + print('received an error %s' % message) + def on_message(self, headers, message): + # print('received message\n %s'% message) + for k,v in headers.iteritems(): + print('header: key %s , value %s' %(k,v)) + + if k=='event-class-name': + print('event class name found') + if v=='org.apache.stratos.messaging.event.topology.CompleteTopologyEvent': + print('CompleteTopologyEvent triggered') + print('received message\n %s'% message) + if v=='org.apache.stratos.messaging.event.topology.MemberTerminatedEvent': + print('MemberTerminatedEvent triggered') + if v=='org.apache.stratos.messaging.event.topology.ServiceCreatedEvent': + print('MemberTerminatedEvent triggered') + if v=='org.apache.stratos.messaging.event.topology.InstanceSpawnedEvent': + print('MemberTerminatedEvent triggered') + print('received message\n %s'% message) + if v=='org.apache.stratos.messaging.event.topology.ClusterCreatedEvent': + print('MemberTerminatedEvent triggered') + if v=='org.apache.stratos.messaging.event.topology.InstanceSpawnedEvent': + print('MemberTerminatedEvent triggered') + else: + print('something else') + + + + dest='/topic/topology' + conn=stomp.Connection([('localhost',61613)]) + print('set up Connection') + conn.set_listener('somename',MyListener()) + print('Set up listener') + + conn.start() + print('started connection') + + conn.connect(wait=True) + print('connected') + conn.subscribe(destination=dest, ack='auto') + print('subscribed') + + +def listeningInstanceNotifier(): + class MyListener(stomp.ConnectionListener): + def on_error(self, headers, message): + print('received an error %s' % message) + def on_message(self, headers, message): + for k,v in headers.iteritems(): + print('header: key %s , value %s' %(k,v)) + if k=='event-class-name': + print('event class name found') + if v=='org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEvent': + print('ArtifactUpdateEvent triggered') + print('received message\n %s'% message) + if v=='org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEvent': + print('MemberTerminatedEvent triggered') + if v=='org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEvent': + print('MemberTerminatedEvent triggered') + else: + print('something else') + print('received message\n %s'% message) + + + dest='/topic/instance-notifier' + conn=stomp.Connection([('localhost',61613)]) + print('set up Connection') + conn.set_listener('somename',MyListener()) + print('Set up listener') + + conn.start() + print('started connection') + + conn.connect(wait=True) + print('connected') + conn.subscribe(destination=dest, ack='auto') + print('subscribed') + + + +def publishInstanceStartedEvent(): + class MyListener(stomp.ConnectionListener): + def on_error(self, headers, message): + print('received an error %s' % message) + def on_message(self, headers, message): + for k,v in headers.iteritems(): + print('header: key %s , value %s' %(k,v)) + print('received message\n %s'% message) + + + dest='/topic/instance-status' + conn=stomp.Connection([('localhost',61613)]) + print('set up Connection') + + + conn.start() + print('started connection') + + conn.connect(wait=True) + print('connected') + conn.subscribe(destination=dest, ack='auto') + print('subscribed') + + message=InstanceStartedEvent(service_name,cluster_id,'','',tenant_id).to_JSON() + conn.send(message=message, destination=dest,headers={'seltype':'mandi-age-to-man','type':'textMessage','MessageNumber':random.randint(0,65535),'event-class-name':'org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent'},ack='auto') + print('sent message') + print(message) + time.sleep(2) + print('slept') + conn.disconnect() + print('disconnected') + + +def checkPortsActive(): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + result = sock.connect_ex(('127.0.0.1',80)) + if result == 0: + print "Port is open" + else: + print "Port is not open" + + +class InstanceStartedEvent: + serviceName='' + def __init__(self, serviceName,clusterId,networkPartitionId,partitionId,memberId): + self.serviceName = serviceName + self.clusterId = clusterId + self.networkPartitionId = networkPartitionId + self.partitionId = partitionId + self.memberId = memberId + def to_JSON(self): + return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4) + +def onInstanceStartedEvent(): + print('on instance start up event') + event = InstanceStartedEvent(service_name,cluster_id,'','',tenant_id) + print(event.to_JSON()) + + +def onArtifactUpdatedEvent(): + print('on srtifcats update event') + + +t1 = threading.Thread(target=runningSuspendScript, args=[]) + +t1.start() + +t2 = threading.Thread(target=listeningInstanceNotifier, args=[]) + +t2.start() + +t3 = threading.Thread(target=listeningTopology, args=[]) + +t3.start() + + + +onInstanceStartedEvent() + +checkPortsActive() + +publishInstanceStartedEvent() + +extensionhandler.startServerExtension() + + +def git(*args): + return subprocess.check_call(['git'] + list(args)) + +# examples +git("status") +git("clone", "git://git.xyz.com/platform/manifest.git", "-b", "jb_2.5") + + + + + http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/agent.sh ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/agent.sh b/tools/python-cartridge-agent/cartridge-agent/agent.sh new file mode 100644 index 0000000..15b4759 --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/agent.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +param_path="/home/gayan/Resources/Stratos/payload/launch-params" +extension_path="/home/gayan/Resources/Stratos/extentions" + +python agent.py $param_path $extension_path + + http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/agent1.py ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/agent1.py b/tools/python-cartridge-agent/cartridge-agent/agent1.py new file mode 100644 index 0000000..cf9dda1 --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/agent1.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +import stomp +import time +import logging +import sys +import random +import os +import threading +import socket + +payloadPath="/home/gayan/Resources/Stratos/payload/launch-params"; +extensionsDir="/home/gayan/Resources/Stratos/extentions" +mbip="" +mbport="" + http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/extensionhandler.py ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/extensionhandler.py b/tools/python-cartridge-agent/cartridge-agent/extensionhandler.py new file mode 100644 index 0000000..b021d5f --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/extensionhandler.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +import stomp +import time +import logging +import sys +import random +import os +import threading +import socket +import json +from subprocess import Popen,PIPE + + +def onArtifactUpdatedEvent(extenstionpath,scriptname): + Process=Popen([os.path.join(extenstionpath,scriptname),str('php')],shell=True,stdin=PIPE,stderr=PIPE) + print Process.communicate() #now you should see your output + # os.system() + +def onInstanceCleanupMemberEvent(extenstionpath,scriptname): + Process=Popen([os.path.join(extenstionpath,scriptname),str('php')],shell=True,stdin=PIPE,stderr=PIPE) + print Process.communicate() + +def onInstanceCleanupClusterEvent(extenstionpath,scriptname): + Process=Popen([os.path.join(extenstionpath,scriptname),str('php')],shell=True,stdin=PIPE,stderr=PIPE) + print Process.communicate() + +def startServerExtension(): + print('=================================startServerExtension') + +def onInstanceStartedEvent(extensionpath, scriptname, multitenant, copyartifactscriptname, apppath, envparams): + print('=================================onInstanceStartedEvent') + #if ismultitenant + # execute copy artifact extension + + if multitenant == "true": + Process = Popen([os.path.join(extensionpath, copyartifactscriptname), apppath + "/repository/deployment/server/", "/tmp/-1234/"], shell=True, stdin=PIPE, stderr=PIPE) + print Process.communicate(); + + #addPayloadParams() + Process = Popen([os.path.join(extensionpath, scriptname), envparams], shell=True, stdin=PIPE, stderr=PIPE) + print Process.communicate(); + + #execute instance started extension with empty map + http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/extensionhandler.pyc ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/extensionhandler.pyc b/tools/python-cartridge-agent/cartridge-agent/extensionhandler.pyc new file mode 100644 index 0000000..0dc2e36 Binary files /dev/null and b/tools/python-cartridge-agent/cartridge-agent/extensionhandler.pyc differ http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/readme.txt ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/readme.txt b/tools/python-cartridge-agent/cartridge-agent/readme.txt new file mode 100644 index 0000000..65c3e8c --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/readme.txt @@ -0,0 +1,2 @@ +sudo apt-get install python-setuptools +easy_install http://stomppy.googlecode.com/files/stomp.py-3.0.2a.tar.gz http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/script.sh ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/script.sh b/tools/python-cartridge-agent/cartridge-agent/script.sh new file mode 100755 index 0000000..e69de29 http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/util.py ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/util.py b/tools/python-cartridge-agent/cartridge-agent/util.py new file mode 100644 index 0000000..b52ff84 --- /dev/null +++ b/tools/python-cartridge-agent/cartridge-agent/util.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import stomp +import time +import logging +import sys +import random +import os +import threading +import socket +import json +import extensionhandler + + +def validateRequiredSystemProperties(): + + if sys.argv[1] is None: + print('System property param path not found') + return + if sys.argv[2] is None: + print('System property extension dir path not found') + return + http://git-wip-us.apache.org/repos/asf/stratos/blob/bc78b9dc/tools/python-cartridge-agent/cartridge-agent/util.pyc ---------------------------------------------------------------------- diff --git a/tools/python-cartridge-agent/cartridge-agent/util.pyc b/tools/python-cartridge-agent/cartridge-agent/util.pyc new file mode 100644 index 0000000..42553c9 Binary files /dev/null and b/tools/python-cartridge-agent/cartridge-agent/util.pyc differ
