#!/bin/bash # $HeadURL$ $LastChangedRevision$ # Modules . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals main() { local JSM_SHOW_QUEUE_OUTPUT PROGNAME # Defaults for options # Process options # Note use of '--unknown-opts' to allow unknown options to be # left in $*, so that the case statement below can pass them # (whatever "$@") down for processing. miniade_process_standard_options --usage-handler=usage --unknown-opts MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments # (complex delegation needing PROGNAME) miniade_get_progname PROGNAME case $PROGNAME in jsc) [ $# -ge 1 ] || usage COMMAND=$1 shift [[ $COMMAND =~ ^(quit|suspend|resume|ping|show-queue|submit-job|chres|cancel-job|chprio-job)$ ]] || miniade_error "$COMMAND: invalid command" ${COMMAND//-/_} "$@" ;; jsq) show_queue "$@" ;; jss) submit_job "$@" ;; *) miniade_error "unexpected progname" ;; esac } quit() { local PROGNAME VERBOSELEVEL # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations miniade_get_progname PROGNAME miniade_get_verboselevel VERBOSELEVEL # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} } suspend() { local PROGNAME VERBOSELEVEL # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations miniade_get_progname PROGNAME miniade_get_verboselevel VERBOSELEVEL # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} } resume() { local PROGNAME VERBOSELEVEL # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations miniade_get_progname PROGNAME miniade_get_verboselevel VERBOSELEVEL # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} } ping() { local PROGNAME VERBOSELEVEL # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations miniade_get_progname PROGNAME miniade_get_verboselevel VERBOSELEVEL # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} } show_queue() { local SHOW_JOB_STATES VERBOSELEVEL PROGNAME # Defaults for options SHOW_JOB_STATES=running,pending # Process options special_opts_handler() { case $1 in -a) SHOW_JOB_STATES=running,pending,cancelled,completed ;; *) return 1 ;; esac } miniade_process_standard_options --special-opts-handler=special_opts_handler MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations miniade_get_verboselevel VERBOSELEVEL miniade_get_progname PROGNAME # Guts miniade_debug 10 "show_queue: command=${FUNCNAME[0]//_/-} show-job-states=$SHOW_JOB_STATES" PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} verboselevel=$VERBOSELEVEL show-job-states=$SHOW_JOB_STATES } cancel_job() { local VERBOSELEVEL JOB_ID PROGNAME # Process arguments [ $# = 1 ] || usage JOB_ID=$1 # Sanity checks and derivations miniade_get_verboselevel VERBOSELEVEL miniade_get_progname PROGNAME # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} job-id=$JOB_ID } chprio_job() { local VERBOSELEVEL JOB_ID PRIORITY PROGNAME # Process arguments [ $# = 2 ] || usage JOB_ID=$1 PRIORITY=$2 # Sanity checks and derivations miniade_get_verboselevel VERBOSELEVEL # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} job-id=$JOB_ID priority=$PRIORITY } chres() { local VERBOSELEVEL RESOURCE_LIST PROGNAME # Process arguments [ $# = 1 ] || usage RESOURCE_LIST=$1 # Sanity checks and derivations miniade_get_verboselevel VERBOSELEVEL miniade_get_progname PROGNAME # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} resource-list="$RESOURCE_LIST" } submit_job() { local VERBOSELEVEL RESOURCE_LIST JOB_NAME JOB_COMMAND # Defaults for options RESOURCE_LIST= JOB_NAME=unset # Process options special_opts_handler() { case $1 in -r) RESOURCE_LIST=$2; extra_shift ;; -n) JOB_NAME=$2; extra_shift ;; *) return 1 ;; esac } miniade_process_standard_options --special-opts-handler=special_opts_handler MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 1 ] || usage JOB_COMMAND="$1" # Sanity checks and derivations miniade_get_verboselevel VERBOSELEVEL miniade_get_progname PROGNAME # Guts PROGNAME=$PROGNAME jsm --debug=$VERBOSELEVEL command=${FUNCNAME[0]//_/-} job-command="$JOB_COMMAND" resource-list="$RESOURCE_LIST" job-name="$JOB_NAME" } usage() { local PROGNAME miniade_get_progname PROGNAME if [ $PROGNAME = jsc ]; then echo "Usage: $PROGNAME [ ] ..." echo echo "Options: -V | --version display program version" echo echo "Commands: quit" echo " suspend" echo " resume" echo " ping" echo " show-queue [ -a ]" echo " submit-job -r :[,...] " echo " cancel-job " echo " chprio-job " echo " chres :[,...]" echo elif [ $PROGNAME = jsq ]; then echo "Usage: $PROGNAME [ ] [ -a ]" echo echo "Options: -V | --version display program version" echo " -a show all jobs" echo elif [ $PROGNAME = jss ]; then echo "Usage: $PROGNAME [ ] -r :[,...] [ -n ] " echo echo "Options: -V | --version display program version" echo " -r specify job's resource requirements" echo " -n specify job name" echo else miniade_error "unexpected progname" fi >&$((${1:-1}+1)) exit ${1:-1} } version() { echo "$PROGNAME version 0" exit 0 } listpaths() { exit 0 } main "$@"