Transfert de fichiers (MFTBundle)

De SOS Paris
Aller à : navigation, rechercher
MFT.png
Module MFT
Nom Transfert de fichiers
Version 2.0

Il existe de nombreux [outils de transferts de fichiers](https://en.wikipedia.org/wiki/Comparison_of_FTP_client_software) mais peu sont open source et capables de couvrir un large périmètre. Une solution pérenne est généralement de s'appuyer sur plusieurs outils pour répondre à l'ensemble des besoins mais l'inconvénient est l'obligation de maitriser ces différents outils, le but premier est donc d'offrir une interface générique pour la majorité des outils.

Principes

Pour suivre des transferts de fichiers, il est nécessaire de disposer des éléments suivants:

  • un référentiel contenant les informations nécessaires aux transferts
  • un état des transferts pour le suivi en temps réel
  • un historique pour compléter les informations du suivi

Par rapport à ces éléments, on considère le transfert lui-même:

  • le client apte à dialoguer avec le protocole du serveur
  • éventuellement un serveur ou un systême point à point
  • les paramètres de connexion pour ce transfert

Le client dépend de l'opération à effectuer et de la façon de l'effectuer:

  • Opération: copie, déplacement, suppression, création...
  • Protocoles: ftp, sftp, copie... mais aussi stmp, imap...

Cette dernière partie doit s'intégrer, à la manière d'un plugin, dans un système générique qui renvoie une vue fonctionnelle.

Architecture

Prenons l'exemple de Jade qui propose un client utilisant un référentiel au format ini ou xml et générant un fichier csv pour historiser les exécutions de transferts dans une base de données à travers un JobScheduler. La brique de transfert est intéressante car elle permet en soi d'intégrer des modules pour différents protocoles mais le manque de référentiel ne permet pas une vue globale, de plus l'historisation des exécutions est insuffisante car un transfert manquant ne sera pas remonté sur la console.

Jade.png

L'intérêt est de toujours fournir à l'utilisateur une vue fonctionnelle de ses transferts quelle que soit la technologie mise en place.

L'export peut tout aussi bien générer la ligne de commande complète, il suffit simplement de créer un nouveau modèle.

Connaître les définitions et les exécutions d'un transfert donne les moyens de comparer ce qui est attendu et ce qui est effectif.

Facteur

Le transfert de fichiers est très proche du métier de facteur:

  • il achemine une lettre ou un colis d'un expéditeur
  • il peut livrer plusieurs lettres en une seule fois
  • il garantit la livraison au destinataire
  • il connaît les adresses de l'expéditeur
  • il peut éventuellement demander un accusé de réception
  • il peut gérer des abonnements
  • il ne connait pas le contenu des lettres

On considérera donc les éléments suivants:

  • le transfert est l'acheminement d'un ou plusieurs fichiers
  • chaque transfert est lié à une connexion (host, port, user, password...)

Du point de vue Ari'i, on considère:

  • l'abonnement qui est la demande de transferts
  • la catégorie pour organiser les abonnements
  • la livraison qui est l'exécution de l'abonnement
  • le transfert qui est le détail de la livraison

Exécution

  • Le fichier de configuration est construit à partir des informations de la table MFT_TRANSFERS et ARII_CONNECTIONS.
  • L'exécution génère un log qui est traité pour identifier les erreurs d'exécutions
  • Chaque transfert est stocké dans la table MFT_HISTORY
  • Chaque livraison est stockée dans la table MFT_DELIVERIES.

Outils

Nous avons retenu les outils suivants:

  • Yade de SOS Berlin qui offre une configuration centralisée en .INI ou en fichier XML
  • cURL qui permet la gestion la plus complête des transferts montants et descendants en HTTP
  • FDT qui signifie Fast Data Transfer et qui offre une sécurité optimale pour le transfert

D'autres outils sont à l'étude et cette liste devrait évoluer dans la mesure où:

  • ils sont open source et peuvent être distribués
  • ils sont multi plateforme et fonctionnent indifféremment sur Unix et Windows
  • ils offrent une sécurité et une fiabilité suffisante pour la production

Erreurs

Les codes de sortie doivent être précis et non dépendants de l'outil ou du système hébergeur.

Exit Explication
0 Fichiers transférés
1 Erreur d'authentification
2 Fichier cible ouvert par un utilisateur
3 Serveur stoppé ou pare-feu
99 Aucun fichier trouvé

Configuration

Arborescence

Cette arborescence est un exemple d'organisation.

Transferts
   Environnement (TEST, PROD, etc...)
     + config
     + tools
          + yade
          + curl
          ...         
     + partners (catégorie de transferts)
          + partenaire 1
               + data
               + logs
               + archive
          + partenaire 2
          ...
          + partenaire n


Yade

Installation

Se reporter à l'installation de l'éditeur.

A la fin de l'installation, l'arborescence doit ressembler à ceci:

Transferts
   Environnement (TEST, PROD, etc...)
     + config
     + tools
          + yade
               + bin
               + lib
               + logs

Encapsulation Arii

Le lien entre Yade et Arii est réalisé par un script dans lequel on indique deux variables:

  • <REPERTOIRE RACINE>: Répertoire local
  • <SERVEUR WEB>: Serveur Arii

Version Windows (arii.cmd):

@echo off
@rem
@rem ------------------------------------------------------------
@rem Company: Solutions Open Source Paris
@rem Author : Eric Angenault <ae@sos-paris.com>
@rem $Id: arii.cmd
@rem
@rem 1: Environment
@rem 2: Settings
@rem 3: Profile
@rem ------------------------------------------------------------
SETLOCAL
set XFER_ROOT=<REPERTOIRE RACINE>
set CONFIG=%XFER_ROOT%\%1
set LOGS=%XFER_ROOT%\%1\logs
set TOOLS=${XFER_ROOT}\tools
set TIMESTAMP=%date:~-4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%

echo > %LOGS%\%3.csv

call %XFER_ROOT%\tools\yade\bin\jade.cmd -settings=%CONFIG%\%2.ini -profile=%3 -mandator=%3 > %LOGS%\%3.out
set /A JADE_EXIT=%ERRORLEVEL%
type %LOGS%\%3.log

%XFER_ROOT%\tools\curl\curl -Foperation=upload -Fdata=@%LOGS%\%3.csv -Flog=@%LOGS%\%3.log -Fout=@%LOGS%\%3.out http:/<SERVEUR WEB>/app_dev.php/mft/fr/receiver/yade

copy %LOGS%\%3.out %LOGS%\%3.out.back
copy %LOGS%\%3.csv %LOGS%\%3.csv.back
copy %LOGS%\%3.log %LOGS%\%3.log.back
del %LOGS%\%3.csv
del %LOGS%\%3.log

:fin
exit /B %JADE_EXIT%

Versions Unix (arii.sh):

#!/bin/sh
#
# ------------------------------------------------------------
# Company: Solutions Open Source Paris
# Author : Eric Angenault <ae@sos-paris.com>
# $Id: arii.sh
#
# 1: Environment
# 2: Settings
# 3: Profile
# ------------------------------------------------------------
XFER_ROOT=<REPERTOIRE RACINE>; export XFER_ROOT
CONFIG=${XFER_ROOT}/$1; export CONFIG
LOGS=${XFER_ROOT}/$1/logs;export LOGS
TOOLS=${XFER_ROOT}/tools;export TOOLS
TIMESTAMP=`date +"%Y%m%d_%H%M%S"`;export TIMESTAMP

echo > ${LOGS}/$3.csv

${TOOLS}/yade/bin/jade.sh -settings=${CONFIG}/$2.ini -profile=$3 -mandator=$3 > ${LOGS}/$3.out 2>&1
JADE_EXIT=$?
cat ${LOGS}/$3.out

curl -Foperation=upload -Fdata=@${LOGS}/$3.csv -Flog=@${LOGS}/$3.log -Fout=@${LOGS}/$3.out http://<SERVEUR WEB>/app_dev.php/mft/fr/receiver/yade
cp ${LOGS}/$3.out ${LOGS}/$3.out.back
cp ${LOGS}/$3.csv ${LOGS}/$3.csv.back
cp ${LOGS}/$3.log ${LOGS}/$3.log.back
rm ${LOGS}/$3.csv
rm ${LOGS}/$3.log

exit $JADE_EXIT

Yade est en java, l'installation windows est donc strictement équivalente à la version Unix sauf sur l'appel du shell, il suffit de reprendre les batchs pour mutualiser l'installation. Si le hub est installé sur un partage samba, le transfert peut être appelé indifféremment à partir d'Unix ou de Windows.

PHP

Le journal de transfert peut être volumineux, il est donc conseillé d'augmenter la taille limite du POST dans le fichier de configuration PHP.

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size=50M

Composants et objets

Les définitions d'un transfert sont stockées sur le portail, cela permet de s'affranchir d'outil utilisé pour le transfert aussi bien lors de la conception que pour le suivi. Le portail va créer les fichiers de configurations propres à l'outil et indiquer la ligne de commande pour une utilisation externe au portail.

Un transfert est l'ensemble des opérations nécessaires pour déplacer le lot de fichiers d'un point initial à un point final pour un partenaire.

Un transfert peut être traité en une seule opération mais il est généralement le résultat d'un ensemble de déplacements.

Schema.png

Portail

Le module de transfert de fichiers s'appuie sur Ari'i, il en utilise les tables mais il est nécessaire de disposer des droits suffisants pour modifier ces données.

Connexions

La table des connexions est réservée à l'administrateur Infra et fait partie intégrante du noyau. Le transfert utilise les paramètres de connexion mais ne les redéfinit pas.

Catégories

Les catégories permettent de classer les partenaires pour les intégrer dans le portail.

  • Un partenaire peut être lié à une catégorie

Définitions

Partenaires

Le partenaire regroupe les transferts pour un partenaire externe ou pour une application si il s'agit de déplacements internes.

Transferts

Un transfert est défini par l'ensemble des opérations qui permettent de déplacer un lot de fichiers d'un point à un autre.

  • Un transfert est lié à un partenaire

Opérations

L'opération est l'action exécutée sur une série de fichiers pour les déplacer d'un point à un autre. Elle indique la source, la cible, l'action (send, receive, copy...) et les paramètres.

  • Une opération est liée à un transfert
  • Une opération nécessite des connexions

Paramètres

Les paramètres du transfert sont propres au module MFT et définit les options génériques nécessaires aux échanges de fichiers.

  • Les paramétrages est lié à une ou plusieurs opérations

Planification (non implémentée)

Conserver les paramètres dans la base de données permet de suivre plus efficacement les transferts en comparant ce qui est attendu avec ce qui est exécuté.

Historisation

Statut

Le statut relie un transfert à sa dernière exécution historisée.

  • Le statut est lié à un transfert et à l'historique

Historique

L'historique conserve les données d'exécution d'un transfert.

  • L'historique est lié à un transfert

Livraisons

Les livraisons conservent les données d'exécution d'une opération, il concerne l'ensemble des fichiers d'un lot.

  • Une livraison est liée à son opération

Transmission

La transmission conserve les données d'exécution du fichier d'un lot transféré.

  • Une transmission est liée à une livraison.

Edition des transferts

Partenaires

Informations partenaire:

Nom Nom du partenaire
Catégorie Organisation sur le site (Ex: Interne ou Externe)
Title Nom long du partenaire
Description Quelques mots sur le partenaire

Groupes

Regroupement des échanges pour un partenaire, cette notion est généralement utile pour les tableaux de bords en indiquant un ensemble de transferts liés fonctionnellement mais sans lien technique.

Par exemple dans le cas d'un échange asynchrone comme l'envoi de factures et la réception des acquittements quelques jours plus tard, ces deux échanges ne sont pas directement liés mais il s'agit, fonctionnellement, du processus d'échange de factures.

Regroupement:

Nom Nom du partenaire
Catégorie Organisation sur le site (Ex: Interne ou Externe)
Title Nom long du partenaire
Description Quelques mots sur le partenaire

Transferts

Le transfert est une suite d'opérations, on le décrit comme un processus avec des étapes.

Détail

Nom Nom du transfert
Title Nom long du transfert
Partenaire Partenaire concerné par le transfert
Description Description du transfert
Environnement Domaine d'utilisation (T, P, D...)
Départ Première étape
Arrivée Dernière étape
Pas Nombre d'étapes du processus

Opérations

Liste les étapes du transferts, il est possible d'éditer directement une opération.

Schéma

Le schéma est dessiné en fonction des opérations.

Doc

La documentation reprend tous les éléments du transfert.


Opérations

Le transfert est une suite d'opérations, on le décrit comme un processus avec des étapes.

Si on utilise Yade comme client à travers les appels Arii, les informations de connexions sont directement envoyés dans la base de données afin qu'elles puissent être directement rattachées au transfert. Il est ensuite possible de les éditer.

Détail

Nom Nom de l'opération
Title Nom long de l'opération
Transfert Transfert auquel cette opération appartient.
Paramètres Profil de paramétrage.
Client Client utilisé pour cette opération (yade, ft, robocopy, etc...)
Pas Etape de cette opération dans le transfert.
Environnement Dans le cas ou le transfert est entre les environnements (ex: mise en prod de test vers prod).

Source:

Noeud Point de connexion (défini pas l'administrateur dans le module Administration).
Chemin Emplacement des données à transférer
Fichier Nom du fichier (masque défini en expression régulières)
Fichiers attendus Nombre de fichiers attendus pour considérer l'opération comme complète.
Sortie en absence Sort du processus si aucun fichier n'est présent

Cible:

Noeud Point de connexion (défini pas l'administrateur dans le module Administration).
Chemin Emplacement des données à transférer
Fichier Nom du fichier (masque défini en expression régulières)

Source

Visualise les informations de la connexion pour la source.

Cible

Visualise les informations de la connexion pour la cible.

Astuces

Attacher une opération à un transfert

Sachant qu'une nouvelle opération est directement insérée dans la base et qu'un transfert du même nom est aussi créé, il est possible d'affecter directement une opération à un transfert en drag&drop:

  • aller dans la page d'édition des transferts
  • choisir un transfert par un double clic
  • sélectionner un transfert qui a le même nom qu'une opération
  • le déplacer dans l'onglet opérations

Le transfert sera considéré comme une opération, rattaché au transfert en cours et supprimé de la liste des transferts.