#!/bin/bash

# slurm test suite

# Where we store the jobs
XPM_SLURM_DIR="$(realpath "$(dirname "$0")"/..)/slurm"
if ! test -d "$XPM_SLURM_DIR"; then
    echo "Directory $XPM_SLURM_DIR does not exist" 1>&2
    exit 1
fi

mkdir -p "$XPM_SLURM_DIR/jobs"
echo "Slurm directory: $XPM_SLURM_DIR" >&2 

lockpath() {
    fid="$1"
    path="$2"

    echo "Locking $path..." 1>&2
    eval exec "$fid<>" $path
    if ! flock --timeout 2 $fid; then 
        echo Could not lock "$path" - stopping 1>&2
        exit 017
    fi
}

lockpath 9 "$XPM_SLURM_DIR/slurm.lock"

echo "Command line: $@" >&2
args=()
parsable=0
stdout="/dev/stdout"
stderr="/dev/stdout"
while true; do
    case "$1" in
        --parsable) shift; parsable=1;;
        -o) shift; stdout="$1"; shift;;
        -e) shift; stderr="$1"; shift;;
        --*) args+=("$1"); shift;;
        *) break 2;;    
    esac
done

echo "Starting $@ ${args[@]} > $stdout" >&2
(eval "$@" "${args[@]}"; echo $? > "$XPM_SLURM_DIR/jobs/$$.status") > $stdout 2> $stderr & 
JOBID="$$"
date > "$XPM_SLURM_DIR/jobs/$JOBID.start"
disown

if test "$parsable" == 0; then
    echo "Submitted batch job ${JOBID}"
else
    echo "${JOBID};cluster"
fi