#!/bin/sh
set -eu

disk_path=${SM_DISK_PATH:-/}
min_free_gib=${SM_DISK_MIN_FREE_GIB:-100}
max_used_pct=${SM_DISK_MAX_USED_PCT:-85}

disk_output=$(df -Pk "$disk_path") || {
  echo "disk probe failed: path=$disk_path" >&2
  exit 75
}
disk_stats=$(printf '%s\n' "$disk_output" | awk 'NR == 2 { gsub("%", "", $5); print $4, $5 }')
set -- "$disk_stats" "$@"
free_kib=${1%% *}
used_pct=${1##* }
shift

case "$free_kib:$used_pct" in
  *[!0-9:]* | :*)
    echo "disk probe failed: path=$disk_path output=$disk_stats" >&2
    exit 75
    ;;
esac

if [ "$free_kib" -lt "$((min_free_gib * 1024 * 1024))" ] || [ "$used_pct" -ge "$max_used_pct" ]; then
  echo "disk admission rejected: path=$disk_path free_kib=$free_kib used_pct=$used_pct min_free_gib=$min_free_gib max_used_pct=$max_used_pct" >&2
  exit 75
fi

exec systemd-run --user --scope --slice=builds.slice -- "$@"
