Extract EventHandler class

This commit is contained in:
Christophe Bedard 2019-06-07 10:57:28 +02:00
parent 699347e461
commit c98d525d4b
2 changed files with 45 additions and 25 deletions

View file

@ -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)

View file

@ -1,8 +1,8 @@
# Process trace events and create ROS model # Process trace events and create ROS model
import sys 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): def ros_process(events):
""" """
@ -16,7 +16,7 @@ def ros_process(events):
return processor return processor
class RosProcessor(): class RosProcessor(EventHandler):
""" """
ROS-aware event processing/handling class. ROS-aware event processing/handling class.
@ -38,28 +38,6 @@ class RosProcessor():
'ros2:rclcpp_subscription_callback_end': self._handle_subscription_callback_end, '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): def _handle_subscription_init(self, event, metadata):
# TODO # TODO
pass pass