Skip to content
Snippets Groups Projects
Howtos.md 4.58 KiB
Newer Older
Armin Costa's avatar
Armin Costa committed
# Howto's

## Create a Trigger for a Task ##
Armin Costa's avatar
Armin Costa committed
 
 
Armin Costa's avatar
Armin Costa committed
There are different methods to trigger a *Task* execution process:
Armin Costa's avatar
Armin Costa committed
- Using the tag *RunOnTrigger*
Armin Costa's avatar
Armin Costa committed
- Using the tags *SartDate* and *StopDate*
- Using the filtering tag *FileType*

The most flexible method is actually the *FileType* filter, as everything is treated as a file being processed
 
 
 
Armin Costa's avatar
Armin Costa committed
### Using *FileType* filter method ###
Armin Costa's avatar
Armin Costa committed
 
 
The presence of a dedicated trigger file (eg. TR$PROCESSOR.*.trigger) , or also any other file, filtered by the <FileType> expression,
acts as a driver for the Task execution. This allows than to create a list of trigger files that the DES can then elaborate in a FIFO queue.

Because the Date for example is often used as input parameter for a processing time series for example,
the Date has to be passed as input parameter to the Task executing a particular job.

One approach to implement this, is to ensure that the trigger file TR$PROCESSOR.*.trigger includes the date at a certain position, i.e position 5 (. separated):
```
TREURAC_RADBEAM_P.southtyrol_highres.6120_6120.hour.8.2017-02-10T15:00:00.Eurac.01.00.trigger
```

Armin Costa's avatar
Armin Costa committed
So the implemented wrapper Script (*Perl*, *Python*, *Shell*) or Java Class for the Task can extract the processing parameters as needed, i.e. The date to be processed. 
Armin Costa's avatar
Armin Costa committed
The trigger file itself might contain even a more structured meta information in form of XML for example.

By convention the trigger file should have the following naming convention:
```
TR$PROCESSOR.$AOI.TileID.Type.Value.Date.Eurac.$versionMajor.$versionMinor.trigger
```
Any other naming convention can be adapted by providing an appropriate wrapper script that is called.
Armin Costa's avatar
Armin Costa committed

Armin Costa's avatar
Armin Costa committed
#### Example ####
Armin Costa's avatar
Armin Costa committed

Armin Costa's avatar
Armin Costa committed
**Processor configuration:**
```xml
<TaskGroup name="Processing" type="serial" active="yes" priority="NORM">
	<Task name="createMap" type="cmd" active="yes" priority="NORM">
		<EMail>mail@host.yourdomain</EMail>
		<NotifyEmail>OnError</NotifyEmail>
		<FileType>TREURAC_RADBEAM_P.*.trigger</FileType>
		<Command>sh</Command>
		<Parameter>/Algorithms/runProc.sh</Parameter>
	</Task>
	<Task>
		...
	</Task>
</TaskGroup>
```
 
 
**Task implementation:** (*runProc.sh*)
```sh
#!/bin/sh
arg=($*)
BASE_PATH=$1
AOI_NAME=$2
PROCESSOR_NAME=$3
TRIGGER_FILE_NAME=$4
 
echo "creating environment vars.."
# User specific aliases and functions
Armin Costa's avatar
Armin Costa committed
export PATH=$PATH:/Algorithms/
Armin Costa's avatar
Armin Costa committed
 
echo "start processing..."
 
file=$TRIGGER_FILE_NAME
echo "  processing file: $file"
 
DATE_FROM_FILE=$(echo "$file" | cut -d '.' -f 6)
echo "date: $DATE_FROM_FILE"
 
DATE=`date -d "$DATE_FROM_FILE"  +"%Y-%m-%d"`
HOUR=`date -d "$DATE_FROM_FILE" +"%H"`
HOUR2=$HOUR
HOUR=`expr $HOUR2 + 1`
MIN=`date -d "$DATE_FROM_FILE" +"%M"`
 
echo "running algorithm for date: $DATE"
```
 
 
Armin Costa's avatar
Armin Costa committed
Note: The Date format contained in the Trigger file naming convention should comply if possible with the format *yyyymmddThhmmss*

The trigger files may than be generated manually or via a script called by a Cronjob (see example below):
```
/Cronjobs/createDESTaskTriggers.sh /raid0/DES/data southtyrol_highres EURAC_RADBEAM_P 6120_6120 [ 20170101T091500 ]
```
 
 
**Cronjob Script:** (*createDESTaskTriggers.sh*)
```sh
#!/bin/sh
arg=($*)
BASE_PATH=$1
AOI_NAME=$2
PROCESSOR_NAME=$3
TILE_ID=$4
 
echo `date`
echo "creating trigger..."
TRIGGER_PATH=$BASE_PATH/$AOI_NAME/$PROCESSOR_NAME
DATE=`date +"%Y-%m-%dT%H:%M:%S"`
echo "Date: $DATE"
TR_FILE="TR$PROCESSOR_NAME.$AOI_NAME.$TILE_ID.year.2017.$DATE.Eurac.01.00.trigger"
echo "creating trigger $TRIGGER_PATH/$TR_FILE"
touch $TRIGGER_PATH/$TR_FILE
touch $TRIGGER_PATH/$TR_FILE.md5
echo "done"
echo "------------"
```
 
 
 
Armin Costa's avatar
Armin Costa committed
## Run a DES instance in Test Mode ##
 
When testing a new processor it could be useful to have a test environment where it is possible to check the output.
To do this is straightforward because for each installed DES instance there is a test_data folder where test can be performed.

**Steps:**
- Create a symbolic link to your processor: ln -s DES.jar DES_test.jar to have a better control on your DES_test (if you decide to call it in this way) processor
- Copy your YOUR_PROCESSOR.processor_config.xml file in the folder */DES/test_data/processor_config/*
- Do your changes to this file. For example you can enable or disable *AOI*, *Task*, *TaskGroup*, *Distribution*, *Download*, etc.
- Open the file */DES/config/DistributionServerTest.ini* and change the value of *LOGS_PATH* variable from *LOGS_PATH=LOG4J* to *LOGS_PATH=STDOUT*. This will allow to have the log in the standard output to facilitate the debug.
- Change to the DES folder: *cd /DES*
- Run the following command: 
```
java -jar DES_test.jar -c ./config/DistributionServerTest.ini -p YOUR_PROCESSOR.processor_config.xml
```