Add 'tracetools_launch/' from commit 'f673331bd1'

git-subtree-dir: tracetools_launch
git-subtree-mainline: a507bbce6e
git-subtree-split: f673331bd1
This commit is contained in:
Christophe Bedard 2019-06-24 10:01:57 +02:00
commit c9d2f35887
7 changed files with 140 additions and 0 deletions

3
tracetools_launch/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*~
*.pyc

View file

@ -0,0 +1,21 @@
# Example launch file for the Trace action
from launch import LaunchDescription
from launch_ros.actions import Node
from tracetools_launch.trace import Trace
def generate_launch_description():
return LaunchDescription([
Trace(
session_name='my-tracing-session',
base_path='/tmp'),
Node(
package='examples_rclcpp_minimal_publisher',
node_executable='publisher_member_function',
output='screen'),
Node(
package='examples_rclcpp_minimal_subscriber',
node_executable='subscriber_member_function',
output='screen'),
])

View file

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="2">
<name>tracetools_launch</name>
<version>0.0.1</version>
<description>Launch integration for tracing</description>
<maintainer email="fixed-term.christophe.bourquebedard@de.bosch.com">Christophe Bedard</maintainer>
<license>TODO</license>
<author email="fixed-term.christophe.bourquebedard@de.bosch.com">Christophe Bedard</author>
<depend>launch</depend>
<depend>launch_ros</depend>
<depend>tracetools_trace</depend>
<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
<test_depend>ament_pep257</test_depend>
<test_depend>python3-pytest</test_depend>
<export>
<build_type>ament_python</build_type>
</export>
</package>

View file

@ -0,0 +1,4 @@
[develop]
script-dir=$base/lib/tracetools_launch
[install]
install-scripts=$base/lib/tracetools_launch

View file

@ -0,0 +1,26 @@
import glob
from setuptools import find_packages
from setuptools import setup
package_name = 'tracetools_launch'
setup(
name=package_name,
version='0.0.1',
packages=find_packages(exclude=['test']),
data_files=[
('share/' + package_name, ['package.xml']),
('share/' + package_name + '/launch', glob.glob('launch/*.launch.py')),
],
install_requires=['setuptools'],
maintainer='Christophe Bedard',
maintainer_email='fixed-term.christophe.bourquebedard@de.bosch.com',
author='Christophe Bedard',
author_email='fixed-term.christophe.bourquebedard@de.bosch.com',
# url='',
keywords=['ROS'],
description='Launch integration for tracing',
license='TODO',
tests_require=['pytest'],
)

View file

@ -0,0 +1,63 @@
"""Module for the Trace action."""
import os
from typing import List
from typing import Optional
from launch.action import Action
from launch.event import Event
from launch.event_handlers import OnShutdown
from launch.launch_context import LaunchContext
from tracetools_trace.tools import lttng
from tracetools_trace.tools import names
class Trace(Action):
"""
Tracing action for launch.
Sets up and enables tracing through a launch file description.
"""
def __init__(
self,
*,
session_name: str,
base_path: str = '/tmp',
events_ust: List[str] = names.DEFAULT_EVENTS_ROS,
events_kernel: List[str] = names.DEFAULT_EVENTS_KERNEL,
**kwargs,
) -> None:
"""Constructor."""
super().__init__(**kwargs)
self.__session_name = session_name
self.__path = os.path.join(base_path, session_name)
self.__events_ust = events_ust
self.__events_kernel = events_kernel
def execute(self, context: LaunchContext) -> Optional[List[Action]]:
# TODO make sure this is done as late as possible
context.register_event_handler(OnShutdown(on_shutdown=self._destroy))
# TODO make sure this is done as early as possible
self._setup()
def _setup(self) -> None:
print('setting up tracing!')
lttng.lttng_init(
self.__session_name,
self.__path,
ros_events=self.__events_ust,
kernel_events=self.__events_kernel)
def _destroy(self, event: Event, context: LaunchContext) -> None:
print('destroying tracing session!')
lttng.lttng_fini(self.__session_name)
def __repr__(self):
return (
"Trace("
f"session_name='{self.__session_name}', "
f"path='{self.__path}', "
f"num_events_ust={len(self.__events_ust)}, "
f"num_events_kernel={len(self.__events_kernel)})"
)