From c98d525d4b5cd968fec1b260b2539bb10ff8b0c1 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Fri, 7 Jun 2019 10:57:28 +0200 Subject: [PATCH] Extract EventHandler class --- tracetools_analysis/analysis/handler.py | 42 +++++++++++++++++++ tracetools_analysis/analysis/ros_processor.py | 28 ++----------- 2 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 tracetools_analysis/analysis/handler.py diff --git a/tracetools_analysis/analysis/handler.py b/tracetools_analysis/analysis/handler.py new file mode 100644 index 0000000..4b5412d --- /dev/null +++ b/tracetools_analysis/analysis/handler.py @@ -0,0 +1,42 @@ +# Event handler + +import sys +from . import lttng_models + + +class EventHandler(): + """Base event handling class.""" + + def __init__(self, handler_map): + """ + Constructor. + + :param handler_map (map(str: function)): the mapping from event name to handling method + """ + self._handler_map = handler_map + + def process_events(self, events): + """ + Process events by calling their handlers. + + :param events (list(dict(str:str))): the events to process + """ + for event in events: + self._handle(event) + + def _handle(self, event): + event_name = lttng_models.get_name(event) + handler_function = self._handler_map.get(event_name, None) + if handler_function is not None: + pid = lttng_models.get_field(event, + 'vpid', + default=lttng_models.get_field(event, 'pid')) + tid = lttng_models.get_field(event, + 'vtid', + default=lttng_models.get_field(event, 'tid')) + timestamp = lttng_models.get_field(event, '_timestamp') + procname = lttng_models.get_field(event, 'procname') + metadata = lttng_models.EventMetadata(event_name, pid, tid, timestamp, procname) + handler_function(event, metadata) + else: + print(f'unhandled event name: {event_name}', file=sys.stderr) diff --git a/tracetools_analysis/analysis/ros_processor.py b/tracetools_analysis/analysis/ros_processor.py index 601b2da..abfe5bc 100644 --- a/tracetools_analysis/analysis/ros_processor.py +++ b/tracetools_analysis/analysis/ros_processor.py @@ -1,8 +1,8 @@ # Process trace events and create ROS model import sys -from .lttng_models import EventMetadata, get_field, get_name - +from .lttng_models import get_field +from .handler import EventHandler def ros_process(events): """ @@ -16,7 +16,7 @@ def ros_process(events): return processor -class RosProcessor(): +class RosProcessor(EventHandler): """ ROS-aware event processing/handling class. @@ -38,28 +38,6 @@ class RosProcessor(): 'ros2:rclcpp_subscription_callback_end': self._handle_subscription_callback_end, } - def process_events(self, events): - """ - Process events. - - :param events (list(dict(str:str))): the events to process - """ - for event in events: - self._handle(event) - - def _handle(self, event): - event_name = get_name(event) - handler_function = self._handler_map.get(event_name, None) - if handler_function is not None: - pid = get_field(event, 'vpid', default=get_field(event, 'pid')) - tid = get_field(event, 'vtid', default=get_field(event, 'tid')) - timestamp = get_field(event, '_timestamp') - procname = get_field(event, 'procname') - metadata = EventMetadata(event_name, pid, tid, timestamp, procname) - handler_function(event, metadata) - else: - print(f'unhandled event name: {event_name}', file=sys.stderr) - def _handle_subscription_init(self, event, metadata): # TODO pass