Extract EventHandler class
This commit is contained in:
parent
699347e461
commit
c98d525d4b
2 changed files with 45 additions and 25 deletions
42
tracetools_analysis/analysis/handler.py
Normal file
42
tracetools_analysis/analysis/handler.py
Normal 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)
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue