#!/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
NVME_MOUNT="~/test"    # bitte anpassen
SATA_MOUNT="/mnt/nextcloud/test"     # bitte anpassen

# 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 =="
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${NVME_MOUNT} prepare &
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${SATA_MOUNT} prepare &
wait
echo "== Vorbereitung fertig, starte Stresstest für ${DURATION} =="

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

# File‑IO auf NVMe
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${NVME_MOUNT} \
    --time=${DURATION} run \
    > sysbench-nvme.log 2>&1 &

# File‑IO auf SATA‑SSD
sysbench fileio \
    --file-total-size=${FILE_TOTAL_SIZE} \
    --file-num=${FILE_NUM} \
    --file-test-mode=${TEST_MODE} \
    ${EXTRA_FLAGS} \
    --file-dir=${SATA_MOUNT} \
    --time=${DURATION} run \
    > sysbench-sata.log 2>&1 &

# 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 =="
sysbench fileio ${EXTRA_FLAGS} --file-dir=${NVME_MOUNT} cleanup
sysbench fileio ${EXTRA_FLAGS} --file-dir=${SATA_MOUNT} cleanup

echo "Fertig."

