PHP XML Interface
Question: How to communicate with JobScheduler from PHP scripts e.g. to add jobs.
Downloads:
- package_scheduler.zip - basic communication classes
- package_classes.zip - basic classes
Instructions:
- Unzip package_scheduler.zip to folder package in your web folder .
- Unzip package_class.zip to folder package in your web folder
How it works:
JobScheduler – Program Interface
This document describes how applications can communicate with the JobScheduler. Possible tasks could be as follows:
- Temporary creation of jobs
- Starting jobs
- Adding jobs
- Changing runtime
- Etc.
The communication is explained by the means of PHP examples. However you can use any other programming language of your choice.
Communication
The communication with JobScheduler takes place via TCP, where XML commands are transmitted. You can check the documentation for the possible XML commands: http://www.sos-berlin.com/doc/en/scheduler.doc/index.xml
Note: All changes, which are made using the xml-commands vie TCP-communication are not persistent. E.g. added jobs are no longer available after restarting the JobScheduler
Example:
Adding of a job with the name myJob. The Job runs once a day at 6pm and lists the table c:\temp.
<add_jobs> <job name="myJob" title = "my first job"> <script language="shell"> <![CDATA[ dir c:\temp ]]> </script> <run_time> <period single_start="18:00"/> </run_time> </job> </add_jobs>
Example with Telnet
telnet localhost 4454
The following XML string can be send e.g. via Telnet
(The JobScheduler receives commands)
<add_jobs> <job name="myJob" title = "my first job"> <script language="shell"> <![CDATA[dir c:\temp ]]> </script> <run_time> <period single_start="18:00"/> </run_time> </job> </add_jobs>
(The JobScheduler answers)
<?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)
- //open Socket
- //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>';
- //send command
- //Socket schließen
After the JobScheduler has answered, you can view the Job in the Web GUI of the JobScheduler.
Evaluate Answer
The following function delivers the JobSchedulers answers in one string. The JobScheduler delivers the answer via the same socket, that was previously used during fputs, e.g. the answer can also be delivered directly after fputs.
- function get_answer($socket) {
- $answer = ''; $s = '';
- $answer .= $s;
- // chr(0) am Ende entfernen.
- break;
- }
- }
- return $answer;
- }
Communication with PHP Classes
For an application that sends commands to the JobScheduler it is very usefull to have a proper error handling. Apart from that, a higher level of abstraction is useful for understanding the source code. For this reason SOS GmbH offers a class for processing the communication. The class encapsulates the socket calls and provides a method for reading XML answers of the JobScheduler.
Installation
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.zip
In your application program include the class with:
require_once( 'scheduler/sos_scheduler_command.inc.php');
Example
The example can be realized with these classes as follows:
- //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()) {
- return 0;
- }
- //send command
- $this->command->command($cmd);
- if ($command->get_answer_error()) {
- }
- //close socket
- $command->disconnect();
Commands with xml-php Interface
One of the key tasks for the communication with JobScheduler is the creation of XML commands. To this end, you could use string functions or DOM classes
Another possibility is to use the xml-php-interface. The interface encapsulates the construction of XML commands and the communication with the JobScheduler. In this case the classes described in Communication with PHP Classes are used.
The advantage when using these classes is the easy handling when assembling the XML data stream.
Within your application you have to setup the Include directory.
ini_set( 'include_path', 'packages' );
Example
The example with these classes is realized as follows:
- //load missing classes and returns an object of the class
- function &get_instance($class, $include_path='scheduler/', $extension='.inc.php') {
- }
- $object = new $class;
- $object->host=APP_SCHEDULER_HOST;
- $object->port=APP_SCHEDULER_PORT;
- return $object;
- }
- $job = &get_instance('SOS_Scheduler_Job','scheduler/');
- //Setting some properties
- $job->name = "myJob";
- $job->title = "my first job ";
- //Set the implentation
- $job->script('shell')->script_source='dir c:\temp';
- //The job has a runtime
- $job->run_time()->period()->single_start = "18:00";
- $job_command = &get_instance('SOS_Scheduler_JobCommand_Launcher','scheduler/');
- if (! $job_command->add_jobs($job)) {
Example of Use
For the following examples it is assumed that this code is preceeding.
- //load missing classes and returns an object of the class
- function &get_instance($class, $include_path='scheduler/', $extension='.inc.php') {
- }
- $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….
At the end of each example you can see the XML code that will be send to JobScheduler.
Adding a Order to a Job Chain
- //-------------------------------------------------------------------------
- // 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)) {
Generated XML
<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>
Remove an Order from a Job Chain
- //-------------------------------------------------------------------------
- // 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)) {
- }
Generated XML
<remove_order order="sostest_13" job_chain="jobchain"/>
Change an Existing Order
- //------------------------------------------------------------------------
- //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)) {
- }
- //Now change the order.state
- $order = $order_launcher->modify_order('jobchain','sostest_14');
- $order->state=2;
- if (!$order_launcher->execute($order)) {
- }
Generated XML
<modify_order order="sostest_14" job_chain="jobchain" state="2"></modify_order>
Start an Order with Submit
- //-----------------------------------------------------------------------
- // How to start an order with submit.
- // This can be usefull, 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')) {
- }
Generated XML
<add_order at="now+30" id="sostest_15" job_chain="jobchain" replace="yes" state="2"> </add_order>
Adding a Job
- //------------------------------------------------------------------------
- // 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 implentation
- $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 forr 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)) {
Generated XML
<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
- //------------------------------------------------------------------------
- // 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)) {
- }
- //Now the job will be removed
- if (! $job_command->remove($job->name)) {
- }
Generated XML
<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
- //------------------------------------------------------------------------
- // 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)) {
- }
- if (! $job_command->start($name='test_jobname3', $start_at="now" )) {
- }
Generated XML
start_job job="test_jobname3" at="now"></start_job>
Setting the runtime of a job
- //-------------------------------------------------------------------
- // 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/');
- //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');
Generated XML
<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
- //--------------------------------------------------------------
- //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';
br>
Generated XML
<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
- // 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/');
Generated XML
<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
- //--------------------------------------------------
- // 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/');
Generated XML
<modify_hot_folder folder="./test"> <lock name="myLock" max_non_exclusive="1"></lock> </modify_hot_folder><br>
Adding a Process_class to a hot folder
- //-------------------------------------------------------------------------
- // 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
<modify_hot_folder folder="./test"> <process_class name="myProcess_class" max_processes="1" replace="yes"> </process_class> </modify_hot_folder>
Adding a Job_Chain to a hot folder
- //-------------------------------------------------------------
- // 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/');
Generated XML
<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
- //-------------------------------------------------------------
- // 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/');
Generated XML
<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
- //-------------------------------------------------------------
- // How to add a job_chain to a job_chain
- //-------------------------------------------------------------
- $job_chain = &get_instance('SOS_Scheduler_Job_Chain','scheduler/');
- // First setting up two job_chains.
- //First job_chain
- $job_chain->name = "myJob_Chain";
- //Adding some Job_chain_nodes
- $job_chain->add_job("my_job1","1","50","99");
- $job_chain->add_job("my_job2","2","50","99");
- //Adding the endnodes
- $job_chain->add_end_node("99");
- $job_chain->add_end_node("50");
- //Adding the job_chain to the hotfolder
- $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');
- //Second job_chain
- $next_job_chain = &get_instance('SOS_Scheduler_Job_Chain','scheduler/');
- $next_job_chain->name = "myNext_Chain";
- //Adding some Job_chain_nodes
- $next_job_chain->add_job("my_job3","1","50","99");
- $next_job_chain->add_job("my_job4","2","50","99");
- //Adding the endnodes
- $next_job_chain->add_end_node("99");
- $next_job_chain->add_end_node("50");
- //Adding the job_chain to the hotfolder
- $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');
- //Now creating a third job_chain which contains the first and the second.
- $nested_job_chain = &get_instance('SOS_Scheduler_Job_Chain','scheduler/');
- $nested_job_chain->name = "myNestedJob_Chain";
- //Adding the first nested job_chain.
- $job_chain_node = new SOS_Scheduler_Job_Chain_Node_Job_Chain("100");
- //Setting some properties
- $job_chain_node->state = "100";
- $job_chain_node->next_state = "200";
- $job_chain_node->error_state = "1200";
- $job_chain_node->job_chain = "myJob_Chain";
- //Adding the job_chain_node to the job_chain;
- $nested_job_chain->add_node($job_chain_node);
- //Adding a second job_chain with -> add_job_chain();
- $nested_job_chain->add_job_chain("myNext_Chain","200","300","1200");
- //Adding the endnodes
- $nested_job_chain->add_end_node("1200");
- $nested_job_chain->add_end_node("300");
- //Adding the job_chain to the hotfolder
- $modify_hot_folder_command = &get_instance('SOS_Scheduler_HotFolder_Launcher','scheduler/');
Generated XML
<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>
PHP XML InterfaceQuestion: How to communicate with JobScheduler from PHP scripts e.g. to add jobs.Downloads:
| |
Instructions:
How it works: JobScheduler – Program InterfaceThis document describes how applications can communicate with the JobScheduler. Possible tasks could be as follows:
The communication is explained by the means of PHP examples. However you can use any other programming language of your choice. CommunicationThe communication with JobScheduler takes place via TCP, where XML commands are transmitted. You can check the documentation for the possible XML commands: http://www.sos-berlin.com/doc/en/scheduler.doc/index.xml Note: All changes, which are made using the xml-commands vie TCP-communication are not persistent. E.g. added jobs are no longer available after restarting the JobScheduler Example: Adding of a job with the name myJob. The Job runs once a day at 6pm and lists the table c:\temp.<add_jobs> <job name="myJob" title = "my first job"> <script language="shell"> <![CDATA[ dir c:\temp ]]> </script> <run_time> <period single_start="18:00"/> </run_time> </job> </add_jobs> Example with Telnet telnet localhost 4454 The following XML string can be send e.g. via Telnet (The JobScheduler receives commands) <add_jobs> <job name="myJob" title = "my first job"> <script language="shell"> <![CDATA[dir c:\temp ]]> </script> <run_time> <period single_start="18:00"/> </run_time> </job> </add_jobs> (The JobScheduler answers) <?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)
After the JobScheduler has answered, you can view the Job in the Web GUI of the JobScheduler. Evaluate Answer The following function delivers the JobSchedulers answers in one string. The JobScheduler delivers the answer via the same socket, that was previously used during fputs, e.g. the answer can also be delivered directly after fputs.
Communication with PHP ClassesFor an application that sends commands to the JobScheduler it is very usefull to have a proper error handling. Apart from that, a higher level of abstraction is useful for understanding the source code. For this reason SOS GmbH offers a class for processing the communication. The class encapsulates the socket calls and provides a method for reading XML answers of the JobScheduler. InstallationIn 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.zip In your application program include the class with: require_once( 'scheduler/sos_scheduler_command.inc.php'); Example The example can be realized with these classes as follows:
Commands with xml-php InterfaceOne of the key tasks for the communication with JobScheduler is the creation of XML commands. To this end, you could use string functions or DOM classes Another possibility is to use the xml-php-interface. The interface encapsulates the construction of XML commands and the communication with the JobScheduler. In this case the classes described in Communication with PHP Classes are used. The advantage when using these classes is the easy handling when assembling the XML data stream. Within your application you have to setup the Include directory. ini_set( 'include_path', 'packages' ); Example The example with these classes is realized as follows:
Example of UseFor the following examples it is assumed that this code is preceeding.
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…. At the end of each example you can see the XML code that will be send to JobScheduler. Adding a Order to a Job Chain
Generated XML <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> Remove an Order from a Job Chain
Generated XML <remove_order order="sostest_13" job_chain="jobchain"/> Change an Existing Order
Generated XML <modify_order order="sostest_14" job_chain="jobchain" state="2"></modify_order> Start an Order with Submit
Generated XML <add_order at="now+30" id="sostest_15" job_chain="jobchain" replace="yes" state="2"> </add_order> Adding a Job
Generated XML <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
Generated XML <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
Generated XML start_job job="test_jobname3" at="now"></start_job> Setting the runtime of a job
Generated XML <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
Generated XML <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 foldersAdding a Job to a hot folder
Generated XML <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
Generated XML <modify_hot_folder folder="./test"> <lock name="myLock" max_non_exclusive="1"></lock> </modify_hot_folder><br> Adding a Process_class to a hot folder
Generated XML <modify_hot_folder folder="./test"> <process_class name="myProcess_class" max_processes="1" replace="yes"> </process_class> </modify_hot_folder> Adding a Job_Chain to a hot folder
Generated XML <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
Generated XML <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
Generated XML <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> |