diff --git a/data-computer/v1/base-line.ini b/data-computer/v1/base-line.ini index 11ef65a..f2ed737 100644 --- a/data-computer/v1/base-line.ini +++ b/data-computer/v1/base-line.ini @@ -14,74 +14,41 @@ post.parameters.0.in = query post.parameters.0.name = indent post.parameters.0.schema.type = boolean +post.parameters.1.description = URL pour signaler que le traitement est terminé +post.parameters.1.in = header +post.parameters.1.name = X-Webhook-Success +post.parameters.1.schema.type = string +post.parameters.1.schema.format = uri +post.parameters.1.required = false +post.parameters.2.description = URL pour signaler que le traitement a échoué +post.parameters.2.in = header +post.parameters.2.name = X-Webhook-Failure +post.parameters.2.schema.type = string +post.parameters.2.schema.format = uri +post.parameters.2.required = false [use] plugin = basics plugin = analytics -# Step 0 (générique) : Lire le fichier standard tar.gz -[TARExtract] -compress = true -path = */*.json - -# Step 1 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton] -[singleton/identify] -[singleton/env] -path = generator -value = base-line -path = identifier -value = get('uri').replace('uid:/', '') +# Step 1 (générique): Charger le fichier corpus +[delegate] +file = charger.cfg # Step 2 (générique): Traiter de manière asynchnore les items reçus [fork] standalone = true +logger = logger.cfg -# Step 2.1 (générique): Lancer un calcul sur tous les items reçus -[fork/delegate] - -# Step 2.1.1 (spécifique): S'assurer d'avoir un tableau -[fork/delegate/exchange] +# Step 2.1 (spécifique): Lancer un calcul sur tous les items reçus +[fork/exchange] value = self().omit('uri') -# Step 2.2 (générique): Création d'un fichier résulat standard -[fork/TARDump] -compress = true -manifest = fix({version: '1'}) -manifest = fix({identifier: env('identifier')}) -manifest = fix({generator: env('generator')}) +# Step 2.2 (générique): Enregister le résulat et signaler que le traitment est fini +[fork/delegate] +file = recorder.cfg -# Step 2.3 (générique): Sauvegarder sur disque le résulat -[fork/FILESave] -location = /tmp/retrieve -identifier = env('identifier') -jsonl = false -compress = false - -# Step 2.4 (générique): Signaler le fin du traitement via un appel à un webhook (si il a été précisé) -[fork/swing] -test = env('headers.x-hook').startsWith('http') - -# Step 2.4.1 (générique): Séléctionner les informations à envoyer au webhook -[fork/swing/replace] -path = body -value = self().pick(['size', 'atime', 'mtime', 'ctime']).set('identifier', env('identifier')).set('generator', env('generator')).set('state', 'ready') - -# Step 2.4.2 (générique): Envoyer la requète HTTP -[fork/swing/URLFetch] -url = env('headers.x-hook') -path = body -headers = Content-Type:application/json - -# Step 2.4.3 (faculatif) : Ajouter une trace dans log -[fork/swing/debug] -text = webhook triggered - -# Step 2.5 (faculatif) : Ajouter une trace dans log -[fork/debug] -text = process completed - -# Step 3 : Renvoyer immédiatement seul élément indiquant comment récupérer le résulat quand il sera prêt +# Step 3 : Renvoyer immédiatement un seul élément indiquant comment récupérer le résulat quand il sera prêt [shift] [replace] path = id diff --git a/data-computer/v1/charger.cfg b/data-computer/v1/charger.cfg new file mode 100644 index 0000000..6deae0b --- /dev/null +++ b/data-computer/v1/charger.cfg @@ -0,0 +1,18 @@ +[use] +plugin = basics +plugin = analytics + +# Step 0 (générique) : Lire le fichier standard tar.gz +[TARExtract] +compress = true +path = */*.json + +# Step 1 (générique) : Créer un identifiant unique pour le corpus reçu +[singleton] +[singleton/identify] +[singleton/env] +path = generator +value = base-line +path = identifier +value = get('uri').replace('uid:/', '') + diff --git a/data-computer/v1/graph-segment.ini b/data-computer/v1/graph-segment.ini index b0b1aed..d9990a9 100644 --- a/data-computer/v1/graph-segment.ini +++ b/data-computer/v1/graph-segment.ini @@ -14,39 +14,33 @@ post.parameters.0.in = query post.parameters.0.name = indent post.parameters.0.schema.type = boolean +post.parameters.1.description = URL pour signaler que le traitement est terminé +post.parameters.1.in = header +post.parameters.1.name = X-Webhook-Success +post.parameters.1.schema.type = string +post.parameters.1.schema.format = uri +post.parameters.1.required = false +post.parameters.2.description = URL pour signaler que le traitement a échoué +post.parameters.2.in = header +post.parameters.2.name = X-Webhook-Failure +post.parameters.2.schema.type = string +post.parameters.2.schema.format = uri +post.parameters.2.required = false [use] plugin = basics plugin = analytics -# Step 0 (générique) : Lire le fichier standard tar.gz -[TARExtract] -compress = true -path = */*.json - -# Step 1 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton] -# Step 1.1 (générique) : Controle du premier objet en considérant que les suivants seront structrellement identiques -[singleton/validate] -path = id -rule = required|string - -path = value -rule = required|array - -# Step 1.2 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton/identify] -[singleton/env] -path = generator -value = graph-segment -path = identifier -value = get('uri').replace('uid:/', '') +# Step 1 (générique): Charger le fichier corpus +[delegate] +file = charger.cfg # Step 2 (générique): Traiter de manière asynchnore les items reçus [fork] standalone = true +logger = logger.cfg -# Step 2.1 (générique): Lancer un calcul sur tous les items reçus +# Step 2.1 (spécifique): Lancer un calcul sur tous les items reçus [fork/delegate] # Step 2.1.1 (spécifique): S'assurer d'avoir un tableau @@ -79,44 +73,13 @@ path = origin value = get('value').uniq() -# Step 2.2 (générique): Création d'un fichier résulat standard -[fork/TARDump] -compress = true -manifest = fix({version: '1'}) -manifest = fix({identifier: env('identifier')}) -manifest = fix({generator: env('generator')}) +[fork/transit] -# Step 2.3 (générique): Sauvegarder sur disque le résulat -[fork/FILESave] -location = /tmp/retrieve -identifier = env('identifier') -jsonl = false -compress = false +# Step 2.2 (générique): Enregister le résulat et signaler que le traitment est fini +[fork/delegate] +file = recorder.cfg -# Step 2.4 (générique): Signaler le fin du traitement via un appel à un webhook (si il a été précisé) -[fork/swing] -test = env('headers.x-hook').startsWith('http') - -# Step 2.4.1 (générique): Séléctionner les informations à envoyer au webhook -[fork/swing/replace] -path = body -value = self().pick(['size', 'atime', 'mtime', 'ctime']).set('identifier', env('identifier')).set('generator', env('generator')).set('state', 'ready') - -# Step 2.4.2 (générique): Envoyer la requète HTTP -[fork/swing/URLFetch] -url = env('headers.x-hook') -path = body -headers = Content-Type:application/json - -# Step 2.4.3 (faculatif) : Ajouter une trace dans log -[fork/swing/debug] -text = webhook triggered - -# Step 2.5 (faculatif) : Ajouter une trace dans log -[fork/debug] -text = process completed - -# Step 3 : Renvoyer immédiatement seul élément indiquant comment récupérer le résulat quand il sera prêt +# Step 3 : Renvoyer immédiatement un seul élément indiquant comment récupérer le résulat quand il sera prêt [shift] [replace] path = id diff --git a/data-computer/v1/lda.ini b/data-computer/v1/lda.ini index 78f9ac0..a767074 100644 --- a/data-computer/v1/lda.ini +++ b/data-computer/v1/lda.ini @@ -14,73 +14,42 @@ post.parameters.0.in = query post.parameters.0.name = indent post.parameters.0.schema.type = boolean - +post.parameters.1.description = URL pour signaler que le traitement est terminé +post.parameters.1.in = header +post.parameters.1.name = X-Webhook-Success +post.parameters.1.schema.type = string +post.parameters.1.schema.format = uri +post.parameters.1.required = false +post.parameters.2.description = URL pour signaler que le traitement a échoué +post.parameters.2.in = header +post.parameters.2.name = X-Webhook-Failure +post.parameters.2.schema.type = string +post.parameters.2.schema.format = uri +post.parameters.2.required = false [use] plugin = basics plugin = analytics -plugin = spawn -# Step 0 (générique) : Lire le fichier standard tar.gz -[TARExtract] -compress = true - -# Step 1 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton] -[singleton/identify] -[singleton/env] -path = generator -value = lda -path = identifier -value = get('uri').replace('uid:/', '') +# Step 1 (générique): Charger le fichier corpus +[delegate] +file = charger.cfg # Step 2 (générique): Traiter de manière asynchnore les items reçus [fork] standalone = true +logger = logger.cfg -# Step 2.1 (générique): Lancer un calcul sur tous les items reçus +# Step 2.1 (spécifique): Lancer un calcul sur tous les items reçus [fork/exec] # command should be executable ! command = ./v1/lda.py -# Step 2.2 (générique): Création d'un fichier résulat standard -[fork/TARDump] -compress = true -manifest = fix({version: '1'}) -manifest = fix({identifier: env('identifier')}) -manifest = fix({generator: env('generator')}) +# Step 2.2 (générique): Enregister le résulat et signaler que le traitment est fini +[fork/delegate] +file = recorder.cfg -# Step 2.3 (générique): Sauvegarder sur disque le résulat -[fork/FILESave] -location = /tmp/retrieve -identifier = env('identifier') -jsonl = false -compress = false - -# Step 2.4 (générique): Signaler le fin du traitement via un appel à un webhook (si il a été précisé) -[fork/swing] -test = env('headers.x-hook').startsWith('http') - -# Step 2.4.1 (générique): Séléctionner les informations à envoyer au webhook -[fork/swing/replace] -path = body -value = self().pick(['size', 'atime', 'mtime', 'ctime']).set('identifier', env('identifier')).set('generator', env('generator')).set('state', 'ready') - -# Step 2.4.2 (générique): Envoyer la requète HTTP -[fork/swing/URLFetch] -url = env('headers.x-hook') -path = body -headers = Content-Type:application/json - -# Step 2.4.3 (faculatif) : Ajouter une trace dans log -[fork/swing/debug] -text = webhook triggered - -# Step 2.5 (faculatif) : Ajouter une trace dans log -[fork/debug] -text = process completed - -# Step 3 : Renvoyer immédiatement seul élément indiquant comment récupérer le résulat quand il sera prêt +# Step 3 : Renvoyer immédiatement un seul élément indiquant comment récupérer le résulat quand il sera prêt [shift] [replace] path = id diff --git a/data-computer/v1/logger.cfg b/data-computer/v1/logger.cfg new file mode 100644 index 0000000..49db973 --- /dev/null +++ b/data-computer/v1/logger.cfg @@ -0,0 +1,44 @@ +; [use] +plugin = basics +plugin = analytics + +# On ne garde que la première erreur déclénchée +[shift] + +[debug] +text = Error trapped + +[assign] +path = body.error.type +value = get('type') + +path = body.error.scope +value = get('scope') + +path = body.error.message +value = get('message') + +path = env +value = env() + +[swing] +test = env('headers.x-webhook-failure').startsWith('http') + +[swing/URLFetch] +url = env('headers.x-webhook-failure').trim() +path = body +headers = Content-Type:application/json +target = result + +# On enregistre uniqument quelques informations (à supprimer pour avoir la trace complète) +[exchange] +value = get('body') + +[FILESave] +location = /tmp/retrieve +identifier = env('identifier') +jsonl = true +compress = false + +[debug] +text = Error was saved diff --git a/data-computer/v1/recorder.cfg b/data-computer/v1/recorder.cfg new file mode 100644 index 0000000..f768491 --- /dev/null +++ b/data-computer/v1/recorder.cfg @@ -0,0 +1,43 @@ +[use] +plugin = basics +plugin = analytics + +# Step 2.2 (générique): Création d'un fichier résulat standard +[TARDump] +compress = true +manifest = fix({version: '1'}) +manifest = fix({identifier: env('identifier')}) +manifest = fix({generator: env('generator')}) + +# Step 2.3 (générique): Sauvegarder sur disque le résulat +[FILESave] +location = /tmp/retrieve +identifier = env('identifier') +jsonl = false +compress = false + +# Step 2.4 (générique): Signaler le fin du traitement via un appel à un webhook (si il a été précisé) +[swing] +test = env('headers.x-webhook-success').startsWith('http') + +# Step 2.4.1 (générique): Séléctionner les informations à envoyer au webhook +[swing/replace] +path = body +value = self().pick(['size', 'atime', 'mtime', 'ctime']).set('identifier', env('identifier')).set('generator', env('generator')).set('state', 'ready') + +# Step 2.4.2 (générique): Envoyer la requète HTTP +[swing/URLFetch] +url = env('headers.x-webhook-success').trim() +path = body +headers = Content-Type:application/json +retries = 1 + +# Step 2.4.3 (faculatif) : Ajouter une trace dans log +[swing/debug] +text = webhook triggered + +# Step 2.5 (faculatif) : Ajouter une trace dans log +[debug] +text = process completed + + diff --git a/data-computer/v1/tree-segment.ini b/data-computer/v1/tree-segment.ini index f5924f5..e2ac6f6 100644 --- a/data-computer/v1/tree-segment.ini +++ b/data-computer/v1/tree-segment.ini @@ -14,39 +14,33 @@ post.parameters.0.in = query post.parameters.0.name = indent post.parameters.0.schema.type = boolean +post.parameters.1.description = URL pour signaler que le traitement est terminé +post.parameters.1.in = header +post.parameters.1.name = X-Webhook-Success +post.parameters.1.schema.type = string +post.parameters.1.schema.format = uri +post.parameters.1.required = false +post.parameters.2.description = URL pour signaler que le traitement a échoué +post.parameters.2.in = header +post.parameters.2.name = X-Webhook-Failure +post.parameters.2.schema.type = string +post.parameters.2.schema.format = uri +post.parameters.2.required = false [use] plugin = basics plugin = analytics -# Step 0 (générique) : Lire le fichier standard tar.gz -[TARExtract] -compress = true -path = */*.json - -# Step 1 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton] -# Step 1.1 (générique) : Controle du premier objet en considérant que les suivants seront structrellement identiques -[singleton/validate] -path = id -rule = required|string - -path = value -rule = required|array - -# Step 1.2 (générique) : Créer un identifiant unique pour le corpus reçu -[singleton/identify] -[singleton/env] -path = generator -value = tree-segment -path = identifier -value = get('uri').replace('uid:/', '') +# Step 1 (générique): Charger le fichier corpus +[delegate] +file = charger.cfg # Step 2 (générique): Traiter de manière asynchnore les items reçus [fork] standalone = true +logger = logger.cfg -# Step 2.1 (générique): Lancer un calcul sur tous les items reçus +# Step 2.1 (spécifique): Lancer un calcul sur tous les items reçus [fork/delegate] # Step 2.1.1 (spécifique): S'assurer d'avoir des tableaux de tableaux @@ -76,44 +70,13 @@ path = origin value = get('value').uniq() -# Step 2.2 (générique): Création d'un fichier résulat standard -[fork/TARDump] -compress = true -manifest = fix({version: '1'}) -manifest = fix({identifier: env('identifier')}) -manifest = fix({generator: env('generator')}) +[fork/transit] -# Step 2.3 (générique): Sauvegarder sur disque le résulat -[fork/FILESave] -location = /tmp/retrieve -identifier = env('identifier') -jsonl = false -compress = false +# Step 2.2 (générique): Enregister le résulat et signaler que le traitment est fini +[fork/delegate] +file = recorder.cfg -# Step 2.4 (générique): Signaler le fin du traitement via un appel à un webhook (si il a été précisé) -[fork/swing] -test = env('headers.x-hook').startsWith('http') - -# Step 2.4.1 (générique): Séléctionner les informations à envoyer au webhook -[fork/swing/replace] -path = body -value = self().pick(['size', 'atime', 'mtime', 'ctime']).set('identifier', env('identifier')).set('generator', env('generator')).set('state', 'ready') - -# Step 2.4.2 (générique): Envoyer la requète HTTP -[fork/swing/URLFetch] -url = env('headers.x-hook') -path = body -headers = Content-Type:application/json - -# Step 2.4.3 (faculatif) : Ajouter une trace dans log -[fork/swing/debug] -text = webhook triggered - -# Step 2.5 (faculatif) : Ajouter une trace dans log -[fork/debug] -text = process completed - -# Step 3 : Renvoyer immédiatement seul élément indiquant comment récupérer le résulat quand il sera prêt +# Step 3 : Renvoyer immédiatement un seul élément indiquant comment récupérer le résulat quand il sera prêt [shift] [replace] path = id