You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/10/11 11:09:30 UTC
[05/50] [abbrv] git commit: Added CompleteTopologyEvent populating
with the json string received from message broker Added implementation for
on_complete_topology_event method Fixed bugs in topology context
Added CompleteTopologyEvent populating with the json string received from message broker
Added implementation for on_complete_topology_event method
Fixed bugs in topology context
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e5da07e5
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e5da07e5
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e5da07e5
Branch: refs/heads/master
Commit: e5da07e5bf1719e2467510ec0233d600900eaf89
Parents: 4850c53
Author: Chamila de Alwis <ch...@wso2.com>
Authored: Wed Sep 24 23:47:37 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 14:38:28 2014 +0530
----------------------------------------------------------------------
.../cartridge-agent/agent.py | 24 ++++++--
.../modules/event/topology/events.py | 62 +++++++++++++++++++-
.../modules/topology/topologycontext.py | 1 +
3 files changed, 81 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/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
index 7b6a973..96b71a4 100644
--- a/tools/python-cartridge-agent/cartridge-agent/agent.py
+++ b/tools/python-cartridge-agent/cartridge-agent/agent.py
@@ -4,14 +4,16 @@ import threading
import time
from modules.config.cartridgeagentconfiguration import CartridgeAgentConfiguration
-from modules.util import *
+from modules.util import cartridgeagentconstants, cartridgeagentutils
from modules.exception.parameternotfoundexception import ParameterNotFoundException
from modules.subscriber.eventsubscriber import EventSubscriber
from modules.extensions.defaultextensionhandler import DefaultExtensionHandler
from modules.publisher import cartridgeagentpublisher
from modules.event.instance.notifier.events import *
from modules.event.tenant.events import *
+from modules.event.topology.events import *
from modules.tenant.tenantcontext import *
+from modules.topology.topologycontext import *
class CartridgeAgent(threading.Thread):
@@ -28,7 +30,8 @@ class CartridgeAgent(threading.Thread):
self.extension_handler = DefaultExtensionHandler()
- self.__complete_tenant_event_received = False
+ self.__tenant_context_initialized = False
+ self.__topology_context_initialized = False
def run(self):
self.log.info("Starting Cartridge Agent...")
@@ -147,7 +150,18 @@ class CartridgeAgent(threading.Thread):
raise NotImplementedError
def on_complete_topology(self, msg):
- raise NotImplementedError
+ if not self.__topology_context_initialized:
+ self.log.debug("Complete topology event received")
+ event_obj = CompleteTopologyEvent.create_from_json(msg.payload)
+ TopologyContext.update(event_obj.topology)
+ self.__topology_context_initialized = True
+ try:
+ self.extension_handler.onCompleteTopologyEvent(event_obj)
+ except:
+ self.log.exception("Error processing complete topology event")
+ else:
+ self.log.info("Complete topology event updating task disabled")
+
def on_member_started(self, msg):
raise NotImplementedError
@@ -191,14 +205,14 @@ class CartridgeAgent(threading.Thread):
# )
def on_complete_tenant(self, msg):
- if not self.__complete_tenant_event_received:
+ if not self.__tenant_context_initialized:
self.log.debug("Complete tenant event received")
event_obj = CompleteTenantEvent.create_from_json(msg.payload)
TenantContext.update(event_obj.tenants)
try:
self.extension_handler.onCompleteTenantEvent(event_obj)
- self.__complete_tenant_event_received = True
+ self.__tenant_context_initialized = True
except:
self.log.exception("Error processing complete tenant event")
else:
http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py b/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
index 5990ea7..80a06ce 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/event/topology/events.py
@@ -1,5 +1,7 @@
import json
+from ... topology.topologycontext import *
+
class MemberActivatedEvent:
@@ -37,13 +39,71 @@ class MemberSuspendedEvent:
class CompleteTopologyEvent:
def __init__(self):
- pass
+ self.topology = None
@staticmethod
def create_from_json(json_str):
json_obj = json.loads(json_str)
instance = CompleteTopologyEvent()
+ topology_str = json_obj["topology"] if "topology" in json_obj else None
+ if topology_str is not None:
+ topology_obj = Topology()
+
+ #add service map
+ for service_name in topology_str["serviceMap"]:
+ service_str = topology_str["serviceMap"][service_name]
+
+ service_obj = Service(service_name, service_str["serviceType"])
+ service_obj.properties = service_str["properties"]
+ # add ports to port map
+ for port_proxy in service_str["portMap"]:
+ port_str = service_str["portMap"][port_proxy]
+ port_obj = Port(port_str["protocol"], port_str["value"], port_proxy)
+ service_obj.add_port(port_obj)
+
+ #add cluster map
+ for cluster_id in service_str["clusterIdClusterMap"]:
+ cluster_str = service_str["clusterIdClusterMap"][cluster_id]
+ cl_service_name = cluster_str["serviceName"]
+ cl_autoscale_policy_name = cluster_str["autoscalePolicyName"]
+ cl_deployment_policy_name = cluster_str["deploymentPolicyName"]
+
+ cluster_obj = Cluster(cl_service_name, cluster_id, cl_deployment_policy_name, cl_autoscale_policy_name)
+ cluster_obj.hostnames = cluster_str["hostNames"]
+ cluster_obj.tenant_range = cluster_str["tenantRange"]
+ cluster_obj.is_lb_cluster = cluster_str["isLbCluster"]
+ cluster_obj.status = cluster_str["status"]
+ cluster_obj.load_balancer_algorithm_name = cluster_str["loadBalanceAlgorithmName"]
+ cluster_obj.properties = cluster_str["properties"]
+
+ #add member map
+ for member_id in cluster_str["memberMap"]:
+ member_str = cluster_str["memberMap"][member_id]
+ mm_service_name = member_str["serviceName"]
+ mm_cluster_id = member_str["clusterId"]
+ mm_network_partition_id = member_str["networkPartitionId"]
+ mm_partition_id = member_str["partitionId"]
+
+ member_obj = Member(mm_service_name, mm_cluster_id, mm_network_partition_id, mm_partition_id, member_id)
+ member_obj.member_public_ip = member_str["memberPublicIp"]
+ member_obj.status = member_str["status"]
+ member_obj.member_ip = member_str["memberIp"]
+ member_obj.properties = member_str["properties"]
+ member_obj.lb_cluster_id = member_str["lbClusterId"]
+
+ #add port map
+ for mm_port_proxy in member_str["portMap"]:
+ mm_port_str = member_str["portMap"][port_proxy]
+ mm_port_obj = Port(mm_port_str["protocol"], mm_port_str["value"], mm_port_proxy)
+ member_obj.add_port(mm_port_obj)
+ cluster_obj.add_member(member_obj)
+ service_obj.add_cluster(cluster_obj)
+ topology_obj.add_service(service_obj)
+ instance.topology = topology_obj
+
+ return instance
+
class MemberStartedEvent:
http://git-wip-us.apache.org/repos/asf/stratos/blob/e5da07e5/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py b/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
index 1994d4c..4d118f1 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/topology/topologycontext.py
@@ -53,6 +53,7 @@ class Service:
self.service_type = service_type
self.cluster_id_cluster_map = {}
self.port_map = {}
+ self.properties = {}
def get_clusters(self):
return self.cluster_id_cluster_map.values()