Merge branch 'ros2-trace' into analysis
This commit is contained in:
commit
29b1c6d50b
3 changed files with 96 additions and 46 deletions
51
tracetools_trace/tools/args.py
Normal file
51
tracetools_trace/tools/args.py
Normal 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)')
|
|
@ -15,13 +15,43 @@ 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:
|
) -> 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:
|
||||||
"""
|
"""
|
||||||
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.
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue