From a558a0f8b19e3547c92c52cc05f8a2c08e0edbd0 Mon Sep 17 00:00:00 2001
From: woutdenolf <woutdenolf@users.sf.net>
Date: Wed, 22 Jul 2020 16:49:18 +0200
Subject: [PATCH] Make jolokia port configurable (useful for tests)

---
 src/metadata_manager/MessagingClient.py | 23 +++++++++++++----------
 src/metadata_manager/MetaExperiment.py  |  6 +++++-
 src/metadata_manager/MetadataManager.py |  8 ++++++--
 3 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/metadata_manager/MessagingClient.py b/src/metadata_manager/MessagingClient.py
index 58a933d..421295d 100644
--- a/src/metadata_manager/MessagingClient.py
+++ b/src/metadata_manager/MessagingClient.py
@@ -45,44 +45,47 @@ class StompClient():
     _TIMEOUT = 0.1
     
     JOLOKIA_CONSUMER_COUNT_URL = 'api/jolokia/read/org.apache.activemq:type=Broker,brokerName=metadata,destinationType=Queue,destinationName=icatIngest/ConsumerCount'
-    JOLOKIA_PORT = '8778'
+    JOLOKIA_PORT = 8778
     _JOLOKIA_USERNAME = 'user'
     _JOLOKIA_PASSWORD = 'user'
     
     # Logger
     LOG = logging.getLogger("StompClient")
 
-    def __init__(self, queueURLs, queueName, beamlineID, manager=None):
-      
-      
+    def __init__(self, queueURLs, queueName, beamlineID, manager=None, jolokia_port=None):
         self.queueName = queueName
         self.beamlineID = beamlineID
 
-        self.isSimulationMode = False
-
         self.heartbeat = 0
         self.heartbeat_set = 0
         self.connected = False
         self.manager = manager        
-        self.listener=None
+        self.listener = None
         proxy_handler = urllib.request.ProxyHandler({})
         opener = urllib.request.build_opener(proxy_handler)
         urllib.request.install_opener(opener)
 
         # In case queueURLs is empty then messagingClient is set in status simulation
+        self.isSimulationMode = False
+        self._jolokia_port = jolokia_port
         if len(queueURLs) == 1:
             if queueURLs[0] == '':      
                 self.isSimulationMode = True      
                 self.LOG.info("Messaging client to ActiveMQ is in SIMULATION mode. beamline=%s" %(beamlineID))
                 self.cfgURL = "simulator"
                 return 
-        
-                        
+
         self.cfgURL = 'failover:(tcp://' + ',tcp://'.join(queueURLs) + ')'
         self.cfgURL += '?maxReconnectAttempts=3,initialReconnectDelay=250,maxReconnectDelay=1000'
         self.client = Stomp(StompConfig(self.cfgURL,version=StompSpec.VERSION_1_1))
         self.LOG.info("Messaging client to ActiveMQ is connected. queueURLs=%s beamline=%s" % (queueURLs, beamlineID))
 
+    @property
+    def jolokia_port(self):
+        if self._jolokia_port:
+            return str(self._jolokia_port)
+        else:
+            return str(self.JOLOKIA_PORT)
 
     def getConfigURL(self):
         return self.cfgURL
@@ -102,7 +105,7 @@ class StompClient():
         if self.connected:
             host = self.client._transport.host
             try:
-                request = urllib.request.Request("http://%s:%s/%s" %(host, self.JOLOKIA_PORT, self.JOLOKIA_CONSUMER_COUNT_URL))
+                request = urllib.request.Request("http://%s:%s/%s" %(host, self.jolokia_port, self.JOLOKIA_CONSUMER_COUNT_URL))
                 request.add_header('Authorization', b'Basic ' + base64.b64encode(toBytes(self._JOLOKIA_USERNAME + ':' + self._JOLOKIA_PASSWORD)))
                 result = urllib.request.urlopen(request, timeout=1)
                 jres = json.load(result)
diff --git a/src/metadata_manager/MetaExperiment.py b/src/metadata_manager/MetaExperiment.py
index f384dff..b01e87c 100644
--- a/src/metadata_manager/MetaExperiment.py
+++ b/src/metadata_manager/MetaExperiment.py
@@ -98,7 +98,7 @@ class MetaExperiment (tango.LatestDeviceImpl):
                     traceback.print_exc(file=sys.stdout)
          
         # JMS client
-        self.client = StompClient(self.queueURLs, self.queueName, self.beamlineID)
+        self.client = StompClient(self.queueURLs, self.queueName, self.beamlineID, jolokia_port=self.jolokiaPort)
         self.info_stream("Configuration URL=%s" %self.client.getConfigURL())
         self.Connect()
 
@@ -284,6 +284,10 @@ class MetaExperimentClass(tango.DeviceClass):
             [tango.DevString, 
             "Name of the stomp queue for sending ingestion requests",
             ["/queue/icatIngest"] ],
+        'jolokiaPort':
+            [tango.DevInt,
+            "Jolokia port (same host as queueURLs)",
+            [8778] ]
         }
 
 
diff --git a/src/metadata_manager/MetadataManager.py b/src/metadata_manager/MetadataManager.py
index c0ef961..ed6c7ff 100644
--- a/src/metadata_manager/MetadataManager.py
+++ b/src/metadata_manager/MetadataManager.py
@@ -189,7 +189,7 @@ class MetadataManager (tango.LatestDeviceImpl):
         self.proxy = tango.DeviceProxy(self.get_name())
         # JMS client
         # we need to proxy to be created
-        self.client = StompClient(self.queueURLs, self.queueName, self.beamlineID, self)
+        self.client = StompClient(self.queueURLs, self.queueName, self.beamlineID, manager=self, jolokia_port=self.jolokiaPort)
         self.logger.info("Init MetadataManager. url=%s, queue=%s metadatamanager=%s beamline=%s" % (self.client.getConfigURL(), self.queueName, self.get_name(), self.beamlineID))
         self.Connect()
         # MetaExp client        
@@ -1092,7 +1092,11 @@ class MetadataManagerClass(tango.DeviceClass):
         'API_KEY':
             [tango.DevString, 
             "API_KEY for connecting to ICAT+",
-            [""] ]
+            [""] ],
+        'jolokiaPort':
+            [tango.DevInt,
+            "Jolokia port (same host as queueURLs)",
+            [8778] ]
         }
 
 
-- 
GitLab