...
- Download: kill_tasks.zip
- The files included with the archive should be usable with Windows and Unix systems.
- Create a folder
issues
within the Extract the archive to the./config/live
folder of your JobScheduler installation. - Extract the archive to the folder
issues
. The archive will extract the files included to a folderkill_tasks
, therefore all objects will be located in the./config/live/issues/kill_tasks
folder. - You can store the sample files to a different folder, however, you would have to adjust the
job_chains
parameter from thekill_tasks
order, see below.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
function spooler_process() { var rc = true; // merge parameters from task and order var params = spooler.create_variable_set(); params.merge( spooler_task.params ); params.merge( spooler_task.order.params ); // accept a list of colon separated job chain paths var jobChainPaths = params.value( "job_chains" ).split( ";" ); var timeout = params.value( "timeout" ); if (!timeout) { timeout = 0; } // traverse job chains as specified for (jobChainIndex in jobChainPaths) { var jobChainPath = jobChainPaths[jobChainIndex]; if (!spooler.job_chain_exists( jobChainPath )) { spooler_log.error( ".. specified job chain does not exist: " + jobChainPath ); rc = false; continue; } spooler_log.info( ".. traversing job chain: " + jobChainPath ); var response = spooler.execute_xml( "<show_job_chain job_chain='" + jobChainPath + "' what='job_chain_jobs'/>" ); var jobChainDOM = new Packages.sos.xml.SOSXMLXPath( new java.lang.StringBuffer( response ) ); var jobChainNodes = jobChainDOM.selectNodeList( "/spooler/answer/job_chain/job_chain_node" ); // traverse job chain nodes for( nodeIndex=0; nodeIndex<jobChainNodes.getLength(); nodeIndex++ ) { var jobChainNode = jobChainNodes.item(nodeIndex); var job = jobChainDOM.selectSingleNodeValue( jobChainNode, "@job" ); if (job == null) { continue; } spooler_log.info( ".... job found: " + job ); var response = spooler.execute_xml( "<show_job job='" + job + "' job_chain='" + jobChainPath + "' what='all'/>" ); var jobDOM = new Packages.sos.xml.SOSXMLXPath( new java.lang.StringBuffer( response ) ); var taskNodes = jobDOM.selectNodeList( "/spooler/answer/job/tasks/task" ); for( taskNodeIndex=0; taskNodeIndex<taskNodes.getLength(); taskNodeIndex++ ) { var taskNode = taskNodes.item( taskNodeIndex ); var taskID = jobDOM.selectSingleNodeValue( taskNode, "@id" ); if (taskID == null) { continue; } spooler_log.info( "...... task found: " + taskID ); if ( timeout > 0 ) { var command = "<kill_task id='" + taskID + "' job='" + job + "' immediately='yes' timeout='" + timeout + "'/>"; } else { var command = "<kill_task id='" + taskID + "' job='" + job + "' immediately='yes'/>"; } spooler_log.info( "........ kill task command: " + command ); var response = spooler.execute_xml( command ); var killTaskDOM = new Packages.sos.xml.SOSXMLXPath( new java.lang.StringBuffer(response) ); var errorCode = killTaskDOM.selectSingleNodeValue( "//ERROR/@code" ); var errorText = killTaskDOM.selectSingleNodeValue( "//ERROR/@text" ); if ( errorCode || errorText ) { spooler_log.error( "........ kill task response: errorCode=" + errorCode + ", errorText=" + errorText ); rc = false; } } } } return rc; } |