Objet
Cette chaîne permet d'envoyer nos fichiers depuis GCE vers l'environnement SaaS de Synapse, puis de lancer le calcul de prev, et enfin de récupérer les fichiers issus de Synapse à destination de l'équipe Data.
Ordre d’exécution
sendSynapseSaas.job.xmlprépare les fichiers et lance l’envoi SaaSpartitionFichierPrevSynapse.ps1découpePREVISIONS_EXP.LINavant l’uploadcalculSynapseSaas.job.xmllance le calcul Synapse via batch WindowsgetExportLibreSaas.job.xmlrécupère les exports libres après calcul
Détail de l’infra
- 10.9.31.36 : RECETTE — VM sur laquelle tourne le smart client SCM
- 10.9.16.36 : PROD — VM sur laquelle tourne le smart client SCM
Sources de référence
sendSynapseSaas.job.xmlsendSynapseSaas.ps1partitionFichierPrevSynapse.ps1calculSynapseSaas.job.xmlgetExportLibreSaas.job.xmlgetExportLibreSaas.ps1
Chaîne logique
Détail du traitement : sendSynapseSaas
Fichiers utilisés
sendSynapseSaas.job.xmlsendSynapseSaas.ps1partitionFichierPrevSynapse.ps1
Logique de traitement
Appel du partitionnement SaaS
Le job appelle partitionFichierPrevSynapse.ps1 sur le serveur de traitement GCE.
Pourquoi cette brique existe
Le partitionnement est une spécificité SaaS autour de PREVISIONS_EXP.LIN.
On ne peut pas envoyer au SaaS de CEGID un fichier >1GO
Le but n'est pas juste de "couper" le fichier arbitrairement. Il faut :
- réduire la volumétrie envoyée d'un seul bloc
- garder ensemble toutes les lignes d'un même couple fonctionnel
- produire plusieurs fichiers exploitables par Synapse SaaS
Ce que le script fait
Le script partitionFichierPrevSynapse.ps1 lit :
/generix/out/PREVISIONS_EXP.LIN
Puis il génère :
PREVISIONS_EXP_1.LINPREVISIONS_EXP_2.LIN- etc.
Les fichiers sont générés dans :
/generix/out
Règle de découpage
Le découpage se fait par couple :
AnneeCodecpg
Lecture technique du fichier :
Annee= positions1-4Codecpg= positions192-202, puisTrim()
Une ligne de moins de 202 caractères est ignorée.
Une ligne dont l'année n'est pas numérique est ignorée.
Ordre d'exécution détaillé
1. Vérification du fichier d'entrée
Le script vérifie que PREVISIONS_EXP.LIN existe.
2. Pass 1 : identification des couples uniques
Le fichier est lu ligne par ligne avec StreamReader.
Le script stocke uniquement les clés uniques Annee|Codecpg.
Il ne garde pas toutes les lignes en mémoire lors de ce premier passage.
3. Tri et répartition des couples
Les couples sont triés :
- par année
- puis par
codecpg
Ensuite, le script affecte les couples à des fichiers de sortie avec un maximum de 100 couples par fichier.
4. Pass 2 : réécriture dans les fichiers cibles
Le fichier source est relu.
Chaque ligne valide est redirigée vers le bon PREVISIONS_EXP_<n>.LIN selon le mapping calculé à l'étape précédente.
Ce qu'il faut retenir
- toutes les lignes d'un même couple restent dans le même fichier
- le script fait deux passes pour limiter la mémoire
- la découpe est métier, pas purement volumétrique
- le commentaire historique du script parle de
PREVISIONS_EXP_SAAS_###.LIN, mais le code génère bienPREVISIONS_EXP_<n>.LIN
Upload des fichiers vers Cegid
Le job appelle ensuite sendSynapseSaas.ps1.
Ce script fait :
- vérifie la présence d'
AzCopy - vérifie l'existence de
/generix/out - récupère un JWT auprès de Cegid
- récupère une clé SAS via l'API RFE
- liste les fichiers
*.LINdu répertoire - exclut explicitement
PREVISIONS_EXP.LIN - trie les fichiers par taille
- envoie chaque fichier vers le sous-dossier Blob
/in
Point clé
PREVISIONS_EXP.LINn'est pas envoyé tel quel- ce sont les fichiers partitionnés
PREVISIONS_EXP_*.LINqui sont envoyés
Gestion technique de l'upload
Le script renouvelle la clé SAS tous les 5 fichiers.
En cas d'erreur d'authentification (401, 403, message Authentication) :
- il demande un nouveau SAS
- il retente l'upload du fichier en échec
Nettoyage post-envoi
Une fois l'upload terminé, le job shell supprime tous les fichiers partitionnés :
/generix/out/PREVISIONS_EXP_*.LIN
Détail du traitement : calculSynapseSaas
Ce que cette brique fait
calculSynapseSaas sert à déclencher le calcul Synapse après le dépôt des fichiers dans le cloud Cegid.
Le dépôt ne montre pas le calcul lui-même. Il montre uniquement l'appel au batch qui le lance.
Ordre d'exécution
Le job calculSynapseSaas.job.xml exécute :
ssh linvosges.pri/administrateur@10.9.31.36 "c:\\scripts\\trtMatin.bat"
Ce batch va lancer le calcul de prev.
Détail du traitement : getExportLibreSaas
Ce que cette brique fait
getExportLibreSaas sert à récupérer les exports libres après calcul.
Cette brique ne se contente pas de télécharger des fichiers. Elle commence par demander à un batch distant de lancer la production des exports libres, puis elle les télécharge.
Ordre d'exécution détaillé
1. Appel du script PowerShell
Le job getExportLibreSaas.job.xml lance, sur 10.6.31.22 :
pwsh -File '/generix/ioscripts/getExportLibreSaas.ps1'
2. Lancement du batch distant d'export libre
Le script PowerShell appelle :
ssh linvosges.pri/administrateur@10.9.31.36 C:\scripts\export_libre\launch_export_libre.bat
Contenu de ce fichier
@echo off rem Dossier où se trouvent les 16 scripts set "BASE=C:\scripts\export_libre" rem ----------------------------------------------------------------- rem Appels séquentiels : chaque script .bat doit exister à ce chemin rem ----------------------------------------------------------------- call "%BASE%\export_libre_1_QBPMODULE.bat" call "%BASE%\export_libre_2_QSAISON.bat" call "%BASE%\export_libre_3_QBPMODULEDONNEES.bat" call "%BASE%\export_libre_4_QBPLOI.bat" call "%BASE%\export_libre_5_QSATTRIB.bat" call "%BASE%\export_libre_6_QSTKDISPO.bat" call "%BASE%\export_libre_7_QBPSESSIONBP.bat" call "%BASE%\export_libre_8_QBPARBRE.bat" call "%BASE%\export_libre_9_QCARACT.bat" call "%BASE%\export_libre_10_QVALCAR.bat" call "%BASE%\export_libre_11_QSTKCOLT.bat" call "%BASE%\export_libre_12_QUVQTEDETOFD.bat" call "%BASE%\export_libre_13_QUVDATESTK.bat" call "%BASE%\export_libre_14_QARTTECH.bat" call "%BASE%\export_libre_15_QSITE.bat" call "%BASE%\export_libre_16_QPLANGP.bat" call "%BASE%\export_libre_17_QBPREVISION" echo --------------------------------------------------------------- echo Tous les scripts ont été exécutés. Fermeture dans 3 secondes... cd \scripts
On lance donc ici tous les exports libres paramétrés dans SCM.
3. Attente forcée de 60 secondes
Le script attend 60 secondes avant de télécharger, car le dernier .csv n'est pas toujours présent immédiatement quand SCM rend la main.
4. Authentification et récupération du SAS
Le script :
- récupère un JWT auprès de Cegid
- appelle l'endpoint SAS du conteneur des exports libres
- récupère l'URL Blob et le SAS
Conteneur observé :
98324144-scm-98324144-002-test-gce-scm-exp-lib
5. Téléchargement des fichiers
Le téléchargement se fait avec AzCopy :
- source : sous-répertoire Blob
out - destination locale :
/generix/out/scm/exp_lib - filtre :
*_<yyyymmdd>_*.csv - seuls les CSV du jour sont récupérés