Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagexml
titlejob configuration: kill_tasks_in_job_chain
collapsetrue
function spooler_process(){
  var rc = true;

  // merge parameters from task and order
  var params = 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;
}