Merge branch 'ros2-trace' into analysis

This commit is contained in:
Christophe Bedard 2019-06-24 07:17:59 +02:00
commit 29b1c6d50b
3 changed files with 96 additions and 46 deletions

View file

@ -0,0 +1,51 @@
import argparse
import time
from . import names
class DefaultArgValueCompleter:
"""Callable returning an arg's default value."""
def __init__(self, arg):
default = arg.default
self.list = default if isinstance(default, list) else [default]
def __call__(self, **kwargs):
return self.list
def parse_args():
"""
Parse args for tracing.
"""
parser = argparse.ArgumentParser(description='Setup and launch an LTTng tracing session.')
add_arguments(parser)
return parser.parse_args()
def add_arguments(parser):
parser.add_argument(
'--session-name', '-s', dest='session_name',
default=f'session-{time.strftime("%Y%m%d%H%M%S")}',
help='the name of the tracing session (default: session-YYYYMMDDHHMMSS)')
parser.add_argument(
'--path', '-p', dest='path',
default='/tmp',
help='path of the base directory for trace data (default: %(default)s)')
arg = parser.add_argument(
'--ust', '-u', nargs='*', dest='events_ust', default=names.DEFAULT_EVENTS_ROS,
help='the ROS UST events to enable (default: all events) '
'[to disable all UST events, '
'provide this flag without any event name]')
arg.completer = DefaultArgValueCompleter(arg)
arg = parser.add_argument(
'--kernel', '-k', nargs='*', dest='events_kernel',
default=names.DEFAULT_EVENTS_KERNEL,
help='the kernel events to enable (default: all events) '
'[to disable all UST events, '
'provide this flag without any event name]')
arg.completer = DefaultArgValueCompleter(arg)
parser.add_argument(
'--list', '-l', dest='list', action='store_true',
help='display lists of enabled events (default: %(default)s)')

View file

@ -15,12 +15,42 @@ from .names import ( # noqa: E402
) )
def lttng_setup( def lttng_init(
session_name: str, session_name: str,
full_path: str, full_path: str,
ros_events: List[str] = DEFAULT_EVENTS_ROS, ros_events: List[str] = DEFAULT_EVENTS_ROS,
kernel_events: List[str] = DEFAULT_EVENTS_KERNEL, kernel_events: List[str] = DEFAULT_EVENTS_KERNEL,
context_names: List[str] = DEFAULT_CONTEXT, context_names: List[str] = DEFAULT_CONTEXT
) -> None:
"""
Set up and start LTTng session.
:param session_name: the name of the session
:param full_path: the full path to the main directory to write trace data to
:param ros_events: list of ROS events to enable
:param kernel_events: list of kernel events to enable
:param context_names: list of context elements to enable
"""
_lttng_setup(session_name, full_path, ros_events, kernel_events, context_names)
_lttng_start(session_name)
def lttng_fini(session_name: str) -> None:
"""
Stop and destroy LTTng session.
:param session_name: the name of the session
"""
_lttng_stop(session_name)
_lttng_destroy(session_name)
def _lttng_setup(
session_name: str,
full_path: str,
ros_events: List[str] = DEFAULT_EVENTS_ROS,
kernel_events: List[str] = DEFAULT_EVENTS_KERNEL,
context_names: List[str] = DEFAULT_CONTEXT
) -> None: ) -> None:
""" """
Set up LTTng session, with events and context. Set up LTTng session, with events and context.
@ -83,7 +113,7 @@ def lttng_setup(
_add_context(enabled_handles, context_list) _add_context(enabled_handles, context_list)
def lttng_start(session_name: str) -> None: def _lttng_start(session_name: str) -> None:
""" """
Start LTTng session, and check for errors. Start LTTng session, and check for errors.
@ -94,7 +124,7 @@ def lttng_start(session_name: str) -> None:
raise RuntimeError(f'failed to start tracing: {lttng.strerror(result)}') raise RuntimeError(f'failed to start tracing: {lttng.strerror(result)}')
def lttng_stop(session_name: str) -> None: def _lttng_stop(session_name: str) -> None:
""" """
Stop LTTng session, and check for errors. Stop LTTng session, and check for errors.
@ -105,7 +135,7 @@ def lttng_stop(session_name: str) -> None:
raise RuntimeError(f'failed to stop tracing: {lttng.strerror(result)}') raise RuntimeError(f'failed to stop tracing: {lttng.strerror(result)}')
def lttng_destroy(session_name: str) -> None: def _lttng_destroy(session_name: str) -> None:
""" """
Destroy LTTng session, and check for errors. Destroy LTTng session, and check for errors.

View file

@ -1,72 +1,41 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Entrypoint/script to setup and start an LTTng tracing session # Entrypoint/script to setup and start an LTTng tracing session
import argparse
import os import os
import time
from tracetools_trace.tools import args
from tracetools_trace.tools import lttng from tracetools_trace.tools import lttng
from tracetools_trace.tools import names from tracetools_trace.tools import names
def parse_args():
parser = argparse.ArgumentParser(description='Setup and launch an LTTng tracing session.')
parser.add_argument(
'--session-name', '-s', dest='session_name',
default=f'session-{time.strftime("%Y%m%d%H%M%S")}',
help='the name of the tracing session (default: session-YYYYMMDDHHMMSS)')
parser.add_argument(
'--path', '-p', dest='path',
default='/tmp',
help='path of the base directory for trace data (default: %(default)s)')
parser.add_argument(
'--ust', '-u', nargs='*', dest='events_ust', default=names.DEFAULT_EVENTS_ROS,
help='the ROS UST events to enable (default: all events) '
'[to disable all UST events, '
'provide this flag without any event name]')
parser.add_argument(
'--kernel', '-k', nargs='*', dest='events_kernel',
default=names.DEFAULT_EVENTS_KERNEL,
help='the kernel events to enable (default: all events) '
'[to disable all UST events, '
'provide this flag without any event name]')
parser.add_argument(
'--list', '-l', dest='list', action='store_true',
help='display lists of enabled events (default: %(default)s)')
return parser.parse_args()
def main(): def main():
args = parse_args() params = args.parse_args()
session_name = args.session_name session_name = params.session_name
base_path = args.path base_path = params.path
full_path = os.path.join(base_path, session_name) full_path = os.path.join(base_path, session_name)
ros_events = args.events_ust ros_events = params.events_ust
kernel_events = args.events_kernel kernel_events = params.events_kernel
ust_enabled = len(ros_events) > 0 ust_enabled = len(ros_events) > 0
kernel_enabled = len(kernel_events) > 0 kernel_enabled = len(kernel_events) > 0
if ust_enabled: if ust_enabled:
print(f'UST tracing enabled ({len(ros_events)} events)') print(f'UST tracing enabled ({len(ros_events)} events)')
if args.list: if params.list:
print(f'\tevents: {ros_events}') print(f'\tevents: {ros_events}')
else: else:
print('UST tracing disabled') print('UST tracing disabled')
if kernel_enabled: if kernel_enabled:
print(f'kernel tracing enabled ({len(kernel_events)} events)') print(f'kernel tracing enabled ({len(kernel_events)} events)')
if args.list: if params.list:
print(f'\tevents: {kernel_events}') print(f'\tevents: {kernel_events}')
else: else:
print('kernel tracing disabled') print('kernel tracing disabled')
lttng.lttng_setup(session_name, full_path, ros_events=ros_events, kernel_events=kernel_events)
print(f'writting tracing session to: {full_path}') print(f'writting tracing session to: {full_path}')
input('press enter to start...') input('press enter to start...')
lttng.lttng_start(session_name) lttng.lttng_init(session_name, full_path, ros_events=ros_events, kernel_events=kernel_events)
input('press enter to stop...') input('press enter to stop...')
print('stopping & destroying tracing session') print('stopping & destroying tracing session')
lttng.lttng_stop(session_name) lttng.lttng_fini(session_name)
lttng.lttng_destroy(session_name)