#!/bin/sh
# fenris-collect runit run script — periodic NVMe collection scheduler.
#
# Runit service layout:
#   /etc/sv/fenris-collect/run        — this script (scheduler)
#   /etc/sv/fenris-collect/log/run    — logger to /var/log/fenris-collect/
#   /var/service/fenris-collect        — symlink to enable
#   /etc/sv/fenris-collect/down        — marker for dormant install
#
# Guarantees (must match systemd timer semantics):
#   - Initial 2-minute boot delay (sleep 120 before first collect)
#   - Completion-relative 5-minute cadence (sleep 300 after collect)
#   - Bounded execution (timeout 90s on each collect)
#   - No catch-up (fixed sleep interval, no Persistent=)
#   - Serialized runs (runsv does not restart until exit)
#   - Serialized on-demand (flock serializes fenris-collect execution)
#
# Spec: §8.4, §8.5, §8.6, ADR 0008
set -eu

COLLECT_TIMEOUT=90
BOOT_DELAY=120
CADENCE=300
LOCK_FILE=/var/lib/fenris/fenris-collect.lock

# Ensure lock directory exists
mkdir -p "$(dirname "$LOCK_FILE")"

# Initial boot delay: sleep before first collection
sleep "$BOOT_DELAY"

# Collection loop: collect, then sleep for cadence
while true; do
    flock --nonblock "$LOCK_FILE" \
        timeout "$COLLECT_TIMEOUT" nice ionice -c3 \
        /usr/libexec/fenris/fenris-collect \
        2>&1 || true

    sleep "$CADENCE"
done
