#!/bin/sh
# knelperf-toolbox — front door to the on-demand perf toolbox LXC on this node.
# usage: knelperf-toolbox run '<cmd>'   (starts the LXC if stopped, runs, leaves it up)
#        knelperf-toolbox shell         (interactive)
#        knelperf-toolbox start|stop|status
# The LXC (vmid 950) is STOPPED at rest — zero footprint; stop it when done.
# Docs: https://community.turnsys.com/t/328
VMID=${KNELPERF_TOOLBOX_VMID:-950}

ensure_running() {
  if ! pct status "$VMID" 2>/dev/null | grep -q running; then
    pct start "$VMID"
    i=0
    until pct exec "$VMID" -- true 2>/dev/null; do
      i=$((i + 1)); [ $i -gt 45 ] && { echo "boot timeout" >&2; return 1; }
      sleep 2
    done
  fi
  # host-kernel analysis mounts — pct skips virtual-fs bind sources, so
  # tracefs/debugfs are mounted at runtime (container is privileged +
  # apparmor unconfined precisely for this).
  pct exec "$VMID" -- sh -c '
    mountpoint -q /sys/kernel/tracing || mount -t tracefs none /sys/kernel/tracing 2>/dev/null
    mountpoint -q /sys/kernel/debug || mount -t debugfs none /sys/kernel/debug 2>/dev/null'
}

case "${1:-help}" in
  run)    shift; ensure_running && pct exec "$VMID" -- sh -c "$*" ;;
  shell)  ensure_running && pct enter "$VMID" ;;
  start)  ensure_running ;;
  stop)   pct shutdown "$VMID" --timeout 60 2>/dev/null || pct stop "$VMID" ;;
  status) pct status "$VMID" 2>/dev/null || echo "vmid $VMID not present" ;;
  *)      sed -n '2,6p' "$0" | sed 's/^# \?//' ;;
esac
