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