#!/usr/bin/env bash
set -euo pipefail

# Dauer des Tests (Default: 10 Minuten, Format z.B. „5m", „600")
DURATION="${1:-10m}"

# Verzeichnisse / Geräte für File‑IO
DATA_DRIVE="${HOME}/test/sysbench"    # bitte anpassen
SYSTEM_DRIVE="/mnt/nextcloud/test/sysbench"     # bitte anpassen
CURRENT_DIR=$(pwd)

# Größe und Einstellungen für sysbench-File‑IO
FILE_TOTAL_SIZE="1G"
FILE_NUM="4"
TEST_MODE="rndrw"
EXTRA_FLAGS="--file-extra-flags=direct"

echo "== Vorbereitung: File‑IO Testdateien erstellen =="
echo "testmode=${TEST_MODE}"

cd ${DATA_DRIVE}
echo "preparing sysbench on ${DATA_DRIVE}"
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    prepare &
cd ${SYSTEM_DRIVE}
echo "preparing sysbench on ${SYSTEM_DRIVE}"
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    prepare
wait
echo "== Vorbereitung fertig, starte Stresstest für ${DURATION} =="

# CPU‑Stresstest
echo "running stress-ng"
stress-ng \
    --cpu 8 \
    --cpu-method all \
    --verify \
    --timeout ${DURATION} \
    --metrics-brief \
    > stress-ng.log &

# File‑IO auf System-Laufwerk
cd ${SYSTEM_DRIVE}
echo "running sysbench on ${SYSTEM_DRIVE}"
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${DATA_DRIVE} \
    --time=10 run \
    > sysbench-nvme.log &

# File‑IO auf Daten-Laufwerk
cd ${DATA_DRIVE}
echo "running sysbench on ${DATA_DRIVE}"
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${SYSTEM_DRIVE} \
    --time=10 run \
    > sysbench-sata.log &

# Auf alle Hintergrund‐Jobs warten
wait

echo "== Stresstest abgeschlossen =="
echo "Ergebnisse:"
echo " - CPU  (stress-ng):     see stress-ng.log"
echo " - NVMe (sysbench):      see sysbench-nvme.log"
echo " - SATA (sysbench):      see sysbench-sata.log"

# Clean up File‑IO Testdateien
echo "== Aufräumen: File‑IO Testdateien löschen =="
cd ${DATA_DRIVE}
sysbench fileio ${EXTRA_FLAGS} cleanup
cd ${SYSTEM_DRIVE}
sysbench fileio ${EXTRA_FLAGS} cleanup
cd ${CURRENT_DIR}

echo "Fertig."

