Synchronous_Firing/CG_Files/sync_data_col.sh

75 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
folder=serial
nodelist=compute01,compute04,compute07,compute10,compute11,compute12
TIMESTR=`date +"%s"`
DBNAME="${folder}_${TIMESTR}"
NODES=(1)
ESIZE=(A B C AB AC BC ABC)
pwd=`pwd`
thrds=1
QSIZE=1
for e in "${ESIZE[@]}"
do
echo "----------------------- ${e} Exploits -----------------------" >> ./slurm_reports/"$folder"/sync_data.txt
SKIP_FLAG=0
#Dispatch the job and get the output ("Submitted batch job <jobid>
JOB=`sbatch --nodelist="$nodelist" --exclusive ag_run.sh "$DBNAME" "$e"`
#Pull the jobid
JOB=`echo "$JOB" | grep -oP '(?<=job )[^ ]*'`
#Output will be stored as this format
FILE="./slurm_reports/job.${JOB}.out"
ERR="./slurm_reports/job.${JOB}.err"
NOW=`date +"%H:%M"`
echo "Synchronous test with "$e" exploit set with dispatched at "$NOW" with jobid "$JOB"" >> ./slurm_reports/"$folder"/sync_data.txt
#Wait until job is finished
while squeue | grep "$JOB" > /dev/null 2>&1; do
#Slurm occasionally has an issue where the prog finishes but doesn't leave slurm queue
#Check if program finished by checking the output file for the final line, delay by 5 seconds for safety, then cancel the job
if test -f "$FILE" && (cat "$FILE" | grep "total run time" > /dev/null 2>&1) ; then
for j in {1..5}
do
sleep 1
done
SKIP_FLAG=1
echo "Job done, but slurm hung." >> ./slurm_reports/"$folder"/sync_data.txt
tmp=`scancel "$JOB"`
sleep 3
break
fi
sleep 1
done
#Wait for the delay between job finish and file write
while ! test -f "$FILE"; do
sleep 1
done
#Get runtime and states from the output
#RUNTIME=`cat "$FILE" | grep -oP '(?<=total run time is )[^ ]*'`
RUNTIME=`cat "$FILE" | grep -oP '(?<=AG TOOK )[^ ]*'`
DUP=`cat "$FILE" | grep -oP '(?<=Duplicated States that had to be removed: )[^ ]*'`
STATES=`cat "$FILE" | grep -oP '(?<=Total States: )[^ ]*'`
EDGES=`cat "$FILE" | grep -oP '(?<=Total Edges: )[^ ]*'`
if ! test -s "$ERR" || test "$SKIP_FLAG" -eq 1 ; then
printf "${e} Exploit Set, ${RUNTIME} runtime. ${STATES} states, ${EDGES} edges \n\n" >> ./slurm_reports/"$folder"/sync_data.txt
str="$e","$STATES","$EDGES"
echo $str >> ./slurm_reports/"$folder"/sync_data.csv
else
printf "Errors occurred. Please see err file for more details. \n\n" >> ./slurm_reports/"$folder"/sync_data.txt
fi
done