#
#  Expressions used to control starting and stopping of foreign jobs
#
StateTimer	= (CurrentTime - EnteredCurrentState)
ActivityTimer	= (CurrentTime - EnteredCurrentActivity)

NonCondorLoadAvg	= (LoadAvg - CondorLoadAvg)
BackgroundLoad		= 0.3
HighLoad		= 0.6
StartIdleTime		= 15 * $(MINUTE)
ContinueIdleTime	= 5 * $(MINUTE)
MaxSuspendTime		= 10 * $(MINUTE)
MaxVacateTime		= 10 * $(MINUTE)

KeyboardBusy		= (KeyboardIdle < $(POLLING_INTERVAL))
CPU_Idle		= ($(NonCondorLoadAvg) <= $(BackgroundLoad))
CPU_Busy		= ($(NonCondorLoadAvg) >= $(HighLoad))

BigJob			= (False)
MediumJob		= (ImageSize >= (15 * 1024))
SmallJob		= (ImageSize < (15 * 1024))

JustCpu			= ($(CPU_Busy) && ($(KeyboardBusy) == False))
MachineBusy		= ($(CPU_Busy) || $(KeyboardBusy))

WANT_SUSPEND		: (Owner != "jbasney") && \
				($(SmallJob) || $(JustCpu))
WANT_VACATE 		: $(MediumJob) || $(SmallJob)
WANT_SUSPEND_VANILLA	: True
WANT_VACATE_VANILLA	: True

CS_START	= $(CPU_Idle) && KeyboardIdle > $(StartIdleTime)
CS_SUSPEND	= $(MachineBusy)
CS_CONTINUE	= (KeyboardIdle > $(ContinueIdleTime)) && $(CPU_Idle)
CS_VACATE	= ((WANT_SUSPEND == False) && $(MachineBusy)) || \
		  (WANT_SUSPEND && ($(ActivityTimer) > $(MaxSuspendTime)))
CS_KILL		= ((WANT_SUSPEND == False) && (WANT_VACATE == False) && \
			$(MachineBusy)) || \
		  ((WANT_SUSPEND == True) && (WANT_VACATE == False) && \
			($(ActivityTimer) > $(MaxSuspendTime))) || \
		  (WANT_VACATE && $(ActivityTimer) > $(MaxVacateTime))

START		: $(CS_START)
SUSPEND		: $(CS_SUSPEND) 
CONTINUE	: $(CS_CONTINUE)
VACATE		: $(CS_VACATE)
KILL		: $(CS_KILL)

SUSPEND_VANILLA		: $(MachineBusy)
CONTINUE_VANILLA	: $(CPU_Idle) && KeyboardIdle > $(ContinueIdleTime)
VACATE_VANILLA		: $(ActivityTimer) > $(MaxSuspendTime)
KILL_VANILLA		: $(ActivityTimer) > $(MaxVacateTime)

#
#  Periodic Checkpointing (uncomment to enable)
LastCkpt	= (CurrentTime - LastPeriodicCheckpoint)
PERIODIC_CHECKPOINT	: $(LastCkpt) > (3 * $(HOUR))