Code: Select all
***************************************************
* Name: ListRunawayJobs
* Author: Michael Dann (2007)
* Description: List jobs that have been running for
* over a given number of minutes.
*
* Args:
* aMaxRunningTime - The max running time before
* you consider it a runaway job
* (in minutes)
*
* Return: comma delimited list of runaway jobs
***************************************************
$INCLUDE DSINCLUDE JOBCONTROL.H
* initiliase variables
vListSize = 0 ; vOut = ""; i = 0 ; Ans=""
* Get the current time and date in internal format (seconds since 1970)
CALL !TIMDAT(timeArr)
vSystemDate=Iconv("20":timeArr<3>:"-":timeArr<1>:"-":timeArr<2>,"D-YMD[4,2,2]")
vSystemTime=timeArr<4>*60
* Get list of job in this project
vJobList=DSGetProjectInfo(DSJ.JOBLIST)
* Get number of items in list
vListSize = DCount(vJobList, ",")
*For each job check if it is running
IF vListSize > 0 THEN
FOR i = 1 to vListSize
vListItem = Field(vJobList, ",", i)
*Get handle for job
vHandle=DSAttachJob(vListItem,DSJ.ERRNONE)
IF vHandle<>DSJE.BADHANDLE THEN
*Check the status to see if it is running
vStatus=DSGetJobInfo(vHandle,DSJ.JOBSTATUS)
IF vStatus=DSJS.RUNNING THEN
*Get the job start timestamp
vJobStartTimeStamp=DSGetJobInfo(vHandle,DSJ.JOBSTARTTIMESTAMP)
*Convert the timestamp to seconds since 1970 (internal format)
TimePart = MatchField(vJobStartTimeStamp,"4N'-'2N'-'2N' '0X",7)
vJobStartDate=Iconv(left(vJobStartTimeStamp,10),"D-YMD[4,2,2]")
vJobStartTime=Iconv(TimePart,"MTS:")
*Calculate difference from current time
vDiff=(vSystemDate-vJobStartDate)*86400+(vSystemTime-vJobStartTime)
vDiff=vDiff/60
*Add to list of runaway jobs if it has been running for longer than [aMaxRunningTime]
IF vDiff>aMaxRunningTime THEN
vOut=vOut : vListItem:" (":INT(vDiff):" minutes),"
END
END
*Close handle for job
vHandle=DSDetachJob(vHandle)
END
NEXT
END
*Output list
IF vOut<>"" THEN
Ans=LEFT(vOut,LEN(vOut)-1)
END