Maitriser ses transferts de fichiers

Démarrage sur arrivée de fichier

Le déclenchement sur arrivée de fichiers est directement intégré au traitement. Cet exemple montre comment attendre un fichier et déclencher un autre traitement en lui passant le nom du fichier.

L’intérêt de cet exercice est de démontrer la simplicité du "job chain" qui prend en charge, de manière transparente, l’ensemble de ces mécanismes.

Fichier Description Type Taille
Exemple transferts (Windows)

Les variables sont au format %VAR% et le fichier est attendu dans c :\temp

zip974 octets
Exemple transferts (Unix)

Les variables sont au format $VAR et le fichier est attendu dans /tmp

gz678 octets

Ce premier exemple permet de déclencher un traitement indépendant sur l’arrivée d’un fichier. Le nom du ou des fichiers est automatiquement utilisable dans le batch.

Pour ce test, vous pouvez suivre les instructions et créer les traitements manuellement ou décompresser l’archive correspondant à votre système d’exploitation dans le répertoire config/live de votre ordonnanceur.

Le zip décompresse 2 fichiers dans le répertoire transfert :
- Attente.job.xml pour le job d’attente de fichier
- Traitement.job.xml pour le traitement proprement dit

Cet exemple est un simple exercice pour découvrir différents mécanismes :
- l’attente de fichier proprement dite
- le déclenchement d’un traitement sur le succès d’un prédécesseur
- le passage d’arguments en utilisant les APIs

La réponse simple à ce type de problème est l’utilisation de séquence qui prend en charge nativement le passage d’argument entre les traitements et la suppression du fichier ou son archivage en fun de chaine.

Création du traitement

PNG
Pour commencer, on va crée un nouveau traitement indépendant (order=no) qui va simplement affiché la liste des fichiers reçus. Cette liste est accessible par la variable d’environnement SCHEDULER_TASK_TRIGGER_FILES.

Shell Unix

echo $SCHEDULER_TASK_TRIGGER_FILES
exit 0

Shell Windows

echo %SCHEDULER_TASK_TRIGGER_FILES%
exit 0

PNG
Le déclenchement par fichier doit être précisé dans les Runs Options (options d’exécution).
On indique simplement :
- le nom du répertoire
- le nom de fichier en utilisant les expressions régulières

Le traitement est terminé, on le sauvegarde afin de tester le déclenchement.

PNG - 16.9 ko

Arrivée de fichier

Pour le test, il suffit de déplacer un fichier dans le répertoire ou le créer directement en ligne de commande. Dans notre exemple, on attend un fichier qui commence par START dans le répertoire c :\temp

On peut lancer le traitement par l’invite de commande :
echo test >c:\temp\START_TEST.txt

Le traitement démarre quasi instantanément (n’oubliez pas de vous mettre en rafraichissement automatique).

On peut ensuite vérifier dans le journal du traitement que le fichier est bien arrivé.

[info]   SCHEDULER-918  state=starting (at=never)
[info]   SCHEDULER-987  Starting process: "C:\Windows\TEMP\\sosCD5DE.cmd"
[info]
[info]   C:\SOS-PARIS\jobscheduler\agent>echo FICHIER: c:\temp\START_TEST.txt
[info]   FICHIER: c:\temp\START_TEST.txt
[info]
[info]   C:\SOS-PARIS\jobscheduler\agent>exit 0
[info]   SCHEDULER-915  Process event
[info]   SCHEDULER-918  state=closed

Pilotage

PNG
Pour faciliter l’exploitation, on va indiquer la liste des fichiers arrivés dans le champ "state text". Pour cela, on retourne sur le JobEditor pour ajouter une fonction de "post-traitement".

On va dans la section Pre-Postprocessing pour ajouter une fonction javascript  :
- Ajout d’une nouvelle fonction
- Ajouter le code suivant :

function spooler_task_after() {
        spooler_job.state_text = spooler_task.trigger_files();
return true;
}

Sauvegarder la nouvelle définition.

PNG - 11.3 ko

L’arrivée du nouveau fichier est directement affiché sur la console du pilote.


Démarrage d’un traitement

On va utiliser ce traitement comme un déclencheur pour d’autres traitements, l’intérêt est de séparer les attentes de fichiers et les traitements déclenchés afin de les rendre générique.

PNG
On revient sur le JobEditor pour créer un nouveau traitement qui sera déclencher par notre traitement d’attente de fichier :
- ce traitement est un simple shell dont le nom est Traitement
- le shell est simplement un echo sur la variable TRIGGER_FILES.

Shell Unix

echo $SCHEDULER_TASK_TRIGGER_FILES
exit 0

Shell Windows

echo %SCHEDULER_TASK_TRIGGER_FILES%
exit 0

On sauvegarde ce nouveau traitement et on renvient sur la définition du précédent :
- on sélectionne la section Commands du traitement
- on choisit New command et on remplace le statut error en success dans la liste déroulante
- comme on souhaite démarrer un autre traitement indépendant, on indique start job et le nom du traitement à déclencher.

On crée un nouveau fichier dans le répertoire sous surveillance et on vérifié que les traitements ont bien démarré. Le journal du premier traitement confirme l’évènement de départ :

[info]   SCHEDULER-918  state=starting (at=never)
[info]   SCHEDULER-987  Starting process: "C:\Windows\TEMP\\sosF60EB.cmd"
[info]    
[info]   C:\SOS-PARIS\jobscheduler\agent>echo FICHIER: c:\temp START_TEST.txt  
[info]   FICHIER: c:\temp\START_TEST.txt
[info]    
[info]   C:\SOS-PARIS\jobscheduler\agent>exit 0
[info]   SCHEDULER-965  Executing command <?xml version="1.0" encoding="ISO-8859-1"?><start_job job="transferts/Traitement"></start_job>
[info]   SCHEDULER-918  state=closed
[info]   SCHEDULER-962  Protocol ends in C:/SOS-PARIS/jobscheduler/agent/logs/task.transferts,Attente.log

Passage d’argument

La variable SCHEDULER_TASK_TRIGGER_FILES n’est initialisée que dans le traitement d’attente de fichier. Pour passer cette valeur au traitement déclenché, il est nécessaire de passer par différentes étapes en modifiant le premier traitement de la manière suivante :
- définir une valeur TRIGGER_FILES qui sera initialisée avec la valeur SCHEDULER_TASK_TRIGGER_FILES
- ajouter l’initialisation dans notre fonction de post-traitement
- indiquer la copie de paramètre dans le déclencheur
- utiliser la valeur SCHEDULER_PARAM_TRIGGER_FILES dans le second paramètre

PNG
- Etape 1

Dans l’onglet Param on crée la variable TRIGGER_FILE, la valeur n’a pas d’importance car elle sera écrasée dés l’arrivée du fichier.

Pour rappel, une variable peut être utilisée dans un script SHELL en la préfixant par SCHEDULER_PARAM

PNG
-  Etape 2

Cette étape consiste à indiquer qu’on copie les paramètres de la tâche pour les passer au traitement déclenché.

Cela signifie que tous les paramètres définis dans le traitement d’attente seront utilisables directement dans le second traitement.

PNG
- Etape 3

On va enrichir la fonction Javascript pour initialiser la variable TRIGGER_FILES avec le contenu de SCHEDULER_TASK_TRIGGER_FILES.

function spooler_task_after() {
        spooler_job.state_text = spooler_task.trigger_files();
        spooler_task.params.set_var( "TRIGGER_FILES", spooler_task.trigger_files() );
return true;
}

Le traitement suivant peut ensuite utiliser la valeur SCHEDULER_PARAM_TRIGGER_FILES

Le script shell du second traitement devient :

Shell Unix

echo $SCHEDULER_PARAM_TRIGGER_FILES
exit 0

Shell Windows

echo %SCHEDULER_PARAM_TRIGGER_FILES%
exit 0

7 avril 2012


  • LangageJavascript
  • JavaScript est un langage de programmation de scripts principalement utilisé dans les pages web interactives mais aussi côté serveur. C’est un langage orienté objet à prototype, c’est-à-dire que les bases du langage et ses principales interfaces sont fournies par des objets qui ne sont pas des instances de classes, mais qui sont chacun équipés de constructeurs permettant de créer leurs propriétés, et notamment une propriété de prototypage qui permet d’en créer des objets héritiers personnalisés.

    Source : Wikipedia

  • Articles Initialisation de la date du jour