#!/bin/bash
set -euo pipefail
DEFAULT_SESSION="ib_robot_trace"
REQUESTED_SESSION="${1:-${DEFAULT_SESSION}}"
OUTPUT_DIR="${2:-${HOME}/.ros/tracing}"
mkdir -p "${OUTPUT_DIR}"
session_exists() {
lttng list "$1" >/dev/null 2>&1
}
SESSION="${REQUESTED_SESSION}"
TRACE_DIR="${OUTPUT_DIR}/${SESSION}"
if session_exists "${SESSION}" || [[ -e "${TRACE_DIR}" ]]; then
if [[ $# -gt 0 ]]; then
echo "Error: tracing session '${SESSION}' already exists or output directory already exists at ${TRACE_DIR}." >&2
echo "Choose a different session name or clean up the existing trace first." >&2
exit 1
fi
suffix="$(date +%Y%m%d_%H%M%S)"
index=0
while true; do
candidate_suffix="${suffix}"
if [[ "${index}" -gt 0 ]]; then
candidate_suffix="${suffix}_${index}"
fi
SESSION="${DEFAULT_SESSION}_${candidate_suffix}"
TRACE_DIR="${OUTPUT_DIR}/${SESSION}"
if ! session_exists "${SESSION}" && [[ ! -e "${TRACE_DIR}" ]]; then
break
fi
index=$((index + 1))
done
echo "Note: default tracing session already exists; using unique session '${SESSION}'."
fi
lttng create "${SESSION}" --output="${TRACE_DIR}"
lttng enable-event --session "${SESSION}" --userspace 'ros2:*'
lttng enable-event --session "${SESSION}" --python 'ib_trace.*'
lttng start "${SESSION}"
echo "Trace '${SESSION}' ACTIVE → ${TRACE_DIR}"
echo "Stop with: bash scripts/tracing/stop_trace.sh ${SESSION}"