.. _admin-templates:

Modèles de règles
=================

Concepts
--------

Dans le cas le plus simple, un **flux** correspond à un transfert. Si le
flux doit transiter via des serveurs de rebond, il est alors composé de
plusieurs transferts.

Prenons l'exemple du flux suivant :

.. uml::

   left to right direction

   title flux et transferts
   (A) --> (B)
   (B) --> (C)
   (C) --> (D)
   (B) --> (E)
   (E) --> (F)
   (F) --> (G)

Ce flux gère le transfert des fichiers du partenaire ``A`` aux
partenaires ``D`` et ``G``.

Ce flux est composé de 6 **transferts** (numérotés ci dessous) répartis
sur deux **routes** :

.. uml::

   left to right direction

   title Numérotation des transferts au sein d'un flux
   (A) --> (B): 1
   (B) --> (C): 2
   (C) --> (D): 4
   (B) --> (E): 3
   (E) --> (F): 5
   (F) --> (G): 6
   note right of (D) : Route 1
   note right of (G) : Route 2

Cette numérotation se retrouve dans le contexte d'évaluation des
modèles sous le nom ``flow_index``.

Une deuxième numérotation est disponible dans le contexte d'évaluation:
c'est l'indice du transfert dans la route. il se retrouve sous le nom
``route_index`` et correspond à l'ordre des transferts *au sein d'une
route* :

.. uml::

   left to right direction

   title Numérotation des transferts au sein d'une route
   (A) --> (B): 1
   (B) --> (C): 2
   (C) --> (D): 3
   (B) --> (E): 2
   (E) --> (F): 3
   (F) --> (G): 4
   note right of (D) : Route 1
   note right of (G) : Route 2


Chaque transfert correspond à une **règle de transfert** de Waarp R66.
Cette règle est définie à partir d'un **modèle de flux**.

L'écran de gestion des modèles de flux permet de consulter la liste des
templates utilisé pour les flux ainsi que de les modifier.

.. figure:: ../../_static/img/templates-list.png
   :align: center

   Liste des templates

Structure du template
~~~~~~~~~~~~~~~~~~~~~

Un modèle de flux est une liste de règles de transfert :

.. code-block:: yaml

  rules: [
    Règle 1
    Règle 2
    ...
    règle N
  ]


Définition des règles
~~~~~~~~~~~~~~~~~~~~~

Les règles sont composées d'un nom (``name``), d'un mode, d'une série de
tâches (les traitements pré-transfert, post-transfert et en cas d'erreur),
Ainsi que d'une condition d'exécution (``when``).

Les chaines de traitement pré-transfert, post-transfert et en cas d'erreur
peuvent être définies pour l'émetteur du fichier (``sender``) et le récepteur
(``receiver``).

.. code-block:: yaml

  name: "{{flow_name}}_{{flow_index}}"
  when: [condition]
  mode: send
  tasks: {
    sender: {
      pré: [    # Tâches exécutées par l'émetteur du fichier avant le transfert
        task
        ...
        ]
      post: [   # Tâches exécutées par l'émetteur du fichier après le transfert
        task
        ...
        ]
      error: [  # Tâches exécutées par l'émetteur du fichier en cas d'erreur
        task
        ...]
      }

    receiver: {
      pré: [    # Tâches exécutées par le récepteur du fichier avant le transfert
        task
        ...
        ]
      post: [   # Tâches exécutées par le récepteur du fichier après le transfert
        task
        ...
        ]
      error: [  # Tâches exécutées par le récepteur du fichier en cas d'erreur
        task
        ...
        ]
      }
    }


Définition des tâches
~~~~~~~~~~~~~~~~~~~~~

Les tâches sont composées d'un type, d'arguments, différents pour chaque tâches
(``path``), d'un délais (``delay``), et d'une condition d'exécution optionnelle
(``when``).

.. code-block:: yaml

  type: ZIP
  path: "#TRUEFULLPATH# #ARCHPATH#"
  delay: 1
  when: route_index == last_index

La saisie d'un template
-----------------------

L'écran d'édition d'un template est découpé en 2 partie:
La première décrit le template sous la forme d'une arborescence
et permet d'accéder rapidement à une partie spécifique du template.
La deuxieme permet de l'éditer.

.. figure:: ../../_static/img/templates-edit.png
   :align: center

   Edition d'un template


Ajout d'une règle
~~~~~~~~~~~~~~~~~

Pour ajouter une règle cliquer sur le bouton en face du label ``Règles`` et sélectioner ``Ajouter une règle``.

.. figure:: ../../_static/img/templates-add-rule.png
   :align: center

   Ajout d'une règle

Suppression d'une règle
~~~~~~~~~~~~~~~~~~~~~~~

Pour supprimer une règle cliquer sur le bouton en face du label de la règle à supprimer et selectioner ``Supprimer la règle``.

.. figure:: ../../_static/img/templates-delete-rule.png
   :align: center

   Ajout d'une règle

Ajout d'une tâche
~~~~~~~~~~~~~~~~~

Pour ajouter une tâche cliquer sur le bouton en face d'un des labels ``pre``, ``post`` ou ``error`` et sélectioner ``Ajouter une tâche``.

.. figure:: ../../_static/img/templates-add-task.png
   :align: center

   Ajout d'une tâche

Suppression d'une tâche
~~~~~~~~~~~~~~~~~~~~~~~

Pour supprimer une tâche cliquer sur le bouton en face du label de la tâche à supprimer et sélectioner ``Supprimer la tâche``.

.. figure:: ../../_static/img/templates-delete-rule.png
   :align: center

   Ajout d'une règle
