GPF Generate Archive - Documentation

Description: Ce script est chargé de copier sur le stockage final tous les fichiers livrés au sein des livraisons en entrée. Cette copie doit permettre de créer une nouvelle donnée stockée ARCHIVE diffusable ou d’en mettre à jour une déjà existante. Voir le ticket originel : https://jira.worldline.com/browse/IGNGPF-553
Author and contributors: Loïc Bartoletti, Jean-Marie Kerloch, Julien Moura
Version: 1.6.0
Source code: https://gitlab.gpf-tech.ign.fr/geoplateforme/traitements-vecteurs/gpf_generate_archive
Last documentation build: 30 July 2024


Spécification initiale

Contexte

Ce script sera exécuté afin de copier sur le stockage final tous les fichiers livrés au sein des livraisons en entrée. Cette copie doit permettre de créer une nouvelle donnée stockée ARCHIVE diffusable ou d’en mettre à jour une déjà existante.

Description

Ce script doit vérifier qu’une pyramide rok4 livrée sur l’entrepôt correspond bien au format attendus et que les informations fournies par l’utilisateur correspondent.

Données en entrée

  • de 1 à n livraisons de type ARCHIVE

Données en sortie

  • une donnée stockée de type ARCHIVE sur un stockage S3

Paramètres

  • le descripteur indiqué plus bas se situe dans le S3 dans le bucket défini par output/stored_data/storage/type_infos/pot_name et le “chemin” du fichier sera stored_data/{output/stored_data/_id}/__descriptor.json. Aucun fichier des livraisons ne doit se nommer __descriptor.json (le malandrin).

Étapes et règles métier

  1. Contrôler les données :

    • Vérification des types des entrées sorties et storage (voir régle ci-dessus)

    • Toutes les livraisons en entrée doivent avoir le même srs

    • Si la donnée en sortie est MODIFYING, son srs doit aussi être le même

    • les noms des fichiers livrés (à plat sans arborescence) doivent être uniques pour ne pas avoir de conflit lors du stockage à plat

  2. Tâche métier :

    1. Si la donnée en sortie est MODIFYING existe, récupérer, charger son descripteur, sinon en créé un nouveau vide

    2. Pour chaque fichier dans chaque livraison :

      • copier le fichier à l’emplacement final sur le S3 (Bucket output/stored_data/storage/type_infos/pot_name et “chemin” du fichier sera stored_data/{output/stored_data/_id}/{file_name}. Dans le cas MODIFYING, le fichier est remplacé.

      • Générer le bloc dans le descripteur avec les informations suivantes (remplacer le précédent si le fichier à été remplacé) :

      [
          {
              "file_length": "int --> taille du fichier en octets",
              "file_type": "string --> mime-type du fichier",
              "file_name": "string --> nom du fichier",
              "format": "list[string] --> même chose que file_type, sauf si le fichier est une archive (zip, 7z, tar, tar.gz, si possible d'extraire ces 4 formats simplement, sans à avoir à tout décompresser) dans ce cas, c'est la liste des mime_type des fichiers contenus dans l'archive",
              "crs": "string --> inputs[n]/upload/srs",
              "url": "string --> emplacement du fichier sur le S3",
              "md5": "string --> clé md5 du fichier",
              "relation": "string --> `alternate` ou `section` (obligatoire) --> si le fichier est une archive partielle (issue d'un découpage du genre 7z.001) alors section, sinon alternate"
          }
      ]
      

Informations à retourner en sortie du script

  1. Dans output.stored_data :

    • type_infos :

      • files_number : nombre de fichiers total dans la donnée en sortie (à l’exclusion du __descriptor.json)

    • srs : la projection des livraisons en entrée

    • size : la taille complète des fichiers de la données stockée en sortie sur le S3 en fin de processus, en octets

    • ancestors : liste vide

  2. Dans pipeline_status : Une ligne indiquant le status du script :

    • SUCCESS : L’intégration n’a pas rencontré de problème, pour aucun des fichiers de la livraison.

    • FAILURE : Une erreur est intervenu lors du calcul de pyramide : les livraisons en entrée et la donnée en sortie si déjà existante n’ont pas toutes le même srs deux livraisons en entrée contiennent un fichier avec le même nom

    • TECHNICAL_ERROR : En cas d’erreur technique (erreur de lecture / écriture dans le S3)

Logs

  • Même régles que les autres scripts de vérification

  • Logs spécifiques à remonter aux USER :

    • Les grandes étapes du processus (pas de log fichier par fichier)

    • Les fichiers en erreur et la cause de l’erreur

    • Les erreurs plus globales s’il y en a

  • Logs spécifiques à remonter aux ADMIN :

    • Le traitement de chaque fichier et son résultat.

    • Les erreurs techniques rencontrées

Points d’attention

RAS

Miscellaneous