280 lines
6.8 KiB
Bash
Executable File
280 lines
6.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | www.openfoam.com
|
|
# \\/ M anipulation |
|
|
#-------------------------------------------------------------------------------
|
|
# Copyright (C) 2011 OpenFOAM Foundation
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM.
|
|
#
|
|
# OpenFOAM is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# foamPrintJobs
|
|
#
|
|
# Description
|
|
# Uses finishedJobs/ and runningJobs/ and stateFile to print job info
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
Script=${0##*/}
|
|
|
|
JOBSTRING='%4s %8s %20s %10s %8s %4s %12s %12s %20s\n'
|
|
DEFSTATEFILE=$HOME/.OpenFOAM/foamCheckJobs.out
|
|
|
|
# The default is "~/.OpenFOAM/jobControl"
|
|
: ${FOAM_JOB_DIR:=$HOME/.OpenFOAM/jobControl}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
#
|
|
# Functions
|
|
#
|
|
#-------------------------------------------------------------------------------
|
|
|
|
usage() {
|
|
cat<<USAGE
|
|
Usage: $Script [stateFile]
|
|
|
|
This program prints a table of all running and finished jobs.
|
|
|
|
It is normally used in conjunction with foamCheckJobs which outputs
|
|
a "stateFile" containing the actual process status of all jobs.
|
|
|
|
If stateFile is not supplied, the default is used:
|
|
$DEFSTATEFILE
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
|
|
# printJob stat user case machine pid ncpus start end code
|
|
printJob() {
|
|
printf "$JOBSTRING" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
|
|
}
|
|
|
|
|
|
# getRawEntry dictionary entry
|
|
# Prints value of dictionary entry
|
|
getRawEntry() {
|
|
grep -v '^//' $1 | grep "^[ \t]*$2 " | sed -e "s/^[ \t]*$2 [ ]*//"
|
|
}
|
|
|
|
# getEntry dictionary entry
|
|
# Like getRawEntry but strips " and ending ';'
|
|
getEntry() {
|
|
getRawEntry $1 $2 | sed -e 's/^"//' -e 's/;$//' -e 's/"$//'
|
|
}
|
|
|
|
|
|
# notEmpty directory
|
|
# Returns 0 if directory contains files/directories
|
|
notEmpty() {
|
|
if [ "`ls $1`" ]
|
|
then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# rightStr nChars string
|
|
# Prints rightmost nChars of string
|
|
rightStr() {
|
|
echo "$2" | sed -e "s/.*\(.\{$1\}\)\$/\1/"
|
|
}
|
|
|
|
leftStr() {
|
|
echo "$2" | sed -e "s/\(.\{$1\}\).*/\1/"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
#
|
|
# Main
|
|
#
|
|
#-------------------------------------------------------------------------------
|
|
|
|
case "$1" in (-h | -help*) usage ;; esac
|
|
|
|
if [ $# -eq 1 ]
|
|
then
|
|
STATEFILE="$1"
|
|
elif [ $# -eq 0 ]
|
|
then
|
|
STATEFILE=${STATEFILE:-$DEFSTATEFILE}
|
|
else
|
|
usage
|
|
fi
|
|
|
|
#- Check a few things
|
|
|
|
if [ ! -d "$FOAM_JOB_DIR" ]
|
|
then
|
|
echo "$Script : directory does not exist."
|
|
echo " FOAM_JOB_DIR=$FOAM_JOB_DIR"
|
|
echo
|
|
exit 1
|
|
fi
|
|
if [ ! -d "$FOAM_JOB_DIR/runningJobs" -o ! -d "$FOAM_JOB_DIR/finishedJobs" ]
|
|
then
|
|
echo "$Script : invalid directory."
|
|
echo " FOAM_JOB_DIR=$FOAM_JOB_DIR"
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
|
|
if [ -f "$STATEFILE" ]
|
|
then
|
|
echo ""
|
|
echo "Using process information from"
|
|
echo " $STATEFILE"
|
|
echo "on jobs in"
|
|
echo " $FOAM_JOB_DIR"
|
|
echo ""
|
|
else
|
|
echo ""
|
|
echo "Cannot read $STATEFILE."
|
|
echo ""
|
|
STATEFILE=''
|
|
fi
|
|
|
|
|
|
#-- print header
|
|
printJob 'stat' 'user' 'case' 'machine' 'pid' 'ncpu' 'start' 'end' 'code'
|
|
printJob '----' '----' '----' '-------' '---' '----' '-----' '---' '----'
|
|
|
|
|
|
|
|
#-- print submitted
|
|
|
|
|
|
#-- print running
|
|
echo "Running:"
|
|
if notEmpty $FOAM_JOB_DIR/runningJobs
|
|
then
|
|
for f in `ls -t $FOAM_JOB_DIR/runningJobs/*`
|
|
do
|
|
machinePid=`basename $f`
|
|
|
|
machine=`echo $machinePid | sed -e 's/\..*$//'`
|
|
machine=`rightStr 10 "$machine"`
|
|
|
|
pid=`echo $machinePid | sed -e 's/.*\.\([0-9][0-9]*\)$/\1/'`
|
|
|
|
if [ "$STATEFILE" ]
|
|
then
|
|
stat=`getEntry $STATEFILE $machinePid`
|
|
fi
|
|
stat=${stat:-'UNKN'}
|
|
|
|
case=`getEntry $f 'case'`
|
|
case=${case:-'---'}
|
|
case=`echo $case | sed -e 's!/.*!!'` # strip processorXXX ending
|
|
case=`rightStr 20 "$case"`
|
|
|
|
start=`getEntry $f 'startDate'`
|
|
start=${start:-'---'}
|
|
start=`leftStr 12 "$start"`
|
|
|
|
end='---'
|
|
|
|
code=`getEntry $f 'code'`
|
|
if [ "$code" ]
|
|
then
|
|
code=`basename $code`
|
|
else
|
|
code='---'
|
|
fi
|
|
code=`rightStr 20 "$code"`
|
|
|
|
nProcs=`getEntry $f 'nProcs'`
|
|
nProcs=${nProcs:-'1'}
|
|
if [ $nProcs -eq 1 ]
|
|
then
|
|
nProcs='---'
|
|
fi
|
|
nProcs=`rightStr 3 "$nProcs"`
|
|
|
|
user=`getEntry $f 'userName'`
|
|
user=${user:-'---'}
|
|
user=`leftStr 8 "$user"`
|
|
|
|
printJob "$stat" "$user" "$case" "$machine" "$pid" "$nProcs" "$start" "$end" "$code"
|
|
done
|
|
fi
|
|
|
|
|
|
#-- print finished
|
|
echo ""
|
|
echo "Finished:"
|
|
if notEmpty $FOAM_JOB_DIR/finishedJobs
|
|
then
|
|
for f in `ls -t $FOAM_JOB_DIR/finishedJobs/*`
|
|
do
|
|
machinePid=`basename $f`
|
|
|
|
machine=`echo $machinePid | sed -e 's/\..*$//'`
|
|
machine=`rightStr 10 "$machine"`
|
|
|
|
pid=`echo $machinePid | sed -e 's/.*\.\([0-9][0-9]*\)$/\1/'`
|
|
|
|
end=`getEntry $f endDate`
|
|
end=${end:-'---'}
|
|
end=`leftStr 12 "$end"`
|
|
|
|
if [ "$STATEFILE" ]
|
|
then
|
|
stat=`getEntry $STATEFILE $machinePid`
|
|
fi
|
|
stat=${stat:-'UNKN'}
|
|
|
|
case=`getEntry $f case`
|
|
case=`echo $case | sed -e 's!/.*!!'` # strip processorXXX ending
|
|
case=${case:-'---'}
|
|
case=`rightStr 20 "$case"`
|
|
|
|
start=`getEntry $f startDate`
|
|
start=${start:-'---'}
|
|
start=`leftStr 12 "$start"`
|
|
|
|
code=`getEntry $f code`
|
|
if [ "$code" ]
|
|
then
|
|
code=`basename $code`
|
|
else
|
|
code='---'
|
|
fi
|
|
code=`rightStr 20 "$code"`
|
|
|
|
nProcs=`getEntry $f 'nProcs'`
|
|
nProcs=${nProcs:-'1'}
|
|
if [ $nProcs -eq 1 ]
|
|
then
|
|
nProcs='---'
|
|
fi
|
|
nProcs=`rightStr 3 "$nProcs"`
|
|
|
|
user=`getEntry $f 'userName'`
|
|
user=${user:-'---'}
|
|
user=`leftStr 8 "$user"`
|
|
|
|
printJob "$stat" "$user" "$case" "$machine" "$pid" "$nProcs" "$start" "$end" "$code"
|
|
done
|
|
fi
|
|
|
|
#------------------------------------------------------------------------------
|