From ee439e0e47797dbb59a8bd6aaf313e5a48b75de8 Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Thu, 6 Jun 2019 11:00:46 +0000
Subject: [PATCH] SW-699: added max_content_size

---
 .../python/messagelogger/messagelogger.ini    |  2 +-
 .../python/messagelogger/messagelogger.py     | 31 +++++++++++--------
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/LCS/Messaging/python/messagelogger/messagelogger.ini b/LCS/Messaging/python/messagelogger/messagelogger.ini
index 8645acc0f7c..ccc9d6d53f7 100644
--- a/LCS/Messaging/python/messagelogger/messagelogger.ini
+++ b/LCS/Messaging/python/messagelogger/messagelogger.ini
@@ -1,5 +1,5 @@
 [program:messagelogger]
-command=/bin/bash -c 'source $LOFARROOT/lofarinit.sh;exec messagelogger'
+command=/bin/bash -c 'source $LOFARROOT/lofarinit.sh;exec messagelogger -m 768 -n'
 user=lofarsys
 stopsignal=INT ; KeyboardInterrupt
 stopasgroup=true ; bash does not propagate signals
diff --git a/LCS/Messaging/python/messagelogger/messagelogger.py b/LCS/Messaging/python/messagelogger/messagelogger.py
index 9f8c0369b01..3422c686237 100644
--- a/LCS/Messaging/python/messagelogger/messagelogger.py
+++ b/LCS/Messaging/python/messagelogger/messagelogger.py
@@ -37,11 +37,16 @@ from lofar.common.util import waitForInterrupt
 
 class MessageLogger(BusListener):
     class _Handler(AbstractMessageHandler):
-        def __init__(self, remove_content_newlines: bool):
-            self.remove_content_newlines = remove_content_newlines
+        def __init__(self, remove_content_newlines: bool, max_content_size: int = -1):
+            self._remove_content_newlines = remove_content_newlines
+            self._max_content_size = max_content_size
 
         def handle_message(self, msg: LofarMessage):
-            content = str(msg.content).replace(linesep, " ") if self.remove_content_newlines else str(msg.content)
+            content = str(msg.content).replace(linesep, " ") if self._remove_content_newlines else str(msg.content)
+
+            if self._max_content_size > 0 and len(content) > self._max_content_size:
+                content = content[:self._max_content_size] + "..."
+
             logger.info("%s subject='%s' %s%s%scontent: %s",
                         msg.__class__.__name__,
                         msg.subject,
@@ -52,9 +57,10 @@ class MessageLogger(BusListener):
             return True
 
     def __init__(self, exchange:str=DEFAULT_BUSNAME, routing_key:str="#", broker:str=DEFAULT_BROKER,
-                 remove_content_newlines: bool=False):
+                 remove_content_newlines: bool=False, max_content_size: int=-1):
         super(MessageLogger, self).__init__(handler_type=MessageLogger._Handler,
-                                            handler_kwargs={'remove_content_newlines': remove_content_newlines},
+                                            handler_kwargs={'remove_content_newlines': remove_content_newlines,
+                                                            'max_content_size': max_content_size},
                                             exchange=exchange,
                                             routing_key=routing_key,
                                             num_threads=1,
@@ -65,27 +71,26 @@ def main():
 
     # Check the invocation arguments
     parser = OptionParser('%prog [options]', description='run the messegelogger, which logs each received message')
-    parser.add_option('-q', '--broker', dest='broker', type='string', default=DEFAULT_BROKER,
+    parser.add_option('-b', '--broker', dest='broker', type='string', default=DEFAULT_BROKER,
                       help='Address of the messaging broker, default: %default')
-    parser.add_option("-b", "--busname", dest="busname", type="string", default=DEFAULT_BUSNAME,
+    parser.add_option("-e", "--exchange", dest="exchange", type="string", default=DEFAULT_BUSNAME,
                       help="Name of the bus (exchange) to receive messages from. [default: %default]")
     parser.add_option("-r", "--routing_key", dest="routing_key", type="string", default="#",
                       help="filter messages on by subject using this routing_key. #=all. [default: %default]")
     parser.add_option("-n", "--no_newlines", dest="no_newlines", action='store_true',
                       help="remove newlines in message content, so we have single line log messages")
-    parser.add_option("-V", "--verbose", dest="verbose", action='store_true',
-                      help="more verbose logging")
+    parser.add_option("-m", "--max_content_size", dest="max_content_size", type="int", default=-1,
+                      help="delimit the logged content to at most <max_content_size> characters (or all if -1). [default: %default]")
     options, args = parser.parse_args()
 
-    logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
-                        level=logging.DEBUG if options.verbose else logging.INFO)
+    logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
 
     logger.info("**************************")
     logger.info("* starting messagelogger *")
     logger.info("**************************")
 
-    with MessageLogger(exchange=options.busname, routing_key=options.routing_key,
-                       broker=options.broker, remove_content_newlines=options.no_newlines):
+    with MessageLogger(exchange=options.exchange, routing_key=options.routing_key, broker=options.broker,
+                       remove_content_newlines=options.no_newlines, max_content_size=options.max_content_size):
         waitForInterrupt()
 
 __all__ = ['MessageLogger', 'main']
-- 
GitLab