Développement de nouveaux moteurs

Bonjour,

Je souhaiterais développer de nouveaux moteurs et les partager avec la communauté.
Mais au jour d’aujourd’hui, il n’y a aucune documentation publique concernant :

  • le développement d’un nouveau moteur en réutilisant un maximum le code existant
  • l’intégration d’un nouveau moteur à Canopsis

Sur ce dernier point, j’ai une idée mais il me manque probablement des informations.
Par exemple, si l’on souhaite placer un nouveau moteur engine-foo entre les moteurs engine-service et engine-action, il faudra :

  • créer une nouvelle file d’attente Engine_foo dans RabbitMQ
  • lancer le moteur engine-service de cette manière : /opt/canopsis/bin/engine-service -publishQueue « Engine_foo »
  • lancer le moteur engine-foo de cette manière : /opt/canopsis/bin/engine-foo -publishQueue « Engine_action »
  • lancer le moteur engine-action de cette manière : /opt/canopsis/bin/engine-action

Pouvez-vous me dire si cela pourrait marcher ou si j’ai oublié une étape SVP ?

Merci par avance,
Fred

Bonjour,

Très bonne initiative !

Vous avez raison sur la documentation publique qui permettrait de donner les clés de développement d’un moteur, elle n’existe pas.
Nous avons entamé ce travail coté UI avec la rédaction d’une documentation permettant de développer un widget pour la WebUI.
Elle est en cours de validation et sera prochainement mise en ligne.

Concernant l’intégration d’un nouveau moteur dans l’enchainement existant, il faut en premier lieu réfléchir au métier de ce moteur pour déterminer le bon emplacement.

Par exemple, notre moteur de corrélation est positionné en aval du moteur d’enrichissement pourqu’il puisse bénéficier des informations concernant les entités (le référentiel).
Si vous me donnez quelques informations sur l’objectif de ce nouveau moteur, je pourrai alors vous aiguiller sur l’emplacement.
Lorsque vous êtes au point la dessus, il vous faut adapter les publishQueue comme vous l’avez dit dans le post d’origine.

Vous devez ensuite déterminer si ce nouveau moteur doit communiquer avec d’autres moteurs pour effectuer des passages d’ordres.
Le moteur action envoie par exemple des ordres au moteur webhook pour qu’il effectue des notifications ou des créations de tickets.
La communication inter moteurs s’effectue en RPC, vous avez du repérer des files d’attentes rabbitMQ avec un suffixe ̀_rpc`.

A vous ensuite de voir si voud devez utiliser les briques tierces comme la base mongodb, le cache redis, etc.

Mikael

Merci pour votre réponse.

Je pensais à un moteur assez simple qui récupérerait les alarmes de sa file d’attente et les enverrait vers un Big Data.

Pour la version communautaire, je le mettrais entre le moteur engine-axe et engine-action.
Pour la version pro, il se situerait entre le moteur engine-dynamic-infos et engine-action.

Je ne pense pas que ce moteur ait besoin de communiquer avec les autres moteurs, mongodb ou redis. Pour une alarme donnée, il aura juste à l’envoyer vers le big data et le publier tel quel vers la file du moteur engine-action.

Est-ce correct ?

Merci par avance,
Fred

Bonjour @Fred

oui c’est correct vous pouvez l’envisager de cette manière.
A vous de voir ensuite ce que vous souhaitez transmettre :

  • Création d’une alarme
  • Mise à jour de celle-ci
  • Evénements en lien avec cette alarme

D’autres possibilités avec le contexte que vous m’avez donné.

Dans la version pro, vous avez la possibilité de déclencher des webhooks par rapport à un trigger et des patterns (sur alarme ou entité).
Les triggers sont du genre : creation, augmentation/diminution sévérité, ack, snooze, ticket, etc

Si votre bigdata possède un « écouteur » http, alors vous ne seriez pas obligés d’écrire/maintenir du code.

En version community vous pourriez recopier une file (celle en sortie du moteur axe) sur une autre (une sorte de duplication des données d’une file à une autre) et demander à un outil comme logstash de lire cette file pour ensuite envoyer le contenu dans votre big data.

Bonne journée
Mika

Bonjour @Fred

Seriez vous intéressé pour tester un guide pas-à-pas qui permet de développer un moteur (en lanagage GO) avec des fonctions basiques ?
Il est pour le moment rédigé en anglais.

Mika

Bonjour,

Cela aurait été un plaisir pour moi de tester votre guide de développement d’un moteur en GO mais je n’ai malheureusement pas de temps libre en ce moment pour le faire.

Est-il possible tout de même d’avoir le guide pour que je puisse y jeter un coup d’oeil et pourquoi pas le tester dans le cas où j’aurai à nouveau du temps libre ?

Merci beaucoup pour votre aide.
Fred

Bonjour @Fred

en MP pour la procédure.
A bientot