Skip to content

Mieux gérer lorsque l'extraction ne renvoie aucune donnée #368

@benoitregamey

Description

@benoitregamey

Contexte

  • Souvent, une demande client lance une extraction qui ne renvoie aucune donnée car le périmètre demandé ne couvre par le produit demandé. Ceci est dû au fait que le périmètre du produit saisi dans viageo ou plans-réseaux est souvent plus grossier que le vrai périmètre des données.
  • Actuellement, lorsque une extraction ne renvoie pas de fichier, le traitement se stoppe et est en erreur (export error car pas de données à retourner)

Objectifs

Mieux gérer le cas où une extraction ne génère pas de résultats par absence de données, si possible de manière 100% automatique pour les plugin Extraction FME Form (Version 2), Extraction FME Flow (Version 2) et Extraction Python.

Implémentation

Extraction FME Form (Version 2)

  • Rajouter une option dépliable (cf. maquette) avec 1 champ obligatoire de type chaîne : "Remarque fixe en cas d'annulation"

  • Si l'option est activée :

    • Forcer l'écriture du log de l'extraction FME dans le flux stderr ou stdout (dépend de la version de FME) avec l'argument en ligne de commande LOG_STANDARDOUT yes. E.g. :

      path/to/fme.exe path/to/extractionScript.fmw --parametersFile path/to/parameters.json LOG_STANDARDOUT yes
    • Si l'extraction est en erreur (code de sortie ≠ 0), faire une recherche dans les flux stderr et stdout pour trouver le message d'erreur fixe noDataForExtract. Recherche regex de type .*{message}.*.

    • Si la recherche réussi, la tâche ne reste pas en erreur malgré de code de sortie, la requête est automatiquement annulée et la remarque fixe (champ "Remarque fixe en cas d'annulation") est adressée au client. Si la recherche échoue ou que l'option n'est pas activée, la tâche et donc la requête restent en erreur.

    • Dans le cas d'une detection d'absence de données réussie, toutes les autres tâches qui suivent l'extraction ne sont pas exécutées.

    • Exemple de flux stdout avec le message d'erreur "noDataForExtract" : stdout.log

  • Maquette
    https://www.figma.com/proto/eg3st3N9DwGhfdtGXwxvKi/Untitled?node-id=6-18&t=rSmQ3IJf3CgKetgo-1

  • Aide HTML
    Rajouter la section suivante tout à la fin de l'aide du plugin :

    Annuler le traitement en l'absence de données

    L'option "Annuler le traitement en l'absence de données" permet de terminer gracieusement une requête lorsque l'extraction ne renvoie aucune données.

    Si l'option est activée et que l'extraction échoue (code de sortie ≠ 0), Extract cherche le message d'erreur fixe noDataForExtract dans le log de l'extraction. Si la recherche réussi, l'extraction ne reste pas en erreur, la requête est automatiquement annulée et le client est notifié avec la remarque saisie dans le champ "Remarque fixe en cas d'annulation". Si la recherche échoue ou que l'option n'est pas activée, l'extraction reste en erreur et une intervention manuelle est nécessaire.

    Un tel comportement peut être déclenché par le transformer "Terminator" dans FME en saisissant le message d'erreur "noDataForExtract".

    ATTENTION : Si l'option est activée et qu'une absence de données est confirmée, les éventuelles tâches qui suivent l'extraction ne sont pas exécutées.

Extraction FME Flow (Version 2)

  • Rajouter une option dépliable (cf. maquette) avec 1 champ obligatoire de type chaîne : "Remarque fixe en cas d'annulation"

  • Si l'option est activée :

    • Si le status de la requête POST sur le server FME Flow n'est pas dans les 200 (échec, normalement 422), faire une recherche dans la réponse JSON de la requête dans l'objet .serviceResponse.statusInfo.message pour trouver le message d'erreur fixe noDataForExtract. Recherche regex de type .*{message}.*.

    • Si la recherche réussi, la tâche ne reste pas en erreur malgré de code de status, la requête est automatiquement annulée et la remarque fixe (champ "Remarque fixe en cas d'annulation") est adressée au client. Si la recherche échoue ou que l'option n'est pas activée, la tâche et donc la requête restent en erreur.

    • Dans le cas d'une detection d'absence de données réussie, toutes les autres tâches qui suivent l'extraction ne sont pas exécutées.

    • Exemple de réponse JSON (status code = 422) avec le message "noDataForExtract" :

      {
      	"serviceResponse": {
      		"jobID": 6,
      		"statusInfo": {
      			"mode": "sync",
      			"message": "FME Flow transformation failed: Terminator: Termination Message: 'noDataForExtract'",
      			"status": "failure"
      		},
      		"fmeTransformationResult": {
      			"fmeEngineResponse": {
      				"logFileName": "job_6.log"
      			},
      			"fmeServerResponse": {
      				"request": "...",
      				"jobStatus": "FME_FAILURE",
      				"timeRequested": "Mon-23-Feb-2026 02: 53: 31 PM",
      				"requestKeyword": "FILE_DOWNLOAD_SERVICE",
      				"description": "",
      				"timeStarted": "2026-02-23 02: 53: 31",
      				"requesterHost": "10.0.0.132",
      				"priority": "-1",
      				"result": "798006:Terminator: Termination Message: 'noDataForExtract'|LogFileName=job_6.log",
      				"requesterResultPort": "40209",
      				"resultSuccess": "true",
      				"serviceSuccess": "false",
      				"id": "6",
      				"timeFinished": "2026-02-23 02: 53: 31",
      				"serviceMsg": ""
      			}
      		}
      	}
      }
  • Maquette
    https://www.figma.com/proto/eg3st3N9DwGhfdtGXwxvKi/Extract-v2.4.0?node-id=25-127&t=L0IHhohmg5hUeajV-1

  • Aide HTML
    Rajouter la section suivante tout à la fin de l'aide du plugin :

    Annuler le traitement en l'absence de données

    L'option "Annuler le traitement en l'absence de données" permet de terminer gracieusement une requête lorsque l'extraction ne renvoie aucune données.

    Si l'option est activée et que l'extraction échoue (code de status HTTP ≠ 200), Extract cherche le message d'erreur fixe noDataForExtract dans la réponse de la requête HTTP. Si la recherche réussi, l'extraction ne reste pas en erreur, la requête est automatiquement annulée et le client est notifié avec la remarque saisie dans le champ "Remarque fixe en cas d'annulation". Si la recherche échoue ou que l'option n'est pas activée, l'extraction reste en erreur et une intervention manuelle est nécessaire.

    Un tel comportement peut être déclenché par le transformer "Terminator" dans FME en saisissant le message d'erreur "noDataForExtract".

    ATTENTION : Si l'option est activée et qu'une absence de données est confirmée, les éventuelles tâches qui suivent l'extraction ne sont pas exécutées.

Extraction Python

  • Rajouter une option dépliable (cf. maquette) avec 1 champ obligatoire de type chaîne : "Remarque fixe en cas d'annulation"

  • Si l'option est activée :

    • Si l'extraction est en erreur (code de sortie ≠ 0), faire une recherche dans les flux stderr et stdout pour trouver le message d'erreur fixe noDataForExtract. Recherche regex de type .*{message}.*.

    • Si la recherche réussi, la tâche ne reste pas en erreur malgré de code de sortie, la requête est automatiquement annulée et la remarque fixe (champ "Remarque fixe en cas d'annulation") est adressée au client. Si la recherche échoue ou que l'option est désactivée, la tâche et donc la requête restent en erreur.

    • Dans le cas d'une detection d'absence de données réussie, toutes les autres tâches qui suivent l'extraction ne sont pas exécutées.

  • Maquette
    https://www.figma.com/proto/eg3st3N9DwGhfdtGXwxvKi/Extract-v2.4.0?node-id=30-195&t=L0IHhohmg5hUeajV-1

  • Aide HTML
    Rajouter la section suivante tout à la fin de l'aide du plugin :

    Annuler le traitement en l'absence de données

    L'option "Annuler le traitement en l'absence de données" permet de terminer gracieusement une requête lorsque l'extraction ne renvoie aucune données.

    Si l'option est activée et que l'extraction échoue (code de sortie ≠ 0), Extract cherche le message d'erreur fixe noDataForExtract dans les flux stderr et stdout. Si la recherche réussi, l'extraction ne reste pas en erreur, la requête est automatiquement annulée et le client est notifié avec la remarque saisie dans le champ "Remarque fixe en cas d'annulation". Si la recherche échoue ou que l'option n'est pas activée, l'extraction reste en erreur et une intervention manuelle est nécessaire.

    Un tel comportement peut être déclenché en levant une exception dans Python avec le même message d'erreur "noDataForExtract".

    ATTENTION : Si l'option est activée et qu'une absence de données est confirmée, les éventuelles tâches qui suivent l'extraction ne sont pas exécutées.

Critères d'acceptation

Identifiant Description
368-1 L'option est intégrée dans les 3 plugins d'extraction telle que décrite dans les maquettes
368-2 Pour les 3 plugins, lorsque l'option est activée, que l'extraction est en erreur et que la recherche du message d'erreur noDataForExtract réussi, la requête est annulée et le client est notifié avec la remarque fixe
368-3 Pour les 3 plugins, lorsque l'option est activée, que l'extraction est en erreur et que la recherche du message d'erreur noDataForExtract échoue, la tâche reste en erreur
368-4 Pour les 3 plugins, lorsque l'option est activée et que l'extraction réussi, la requête continue normalement, même si le message d'erreur se trouve dans un log, en stderr ou stdout
368-5 Pour les 3 plugins, lorsque l'option n'est pas activée, l'extraction continue normalement. Elle échoue ou réussi peut importe le contenu dans les logs, en stderr ou stdout
368-6 Pour les 3 plugins, l'aide HTML est implémentée telle que décrite ci-dessus

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions