Versions Compared

Key

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

...

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>