diff --git a/tracetools_read/tracetools_read/__init__.py b/tracetools_read/tracetools_read/__init__.py index c689173..3c00fb4 100644 --- a/tracetools_read/tracetools_read/__init__.py +++ b/tracetools_read/tracetools_read/__init__.py @@ -12,73 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Module with functions for reading traces.""" +"""Module with trace-reading utilities.""" from typing import Any from typing import Dict -from typing import Iterable -from typing import List - -import babeltrace DictEvent = Dict[str, Any] -def get_trace_ctf_events(trace_directory: str) -> Iterable[babeltrace.babeltrace.Event]: - """ - Get the events of a trace. - - :param trace_directory: the path to the main/top trace directory - :return: events iterable - """ - tc = babeltrace.TraceCollection() - tc.add_traces_recursive(trace_directory, 'ctf') - return tc.events - - -def get_trace_events(trace_directory: str) -> List[DictEvent]: - """ - Get the events of a trace. - - :param trace_directory: the path to the main/top trace directory - :return: events - """ - return [event_to_dict(event) for event in get_trace_ctf_events(trace_directory)] - - -# List of ignored CTF fields -_IGNORED_FIELDS = [ - 'content_size', - 'events_discarded', - 'id', - 'packet_size', - 'packet_seq_num', - 'stream_id', - 'stream_instance_id', - 'timestamp_end', - 'timestamp_begin', - 'magic', - 'uuid', - 'v', -] -_DISCARD = 'events_discarded' - - -def event_to_dict(event: babeltrace.babeltrace.Event) -> DictEvent: - """ - Convert name, timestamp, and all other keys except those in IGNORED_FIELDS into a dictionary. - - :param event: the event to convert - :return: the event as a dictionary - """ - if hasattr(event, _DISCARD) and event[_DISCARD] > 0: - print(event[_DISCARD]) - meta = {'_name': event.name, '_timestamp': event.timestamp} - data = {key: event[key] for key in event.keys() if key not in _IGNORED_FIELDS} - return {**meta, **data} - - def get_field( event: DictEvent, field_name: str, diff --git a/tracetools_read/tracetools_read/trace.py b/tracetools_read/tracetools_read/trace.py new file mode 100644 index 0000000..02d2c27 --- /dev/null +++ b/tracetools_read/tracetools_read/trace.py @@ -0,0 +1,79 @@ +# Copyright 2019 Robert Bosch GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module with functions for reading traces.""" + +from typing import Iterable +from typing import List + +import babeltrace + +from . import DictEvent + + +BabeltraceEvent = babeltrace.babeltrace.Event + + +def get_trace_ctf_events(trace_directory: str) -> Iterable[BabeltraceEvent]: + """ + Get the events of a trace. + + :param trace_directory: the path to the main/top trace directory + :return: events iterable + """ + tc = babeltrace.TraceCollection() + tc.add_traces_recursive(trace_directory, 'ctf') + return tc.events + + +def get_trace_events(trace_directory: str) -> List[DictEvent]: + """ + Get the events of a trace. + + :param trace_directory: the path to the main/top trace directory + :return: events + """ + return [event_to_dict(event) for event in get_trace_ctf_events(trace_directory)] + + +# List of ignored CTF fields +_IGNORED_FIELDS = [ + 'content_size', + 'events_discarded', + 'id', + 'packet_size', + 'packet_seq_num', + 'stream_id', + 'stream_instance_id', + 'timestamp_end', + 'timestamp_begin', + 'magic', + 'uuid', + 'v', +] +_DISCARD = 'events_discarded' + + +def event_to_dict(event: BabeltraceEvent) -> DictEvent: + """ + Convert name, timestamp, and all other keys except those in IGNORED_FIELDS into a dictionary. + + :param event: the event to convert + :return: the event as a dictionary + """ + if hasattr(event, _DISCARD) and event[_DISCARD] > 0: + print(event[_DISCARD]) + meta = {'_name': event.name, '_timestamp': event.timestamp} + data = {key: event[key] for key in event.keys() if key not in _IGNORED_FIELDS} + return {**meta, **data} diff --git a/tracetools_test/tracetools_test/case.py b/tracetools_test/tracetools_test/case.py index 94bb291..9e6a899 100644 --- a/tracetools_test/tracetools_test/case.py +++ b/tracetools_test/tracetools_test/case.py @@ -25,7 +25,7 @@ from tracetools_read import get_event_name from tracetools_read import get_event_timestamp from tracetools_read import get_field from tracetools_read import get_procname -from tracetools_read import get_trace_events +from tracetools_read.trace import get_trace_events from .utils import cleanup_trace from .utils import get_event_names