From 352690044bbf1362829d7a933b1bb312e9eb8d70 Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Mon, 24 Jun 2019 16:06:58 +0200 Subject: [PATCH] Extract trace reading functions --- tracetools_analysis/package.xml | 2 +- .../tracetools_analysis/analysis/handler.py | 7 ++-- .../analysis/lttng_models.py | 15 --------- .../analysis/ros2_processor.py | 3 +- .../tracetools_analysis/conversion/ctf.py | 33 +++---------------- 5 files changed, 11 insertions(+), 49 deletions(-) diff --git a/tracetools_analysis/package.xml b/tracetools_analysis/package.xml index a23316a..064fa3d 100644 --- a/tracetools_analysis/package.xml +++ b/tracetools_analysis/package.xml @@ -9,7 +9,7 @@ Ingo Luetkebohle Christophe Bedard - python3-babeltrace + tracetools_read ament_copyright ament_flake8 diff --git a/tracetools_analysis/tracetools_analysis/analysis/handler.py b/tracetools_analysis/tracetools_analysis/analysis/handler.py index ef4298f..da7c2de 100644 --- a/tracetools_analysis/tracetools_analysis/analysis/handler.py +++ b/tracetools_analysis/tracetools_analysis/analysis/handler.py @@ -5,9 +5,10 @@ from typing import Callable from typing import Dict from typing import List +from tracetools_read.utils import get_event_name +from tracetools_read.utils import get_field + from .lttng_models import EventMetadata -from .lttng_models import get_field -from .lttng_models import get_name class EventHandler(): @@ -31,7 +32,7 @@ class EventHandler(): self._handle(event) def _handle(self, event: Dict[str, str]) -> None: - event_name = get_name(event) + event_name = get_event_name(event) handler_function = self._handler_map.get(event_name, None) if handler_function is not None: pid = get_field( diff --git a/tracetools_analysis/tracetools_analysis/analysis/lttng_models.py b/tracetools_analysis/tracetools_analysis/analysis/lttng_models.py index 2c54719..62b86ca 100644 --- a/tracetools_analysis/tracetools_analysis/analysis/lttng_models.py +++ b/tracetools_analysis/tracetools_analysis/analysis/lttng_models.py @@ -1,20 +1,5 @@ # Model objects for LTTng traces/events -from typing import Any -from typing import Dict - - -def get_field(event: Dict, field_name: str, default=None, raise_if_not_found=True) -> Any: - field_value = event.get(field_name, default) - # If enabled, raise exception as soon as possible to avoid headaches - if raise_if_not_found and field_value is None: - raise AttributeError(f'event field "{field_name}" not found!') - return field_value - - -def get_name(event: Dict) -> str: - return get_field(event, '_name') - class EventMetadata(): """Container for event metadata.""" diff --git a/tracetools_analysis/tracetools_analysis/analysis/ros2_processor.py b/tracetools_analysis/tracetools_analysis/analysis/ros2_processor.py index 8110fa7..e9c6eae 100644 --- a/tracetools_analysis/tracetools_analysis/analysis/ros2_processor.py +++ b/tracetools_analysis/tracetools_analysis/analysis/ros2_processor.py @@ -3,9 +3,10 @@ from typing import Dict from typing import List +from tracetools_read.utils import get_field + from .data_model import DataModel from .handler import EventHandler -from .lttng_models import get_field from .lttng_models import EventMetadata diff --git a/tracetools_analysis/tracetools_analysis/conversion/ctf.py b/tracetools_analysis/tracetools_analysis/conversion/ctf.py index 826231f..e3b329f 100644 --- a/tracetools_analysis/tracetools_analysis/conversion/ctf.py +++ b/tracetools_analysis/tracetools_analysis/conversion/ctf.py @@ -2,14 +2,7 @@ from pickle import Pickler -import babeltrace - -# List of ignored CTF fields -_IGNORED_FIELDS = [ - 'content_size', 'cpu_id', 'events_discarded', 'id', 'packet_size', 'packet_seq_num', - 'stream_id', 'stream_instance_id', 'timestamp_end', 'timestamp_begin', 'magic', 'uuid', 'v' -] -_DISCARD = 'events_discarded' +from tracetools_read import utils def ctf_to_pickle(trace_directory: str, target: Pickler) -> int: @@ -21,9 +14,8 @@ def ctf_to_pickle(trace_directory: str, target: Pickler) -> int: :return: the number of events written """ # add traces - tc = babeltrace.TraceCollection() print(f'Importing trace directory: {trace_directory}') - tc.add_traces_recursive(trace_directory, 'ctf') + ctf_events = utils._get_trace_ctf_events(trace_directory) count = 0 count_written = 0 @@ -31,7 +23,7 @@ def ctf_to_pickle(trace_directory: str, target: Pickler) -> int: # traced = set() # PID_KEYS = ['vpid', 'pid'] - for event in tc.events: + for event in ctf_events: count += 1 # pid = None # for key in PID_KEYS: @@ -40,25 +32,8 @@ def ctf_to_pickle(trace_directory: str, target: Pickler) -> int: # break # Write all for now - pod = _ctf_event_to_pod(event) + pod = utils.event_to_dict(event) target.dump(pod) count_written += 1 return count_written - - -def _ctf_event_to_pod(ctf_event): - """ - Convert name, timestamp, and all other keys except those in IGNORED_FIELDS into a dictionary. - - :param ctf_element: The element to convert - :type ctf_element: babeltrace.Element - :return: - :return type: dict - """ - pod = {'_name': ctf_event.name, '_timestamp': ctf_event.timestamp} - if hasattr(ctf_event, _DISCARD) and ctf_event[_DISCARD] > 0: - print(ctf_event[_DISCARD]) - for key in [key for key in ctf_event.keys() if key not in _IGNORED_FIELDS]: - pod[key] = ctf_event[key] - return pod