Versions Compared

Key

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

...

This example describes how you can start jobs, add orders to job chains by your application. The examples are written in PHP.

Feature Status

Display feature availability
EndingWithRelease1.10
StartingFromRelease1.3

Jira
serverSOS JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId6dc67751-9d67-34cd-985b-194a8cdc9602
keyJS-1316

Downloads

...

Code Block
         <?xml version="1.0" encoding="ISO-8859-1"?>
        <spooler>
          <answer time="2008-04-08 15:50:33.536">
            <ok/>
         </answer>
        </spooler>

 


Example with PHP Socket Communication (@fsockopen)

...

  • In your web directory set up a file called: packages.Into the folder scheduler put the file sos_scheduler_command_inc.php and into the folder class put the file sos_class.inc.php.
    You can find these files unter scheduler/php_xml_interface/packages package_scheduler.zip
  • In your application program include the class with:
    require_once( 'scheduler/sos_scheduler_command.inc.php');

...

Code Block
languagephp
linenumberstrue
//open socket
$command = new SOS_Scheduler_Command(‘localhost’,4454, 60);
//build command
$cmd = '<add_jobs><job name="myJob" title = "my first job"> <script';
$cmd += 'language="shell">  <![CDATA[dir c:\temp  ]]>  </script> ';
$cmd += '<run_time> <period ';
$cdm += 'single_start="18:00"/></run_time></job></add_jobs>';
if (!$command->connect()) {
	echo$get_error(). __FILE__ . __LINE__ ;
	return 0;
}
//send command
$this->command->command($cmd);
if ($command->get_answer_error()) {
	echo$command->get_error() . ‘ ‘ . __FILE__ . ‘ ‘ . __LINE__ ;
}
//close socket
$command->disconnect();

 


Commands with xml-php Interface

...

Code Block
languagephp
linenumberstrue
if(!defined('APP_SCHEDULER_HOST')) { define ( 'APP_SCHEDULER_HOST', 'localhost' ); }
if(!defined('APP_SCHEDULER_PORT')) {define( 'APP_SCHEDULER_PORT', '4454' ); }

//load missing classes and returns an object of the class
function &get_instance($class, $include_path='scheduler/', $extension='.inc.php') {
	if ( !class_exists($class) ) {
		include( $include_path . strtolower($class) . $extension );
	}
	$object = new $class;
	$object->host=APP_SCHEDULER_HOST;
	$object->port=APP_SCHEDULER_PORT;
	return $object;   
} 

 


The use of the php-xml interface is explained. You can find a detailed documentation of the classes in the formats PHP and DOC under: http://www….

...

Code Block
languagephp
firstline15
linenumberstrue
//-------------------------------------------------------------------------  
// How to add an order to an existing jobchain
//-------------------------------------------------------------------------    

$order_launcher =
       &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');

//Create an add_order object (SOS_Scheduler_Command_Add_Order).
$order = $order_launcher->add_order('jobchain',1);

//Setting some properties of the order object
$order->id='sostest_12';
$order->replace="yes";
$order->priority="10"; 
$order->title="Testorder"; 
$order->web_service=""; 
$order->at="now+60";
$order->addParam('test','any value');

// Sending XML to the JobScheduler
if (!$order_launcher->execute($order)) {
	echo'error occurred adding order: ' .  $order_launcher->get_error();
	exit;
}

 


...

Generated XML

Code Block
     <add_order
        at="now+60"
        id="sostest_12"
        job_chain="jobchain"
        priority="10"
        replace="yes"
        state="1"
        title="Testorder">
    <params>
    <param name="test" value="any value"/>
    </params>
    </add_order>

...

Code Block
languagephp
firstline15
linenumberstrue
//-------------------------------------------------------------------------  
// How to add an order to an existing jobchain
//-------------------------------------------------------------------------    

$order_launcher =
       &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');

//Create an add_order object (SOS_Scheduler_Command_Add_Order).
$order = $order_launcher->add_order('jobchain',1);

//Setting some properties of the order object
$order->id='sostest_12';
$order->replace="yes";
$order->priority="10"; 
$order->title="Testorder"; 
$order->web_service=""; 
$order->at="now+60";
$order->addParam('test','any value');

// Sending XML to the JobScheduler
if (!$order_launcher->execute($order)) {
	echo'error occurred adding order: ' .  $order_launcher->get_error();
	exit;
} 

 


...


Generated XML

Code Block
  <remove_order  order="sostest_13" job_chain="jobchain"/>

...


...

Change an Existing Order

Code Block
languagephp
firstline15
linenumberstrue
//------------------------------------------------------------------------
//How to change an existing order
//------------------------------------------------------------------------  

//starting with adding an order.
$order_launcher =
       &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');
$order = $order_launcher->add_order('jobchain',3);
$order->replace='yes';
$order->id='sostest_14';
$order->run_time()->single_start="22:00";

if (!$order_launcher->execute($order)) {
	echo'error occurred adding order: ' . $order_launcher->get_error(); exit;
}

//Now change the order.state
$order = $order_launcher->modify_order('jobchain','sostest_14');
$order->state=2;
if (!$order_launcher->execute($order)) {
	echo'error occurred modifying order: ' . $order_launcher->get_error();
	exit;
} 

 


...

Generated XML

Code Block
 <modify_order  order="sostest_14" job_chain="jobchain" state="2"></modify_order>

...

Code Block
languagephp
firstline15
linenumberstrue
//-----------------------------------------------------------------------
// How to start an order with submit. 
// This can be useful, when you know orders jobchain, id, state and starttime.
//------------------------------------------------------------------------

$order_launcher =
       &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');

if (! $order_launcher->submit('jobchain','sostest_15',2,'now+30')) {
	echo'error occurred submitting order: ' . $order_launcher->get_error();
	exit;
}

 


...


Generated XML

Code Block
    <add_order
      at="now+30"
      id="sostest_15"
      job_chain="jobchain"
      replace="yes"
      state="2">
    </add_order>

...

Code Block
languagephp
firstline15
linenumberstrue
//------------------------------------------------------------------------
// How to add a job
//------------------------------------------------------------------------

$job = &get_instance('SOS_Scheduler_Job','scheduler/');

//Setting some properties
$job->force_idle_timeout   = "yes";
$job->idle_timeout         = "1000";
$job->ignore_signals       = "all";
$job->java_options         = "java";
$job->min_tasks            = "2";
$job->name                 = "test_jobname3"; 
$job->order                = "no";
$job->priority             = "1" ;
$job->stop_on_error        = "no";
$job->tasks                = "4";
$job->temporary            = "no"; 
$job->timeout              = "10";
$job->title                = "my job";
$job->visible              = "yes"; 

//Defining some parameters
$job->addParam('var1','value1');
$job->addParam('var2','value2');

//Set the implementation
$job->script('javascript')->script_source='a=1;';

//The job has a runtime
$job->run_time()->period()->single_start = "10:00";
$job->run_time()->period()->single_start = "11:00";
$job->run_time()->at('2006-12-24 12:20');
$job->run_time()->at('2006-12-24 12:25');
$job->run_time()->at('2006-12-24 12:35');

/** A period for day=1 */
$p = $job->run_time()->weekdays('1')->period();
$p->single_start = '07:30';
$job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/');

//First removing the job    
$job_command->remove($job->name);
if (! $job_command->add_jobs($job))  {
	echo'error occurred adding job: ' . $job_command->get_error();
	exit;
} 

 


...


Generated XML

Code Block
   <job
      force_idle_timeout="yes"
      idle_timeout="1000"
      ignore_signals="all"
      java_options="java"
      min_tasks="2"
      name="test_jobname3"
      order="no"
      priority="1"
      stop_on_error="no"
      tasks="4"
      temporary="no"
      imeout="10"
      itle="my job"
      isible="yes">
    <params>
      param name="var1" value="value1"/>
      param name="var2" value="value2"/>
    </params>
    <script language="javascript">
      ![CDATA[a=1;]]></script>
    <run_time>
      period single_start="10:00"/>
      period single_start="11:00"/>
      at at="2006-12-24 12:20"/>
      at at="2006-12-24 12:25"/>
      at at="2006-12-24 12:35"/>
      weekdays>
        day day="1">
        period single_start="07:30"/>
        day>
      </weekdays>
    </run_time>
    </job> 
 

...

Deleting a Job

Code Block
languagephp
firstline15
linenumberstrue
//------------------------------------------------------------------------       
// How to to delete a job 
//------------------------------------------------------------------------  
// First we add the job to have one, which we can remove
$job = &get_instance('SOS_Scheduler_Job','scheduler/');
$job->name         = "jobtoberemoved";
$job->title        = "my removed job";
$job->visible      = "yes"; 
//Set the implentation
$job->script('javascript')->script_source='a=1;';
$job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/');
if (! $job_command->add_jobs($job)) {
echo'error occurred adding job: ' . $job_command->get_error(); exit;
}
//Now the job will be removed
if (! $job_command->remove($job->name)) {
	echo'error occurred removing job: ' . $job_command->get_error(); 
	exit;
} 

...


...


Generated XML

Code Block
    <job name="jobtoberemoved" tasks="1" temporary="no"
    title="my removed
    job" visible="yes">
    <script language="javascript">
    <![CDATA[a=1;]]>
    </script>
    </job>

    <modify_job job="jobtoberemoved" cmd="remove"/>

...


...

Starting a Job

Code Block
languagephp
firstline15
linenumberstrue
//------------------------------------------------------------------------
//  How to Start a job
//------------------------------------------------------------------------

// First we add the job to have one, which we can start
$job = &get_instance('SOS_Scheduler_Job','scheduler/');
$job->name             = "test_jobname3"; 
$job->title            = "my job";
$job->visible          = "yes"; 
$job->script('javascript')->script_source='a=1';
$job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/');

if (! $job_command->add_jobs($job))  {
	echo'error occurred adding job: ' . $job_command->get_error(); exit;
}

if (! $job_command->start($name='test_jobname3', $start_at="now" )) {
	echo'error occurred submitting job: ' . $job_command->get_error();
	exit;
}

 


...


Generated XML

Code Block
 <start_job job="test_jobname3" at="now"></start_job>
    

 

...


Setting the runtime of a job

Code Block
languagephp
firstline15
linenumberstrue
//-------------------------------------------------------------------
//  How to set the runtime of a job. Some examples
//-------------------------------------------------------------------

// First we add the job to have one, which we can start
$job = &get_instance('SOS_Scheduler_Job','scheduler/');
$job->name                  = "test_jobname33"; 
$job->title                 = "test_jobname33";
$job->visible                 = "yes";   
$job->script('javascript')->script_source='a=1';
$job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/');

if (! $job_command->add_jobs($job))  {echo'error occurred adding job: ' . $job_command->get_error(); exit; }

//Start on the 28.st at 11:00
$job->run_time()->monthdays('28')->period()->single_start='11:00';

//Adding a period 
$period = new SOS_Scheduler_Runtime_Period();
$period->begin='12:00'; $period->end='13:00';
$period->repeat='60';
$job->run_time()->date('2006-30-11')->addPeriod($period);

//starting at 11:00
$job->run_time()->at('11:00');
if (!$job_command->execute($job)) {echo'error occurred : ' . $job_command->get_error(); exit; } 

...


...


Generated XML

Code Block
 <job name="test_jobname33"
     tasks="1"
     title="test_jobname33"
     visible="yes">
<script language="javascript"><![CDATA[a=1]]></script>

<run_time>
<at at="11:00"/>
<date date="2006-30-11">
<period begin="12:00"
        end="13:00"
        repeat="60"/>
</date>
<monthdays>
       <day day="28">
          <period single_start="11:00"/>
       </day>
</monthdays>
</run_time>
</job>

...

 


...


Setting the runtime of an order

Code Block
languagephp
firstline15
linenumberstrue
//--------------------------------------------------------------
//How to set the runtime of an order. Some examples
//--------------------------------------------------------------

//adding an order with a runtime

$order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');
$order = $order_launcher->add_order('jobchain',3);
$order->replace='yes';
$order->id='sostest_14';

//Start on the 28.st at 11:00
$order->run_time()->monthdays('28')->period()->single_start='12:00';

//Adding a period 
$period = new SOS_Scheduler_Runtime_Period();
$period->begin='12:00'; $period->end='13:00';
$period->repeat='60';
$order->run_time()->ultimos('22')->addPeriod($period);

//starting at 11:00 
$order->at='2008-11-01 13:00';

if (!$order_launcher->execute($order)) {echo'error occurred adding order: ' . $order_launcher->get_error(); exit; }

...


...


Generated XML

Code Block
  <add_order
  at="2008-11-01 13:00"
  id="sostest_14"
  job_chain="jobchain"
  replace="yes"
  state="3">
<run_time>
   <monthdays>
     <day day="28">
       <period single_start="12:00"/>
    </day></monthdays>
    <ultimos>
      <day day="22">
       <period begin="12:00" end="13:00" repeat="60"/>
      </day>
    </ultimos>
</run_time>
</add_order>

...



...

Working with hot folders

 


...

Adding a Job to a hot folder

Code Block
languagephp
linenumberstrue
 // First we add the job to have one, which we can start
$job = &get_instance('SOS_Scheduler_Job','scheduler/');
$job->name                  = "test_jobname77"; 
$job->title                 = "test_jobname77";
$job->visible                 = "yes";   
$job->script('javascript')->script_source='a=1';

$modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');

if (! $xml=$modify_hot_folder_command->store($job,"./test"))  {
	echo'error occurred adding job: ' . $modify_hot_folder_command->get_error();
	exit;
}

 


...


Generated XML

Code Block
<modify_hot_folder folder="./test">
   <job name="test_jobname77" tasks="1" temporary="no" title="test_jobname77" visible="yes">
     <script language="javascript"><![CDATA[a=1]]></script>
   </job>
</modify_hot_folder>

 

 

 


...



Adding a Lock to a hot folder

Code Block
languagephp
linenumberstrue
 //--------------------------------------------------
//  How to add a lock to hot folder
//--------------------------------------------------

// First we add the lock to have one, which we can start
$lock = &get_instance('SOS_Scheduler_Lock','scheduler/');

//Setting some properties
$lock->max_non_exclusive           = 1;
$lock->name="myLock";

//Adding the lock to the hotfolder
$modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');

if (! $xml=$modify_hot_folder_command->store($lock,"./test"))  {
	echo'error occurred adding lock: ' . $modify_hot_folder_command->get_error(); 
	exit;
}

...


...


Generated XML

Code Block
<modify_hot_folder folder="./test">
  <lock name="myLock" max_non_exclusive="1"></lock>
</modify_hot_folder>
 
 

...

Adding a Process_class to a hot folder

Code Block
languagephp
linenumberstrue
//-------------------------------------------------------------------------
//  How to add a process_class to hot folder
//-------------------------------------------------------------------------
// First we add the process_class to have one, which we can start
$process_class = &get_instance('SOS_Scheduler_Process_class','scheduler/');
//Setting some properties
$process_class->max_processes           = 1;
$process_class->name=

 


...


Generated XML

Code Block
 <modify_hot_folder folder="./test">
   <process_class
      name="myProcess_class"
      max_processes="1" replace="yes">
   </process_class>
 </modify_hot_folder>

...

Code Block
languagephp
linenumberstrue
//-------------------------------------------------------------
//  How to add a job_chain to hot folder
//-------------------------------------------------------------

$job_chain = &get_instance('SOS_Scheduler_Job_Chain','scheduler/');

//Setting some properties
$job_chain->name           = "myJob_Chain";

//The job has a file_order_sources 
$job_chain->file_order_source("/myDir","1");
$job_chain->file_order_source("/myOtherDir","2");

//The job has a file_order_sinks
$job_chain->file_order_sink("6")  ->remove="yes";
$job_chain->file_order_sink("99") ->remove="yes";
$job_chain->file_order_sink("999")->remove="yes";

//Adding some Job_chain_nodes
$job_chain->add_job("my_job1","1","2","99");
$job_chain->add_job("my_job2","2","3","99");
$job_chain->add_job("my_job3","3","4","99");
$job_chain->add_job("my_job4","4","5","999");

//or adding a node
$job_chain_node = new SOS_Scheduler_Job_Chain_Node();

//Setting some properties
$job_chain_node->state          = "5";  
$job_chain_node->error_state      = "99";    
$job_chain_node->next_state     = "6";    
$job_chain_node->on_error       = "suspend";
$job_chain_node->job              = "myJob5";

//adding the node
$job_chain->add_node($job_chain_node);

//Adding the job_chain to the hotfolder
$modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');
if (! $xml=$modify_hot_folder_command->store($job_chain,"./test/chains"))  {
	echo'error occurred adding job chain: ' . $modify_hot_folder_command->get_error();
	exit;
}

 


...


Generated XML

Code Block
 <modify_hot_folder folder="./test/chains">
  <job_chain name="myJob_Chain">
    <file_order_source directory="/myDir"/>
    <file_order_source directory="/myOtherDir"/>
    <file_order_sink state="6" remove="yes"/>
    <file_order_sink state="99" remove="yes"/>
    <file_order_sink state="999" remove="yes"/>
    <job_chain_node job="my_job1" state="1" next_state="2" error_state="99"/>
    <job_chain_node job="my_job2" state="2" next_state="3" error_state="99"/>
    <job_chain_node job="my_job3" state="3" next_state="4" error_state="99"/>
    <job_chain_node job="my_job4" state="4" next_state="5" error_state="999"/>
    <job_chain_node job="myJob5" state="5" next_state="6" error_state="99"/>
    </job_chain>
</modify_hot_folder>

 

...



...

Adding an Order to a hot folder

Code Block
languagephp
linenumberstrue
//-------------------------------------------------------------
// How to add an order to a hot_folder
//-------------------------------------------------------------

$order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');

//Create an order object (SOS_Scheduler_Command_Order).
$order = $order_launcher->order('myJob_Chain',1);

//Setting some properties of the order object
$order->id='my_Order';
$order->replace="yes";
$order->priority="10"; 
$order->title="Testorder"; 
$order->web_service=""; 
$order->at="now+60";
$order->addParam('test','any value');

//Adding the job_chain to the hotfolder
$modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');

if (! $xml=$modify_hot_folder_command->store($order,"./test/chains"))  { 
	echo 'error occurred adding order: ' . $modify_hot_folder_command->get_error();
	exit; 
} 

 


...


Generated XML

Code Block
<modify_hot_folder folder="./test/chains">
<order  at="now+60" id="my_Order" job_chain="myJob_Chain" priority="10" replace="yes" state="1" title="Testorder">
<params>
<param name="test" value="any value"/>
</params>
</order>
</modify_hot_folder>

 


...

Adding a nested job chain to a hot folder

Code Block
languagephp
linenumberstrue
//-------------------------------------------------------------
// How to add an order to a hot_folder
//-------------------------------------------------------------

$order_launcher = &get_instance('SOS_Scheduler_OrderCommand_Launcher','scheduler/');

//Create an order object (SOS_Scheduler_Command_Order).
$order = $order_launcher->order('myJob_Chain',1);

//Setting some properties of the order object
$order->id='my_Order';
$order->replace="yes";
$order->priority="10"; 
$order->title="Testorder"; 
$order->web_service=""; 
$order->at="now+60";
$order->addParam('test','any value');

//Adding the job_chain to the hotfolder
$modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');
if (! $xml=$modify_hot_folder_command->store($order,"./test/chains"))  {
	echo'error occurred adding order: ' . $modify_hot_folder_command->get_error();
	exit; 
}

 


...


Generated XML

Code Block
languagexml
 <modify_hot_folder>
 <job_chain name="myNestedJob_Chain">

   <job_chain_node.job_chain
      job_chain="myJob_Chain"
      state="100" next_state="200"
      error_state="1200"/>

   <job_chain_node.job_chain
      job_chain="myNext_Chain"
      state="200"
      next_state="300"
      error_state="1200"/>

   <job_chain_node.end
      state="1200"/>
   <job_chain_node.end
      state="300"/>

</job_chain>
</modify_hot_folder>


  

...