##                               -*- Tcl -*-
## $Id: sched_tcl,v 1.1 1999/04/16 00:06:04 hender Exp $
## Amos Gouaux, Jan 1997

## get the load average of the system
set host_con [openrm localhost]
if {$host_con < 0} {
    log "Error: bad return from openrm!"
    return
}
addreq $host_con "loadave"
set loadave [getreq $host_con]
closerm $host_con
log "Load average is $loadave"
if {$loadave > 40.0} {
    log "System load above PBS limit; jobs will remain queued"
    return
}

## Run the first runnable job we get
foreach job [pbsselstat] {
    set jid [lindex $job 0]
    set attrls [lindex $job 1]

    set user [keylget attrls euser]

    if ![keylget attrls Resource_List:mem mem] {
        pbsalterjob $jid {{Resource_List mem 100mb}}
    }

    if {[keylget attrls interactive flag] && [string match "True" $flag]} {
        log "User $user has submitted an interactive job"
        if ![info exists exempt($user)] {
            log "User $user is not authorized for interactive jobs!"
            pbsdeljob $jid
            return
        } else {
            if {$loadave > 20.0} {
                log "System load too high for interactive jobs"
                pbsdeljob $jid
                return
            } else {
                # Set the nice value and maximum time for interactive jobs.
                pbsalterjob $jid {{Resource_List nice 19}} 
                set limit $exempt($user)
                if ![string match {} $limit] {
                    pbsalterjob $jid \
                            [list [list Resource_List walltime $limit]] 
                }
                log "Running interactive job $jid"
                pbsrunjob $jid
                return
            }
        }
    }
    log "Running $jid for $user"
    pbsrunjob $jid
    return
}

## $Source: /u/pbs1/RELEASE_TREE_CVS/pbs/src/scheduler.tcl/sample_scripts/UTDallas/sched_tcl,v $
