#!/usr/bin/env bash
###############################################################################
# run-lacp-rx-distribution.sh  (workstation wrapper)
#
# One-shot orchestrator: deploys scripts/lacp-rx-distribution.sh to BOTH
# tsys6 (receiver) and tsys7 (sender), runs them in the right order, then
# scps both logs back to returned-logs/iperf/.
#
# Run from the workstation:
#     bash scripts/run-lacp-rx-distribution.sh
#
# Idempotent: safe to re-run. iperf3 is killed on both hosts first.
###############################################################################
set -uo pipefail

SSH=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 \
     -o StrictHostKeyChecking=accept-new)
SCP=(-o BatchMode=yes -o ConnectTimeout=8 -o StrictHostKeyChecking=accept-new)

RECV="pfv-tsys6"        # receiver (we care most about its RX split)
SEND="pfv-tsys7"        # sender (control: its TX split)
LOCAL_LOG_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/returned-logs/iperf"
SCRIPT="lacp-rx-distribution.sh"
LOCAL_SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/scripts/${SCRIPT}"
REMOTE_SCRIPT="/root/${SCRIPT}"

mkdir -p "$LOCAL_LOG_DIR"

echo "==================================================================="
echo " LACP per-slave RX/TX distribution test"
echo " Receiver: $RECV (10.100.100.6)   Sender: $SEND (10.100.100.7)"
echo "==================================================================="
echo ""

# 0. Preflight: confirm SSH and iperf3 on both hosts
echo "--- preflight (ssh + iperf3 + bond0) ---"
for h in "$RECV" "$SEND"; do
    printf '  %-12s ' "$h"
    ssh "${SSH[@]}" "root@$h" \
        'command -v iperf3 >/dev/null && ip=$(command -v iperf3) || ip=MISSING
         [ -r /proc/net/bonding/bond0 ] && b=OK || b=NO-BOND0
         printf "iperf3=%s bond0=%s host=%s\n" "$ip" "$b" "$(uname -n)"' \
        2>&1 | head -1
done
echo ""

# 1. Copy the script to both hosts + chmod
echo "--- deploy $SCRIPT to both hosts ---"
for h in "$RECV" "$SEND"; do
    printf '  %-12s ' "$h"
    scp "${SCP[@]}" "$LOCAL_SCRIPT" "root@$h:$REMOTE_SCRIPT" >/dev/null 2>&1 \
        && ssh "${SSH[@]}" "root@$h" "chmod +x $REMOTE_SCRIPT" \
        && echo "deployed + chmod +x" \
        || echo "DEPLOY FAILED"
done
echo ""

# 2. Kill any stale iperf3 on both hosts
echo "--- cleanup stale iperf3 ---"
for h in "$RECV" "$SEND"; do
    ssh "${SSH[@]}" "root@$h" 'pkill -x iperf3 2>/dev/null; true' 2>/dev/null
done
echo ""

# 3. Start RECEIVER in background (one-shot server, writes /root/lacp-rx-receiver.log)
echo "--- starting receiver on $RECV (background) ---"
ssh "${SSH[@]}" "root@$RECV" \
    "nohup bash $REMOTE_SCRIPT > /root/lacp-rx-receiver.console 2>&1 &" 2>/dev/null
echo "  receiver launched; waiting 5s for it to start iperf3 -s -1 ..."
sleep 5
echo ""

# 4. Run SENDER (foreground; ~15s with the default 12s test + 3s pre-sleep)
echo "--- running sender on $SEND (foreground, ~20s) ---"
ssh "${SSH[@]}" "root@$SEND" \
    "bash $REMOTE_SCRIPT" 2>&1 | sed 's/^/  [sender] /'
echo ""

# 5. Give receiver a moment to finish writing its log
sleep 3

# 6. Fetch logs back
echo "--- fetching logs ---"
for f in lacp-rx-receiver.log lacp-rx-receiver.console lacp-rx-sender.log; do
    src=""
    case "$f" in
        lacp-rx-receiver*) src="$RECV" ;;
        lacp-rx-sender*)   src="$SEND" ;;
    esac
    printf '  %-28s <- %s : ' "$f" "$src"
    if scp "${SCP[@]}" "root@$src:/root/$f" "$LOCAL_LOG_DIR/$f" >/dev/null 2>&1; then
        echo "OK ($(wc -c < "$LOCAL_LOG_DIR/$f" 2>/dev/null) bytes)"
    else
        echo "MISSING"
    fi
done
echo ""

# 7. Show the receiver log (the decisive one)
echo "==================================================================="
echo " RECEIVER LOG ($RECV — the decisive side)"
echo "==================================================================="
cat "$LOCAL_LOG_DIR/lacp-rx-receiver.log" 2>/dev/null || echo "(no log)"
echo ""
echo "==================================================================="
echo " SENDER LOG ($SEND — control)"
echo "==================================================================="
cat "$LOCAL_LOG_DIR/lacp-rx-sender.log" 2>/dev/null || echo "(no log)"
echo ""
echo "==================================================================="
echo " Local copies in: $LOCAL_LOG_DIR/"
echo "==================================================================="
