PyRoger - Documentation#

Description: Package Python générique des agents de publication notamment en charge de l’articulation avec le bus de la Géoplateforme de l’IGN (RabbitMQ).
Author and contributors: Oslandia
Version: 1.8.0
Source code: https://gitlab.gpf-tech.ign.fr/geoplateforme/agents-publication/pyroger/
Last documentation build: 27 January 2025


Spécification initiale#

Contexte#

Gérer le fonctionnement commun des agents de publication.

Description#

Les tâches des agents de publication sont de :

  • Gérer les publication / dépublication / synchronisation en provenance de l’entrepôt vers son service

  • Alimenter son service lors du démarrage de celui-ci

Règles de gestion#

Pour gérer la publication / dépublication / synchronisation :#

  • Lors du démarrage, on indique un topic du BUS sur lequel l’agent doit écouter (il s’appelle publication-# suivi d’un endpoint_name) les messages en provenance de l’entrepôt, uniquement lorsque le service est ready (démarrage et alimentation initiale en cours). Celui écoute les messages sur celui-ci en Pub/sub (tous les agents consomment le même message)

  • Les messages, peu importe le service, possèdent la structure suivante :

{
    "_id": "4c91dad8-bb16-489e-814e-5818773eafdd",
    "type": "",
    "configuration_type": "WFS",
    "layer_name": "nom de la couche",
    "type_infos": {},
    "metadata": [{"format": "", "url": "", "type": ""}],
    "attribution": {
        "title": "",
        "url": "",
        "logo": {"format": "", "url": "", "width": -1, "height": -1},
    },
    "storage_static" : {
        "_id" : "",
        "name" : "",
         "type" : "",
         "type_infos" : { "pot_name" : ""}
    }
}
  • L’agent effectue toutes les opérations spécifiques nécessaires à la publication et retourne :

    • OK si la publication à pu être effectuée

    • ERROR si la publication est en erreur (dans ce cas l’agent doit faire en sorte de laisser le service dans le même état qu’avant le début de L’opération)

    • WARN dans les cas particulier suivant :

      • Une publication de donnée à été demandé mais l’offre existait déjà sur le service (dans ce cas on traite la publication comme une synchronisation)

      • Une synchronisation de donnée à été demandé mais l’offre n’existait pas sur le service (dans ce cas on traite la synchronisation comme une publication)

      • Une dépublication de donnée à été demandé mais l’offre n’existait pas sur le service (dans ce cas on ne fait rien)

  • L’agent de publication doit conserver une trace de la publication via l’identifiant unique fourni par l’entrepôt. Lors d’une synchronisation ou d’une dépublication, c’est cet identifiant qui sera stable Une fois les opérations de publication effectuées, un message doit être déposé sur un topic du Bus topic est publication-endpoint-update (pour le coup c’est un topic unique pour tous les agents de publication). Ce message devra contenir les informations suivantes :

{
    "_id": "uuid  -->  celui de l'offre qui provenait de l'entrepôt",
    "endpointName": "string --> nom du endpoint (recup de la variable d'environnement)",
    "podId": "string  -->  identifiant du pod dans le K8S, issu d'une variable d'environnement",
    "type": "stringEnum: [PUBLICATION|UNPUBLICATION|SYNCHRONIZATION]",
    "status" : "enum(OK|ERROR|WARN)",
    "message" : "string  -->  message en français de l'erreur qui à bloqué le processus pour les cas ERROR et WARN"
}

Alimenter son service lors du démarrage de celui-ci#

  • Cette partie se positionne dans le entrypoint du pod.

  • L’agent va appeler l’API réalisée en IGNGPF-317 avec son identifiant de service, pour récupérer la liste des offres à ajouter au pod. La liste a la structure suivante :

[{
  "_id": "string",
  "type": "stringEnum[EndpointType]",
  "status": "stringEnum[OfferStatus]",
  "layer_name": "string"
}]
  • Pour chaque offre listée :

    • un appel à IGNGPF-318 va permettre de récupérer une structure JSON identique à celle récupérée sur le bus dans le cas d’une publication classique

    • ce JSON doit être traité comme s’il s’agissait d’une publication normale, mais sans les opérations de renvoi de message en fin de processus

Variables d’environnement fournies au démarrage du POD :#

  • URL de l’api Entrepôt :

    • GPF_WAREHOUSE_URL

  • Endpoint name :

    • GPF_ENDPOINT_NAME

  • PodId

  • Workdir

    • GPF_WORKDIR

  • Pguser pgpass > credential dans vault

    • GPF_DB_URL

    • GPF_DB_USER

    • GPF_DB_PASSWORD

  • Geoservice (Rok4/Geoserver) >

    • GEOSERVICE_URL

  • Paramètre spécifiques Geoserver

    • GEOSERVER_USER

    • GEOSERVER_PASS

  • Paramètres spécifiques Rok4

    • ROK4_URL

    • ROK4_TOKEN

    • ROK4_BUCKET

  • Topics MQ

    • PUBLICATION_TOPIC : l’agent écoute

    • PUBLICATION_RESULT_TOPIC : l’agent répond dessus

Points d’attention#

RAS

Miscellaneous