Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

hornet-js-batch

Package Overview
Dependencies
Maintainers
3
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hornet-js-batch

Ensemble des composants de gestion de base hornet-js

  • 5.5.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
3
Created
Source

hornet-js-batch

Prérequis

  • NodeJS 10.X

Utilisation dans un projet

Ajouter au package.json

  "dependencies": {
    "hornet-js-batch": "5.5.X"
  }

Puis lancer la commande :

npm install

Objectif

Pouvoir lancer des BATCHS sur le backend via des urls.

Principe

Les batchs hornet s'articulent principalement autour des RouteAction d'hornet. C'est le même principe que pour les routes de service d'hornet: on définit une route lazy dans le fichier des routes puis on définit une action dans le repertoire action de l'application.

Pour faire un batch, il suffit que votre action hérite de la classe RouteActionBatch. La méthode execute de l'action renvoie une promesse de type ResultBach.

Ce type d'action propose une méthode pour créer une unité de traitement getNewBatchUnit() qui prend en paramètre le modèle de données (paramètre optionnel).

Cette méthode renvoie une nouvelle instance de BatchUnit qui propose un certain nombre de méthodes. (reader, filter, transform, mapper, writer, call, foreach, run)

On peut regrouper en 3 groupes ces méthodes :

  • celles qui renvoient leur résultat au traitement suivant : reader, filter, mapper, transform

  • celles qui renvoient leurs propres arguments au traitement suivant : writer, call, foreach

  • et run qui est permet de lancer l'unité de traitement.

reader : ajoute un ou plusieurs readers dans le processus du batchunit. Les readers sont des classes de type BatchReader qui vont récupérer des données.

filter : ajoute un filter dans le processus du batchunit. Les filters sont des classes de type BatchFilter qui vont filtrer les données.

mapper : ajoute un mapper dans le processus du batchunit. Les mappers sont des classes de type BatchMapper qui vont binder les données.

transform : ajoute un transform dans le processus du batchunit. Les transformers sont des classes de type BatchTransform qui vont manipuler les données.

writer : ajoute un ou plusieurs writers dans le processus du batchunit. Les writers sont des classes de type BatchWriter qui vont renvoyer les données.

call : ajoute un appel de service dans le processus du batchunit. Les call sont des classes de type BatchService qui vont executer l'appel de service.

foreach : ajoute un appel de service dans le processus du batchunit. Les foreach sont des classes de type BatchService qui vont executer l'appel de service en bouclant sur la liste des paramètres qu'ils ont en entrée.

Exemple d'utilisation

import { RouteActionBatch } from "hornet-js-core/src/routes/abstract-routes";
import { CSVReader } from "hornet-js-core/src/batch/reader/csv-reader";
import { ServiceReader } from "hornet-js-core/src/batch/reader/service-reader";
import { ResultBatch } from "hornet-js-core/src/result/result";
import { AdministrationSecteurService } from "src/services/page/adm/adm-secteur-service-page";
import { SecteurMetier } from "src/models/adm/sec-mod";

export class CreerSecteurBatch extends RouteActionBatch<any, AdministrationSecteurService> {
    execute(): Promise<ResultBatch>  {

        let unit = this.getNewBatchUnit()
                .reader(new ServiceReader(this.getService().lister, this))
                .filter((item) => {
                   return item.desc=="secteurBatch";
                 })
                .transform((result : Array<any>)=>{
                    result.forEach((value, index)=>{value.desc +="test";});
                    return result;
                })
                .foreach(this.getService().creer, this)
                .run();

        return unit.then((result)=>{
            return new ResultBatch({data : result});
        })
    }
}

Configuration printer

Définit un interval d'affichage dans les logs du batch de l'état d'avancement.

Valeur par défaut : 500

  "batch": {
    "printTimer": 15000
  }

Lancement du batch

Vu qu'il s'agit d'une application web, mais avec des traitements non bloquant, pour le lancer il suffit d'appeler une url, voici un exemple :

curl  http://localhost:8889/secteurs/batch/1

voici les codes retours:

  • SUCCESS => code_retour : 0
  • RUNNING => code_retour : -9999
  • MINOR_ERROR => code_retour : 2
  • MAJOR_ERROR => code_retour : 1

Pour compléter, le Batch est implémenté pour aussi être intégrer à l'outil interne, voici le fonctionnement :

sur le premier appel (lancement du traitement) renvoie :

{
    "hasTechnicalError": false,
    "hasBusinessError": false,
    "status": 200,
    "url": "???",
    "data": {
        "status": "OK",
        "code_retour": "0"
    },
    "errors": []
}

Tant que le traitement est en cours :

{
    "hasTechnicalError": false,
    "hasBusinessError": false,
    "status": 200,
    "url": "???",
    "data": {
        "status": "OK",
        "code_retour": "-9999"
    },
    "errors": []
}

Traitement terminé et sans erreur :

{
    "hasTechnicalError": false,
    "hasBusinessError": false,
    "status": 200,
    "url": "???",
    "data": {
        "status": "OK",
        "code_retour": "0",
        "history": [
            {
                "id": "_5f79b1bb-1dba-4a30-b205-927a02ca2290",
                "status": "SUCCEEDED",
                "startDate": 1611578742869,
                "endDate": 1611578746095,
                "createDate": 1611578742868,
                "errorBatch": ""
            }
        ]
    },
    "errors": []
}

Attention si le traitement est terminé, le endpoint étant le même ca redéclenche le batch qui ne devrait rien faire car le traitement vient de passer

Un script qui simule le fonctionnement automator est présent ici sous applitutoriel-js-batch/scripts/run-batch.sh

Historique du batch sans lancement

Quand le traitement est terminé, il est possible d'obtenir l'historique des Jobs sans redéclancher le traitement (sinon c'est le résultat en cours qui sera renvoyé) et pour cela il suffit d'appeler une url avec en unique ou dernier paramêtre batchHistory à vide, voici un exemple :

curl  http://localhost:8889/secteurs/batch/1?batchHistory

Traitement terminé :

{
    "hasTechnicalError": false,
    "hasBusinessError": false,
    "status": 200,
    "url": "???",
    "data": {
        "status": "OK",
        "code_retour": "0",
        "history": [
            {
                "id": "_5f79b1bb-1dba-4a30-b205-927a02ca2290",
                "status": "SUCCEEDED",
                "startDate": 1611578742869,
                "endDate": 1611578746095,
                "createDate": 1611578742868,
                "errorBatch": ""
            }
        ]
    },
    "errors": []
}

Licence

hornet-js-batch est sous licence cecill 2.1.

Site web : http://www.cecill.info

FAQs

Package last updated on 25 Mar 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc