Écrivez votre plugin blackbird # 001

Cette fois, comme première étape dans l'écriture du plugin blackbird, je parlerai du mécanisme de transmission de données blackbird! En même temps, je voudrais parler du séquentiel de démarrage de Blackbird lui-même.

Voyons maintenant un aperçu approximatif.

méthode du plugin

blackbird adopte le format du plugin à la fois pour la partie acquisition et la partie transmission des données (bien que cela ne puisse pas être appelé strictement données car il s'agit d'une métrique de chaque middleware). Le Plugin à acquérir est établi en tant que Plugin en implémentant une classe qui hérite d'une classe de base spécifique. Donc, fondamentalement, vous pouvez l'implémenter en écrivant un seul fichier Python au niveau du snipet.

Lancer séquentiel

Dans l'ensemble,

  1. Commencez à partir de la ligne de commande blackbird (/ usr / bin / blackbird lorsqu'il est installé avec rpm)
  2. blackbird.sr71.Blackbird Génération d'instance
  3. Appelez la fonction Main (blackbird.sr71.main)
  4. Lisez le fichier de paramètres
  5. Créez des threads individuels pour capturer et envoyer des plugins
  6. Coupez chaque fil
  7. Chaque thread est stocké dans la file d'attente pour la métrique et lu à partir de la file d'attente

C'est devenu un flux.

2. Créez une instance blackbird

L'instance blackbird vérifie la configuration lors de sa création (lors de l'appel de la méthode __init__). À ce moment-là, il est appelé fichier de configuration racine, ou il lit le fichier spécifié par l'option --config comme blackbird --config = CONFIG_FILE. Ensuite, vérifiez le chemin spécifié par la directive ʻinclude_dir` et lisez chaque fichier inclus. En même temps, l'analyse et la validation de la configuration sont également effectuées, et si une erreur de validation se produit à ce stade, le démarrage échouera.

notes:

L'erreur de validation signifie ici qu'une directive qui attend un type int contient un type str (en d'autres termes, la méthode ʻint () `lève une ValueError). Les directives requises ne sont pas spécifiées, etc.

5. Générer des threads pour divers plugins

Chaque Thread a un nom (le nom lui-même n'a pas de signification, mais il augmente la transparence lors du débogage, et il peut être démarré avec un nom pour charger plusieurs plugins avec des paramètres différents). Il peut être joint. Pour le nom du thread, utilisez le nom de section (décrit plus loin) dans le fichier config.

Quel est le nom de la section ici?

[SECTION_NAME]
directive_001 = XXXXX
directive_002 = ABC012

Signifie _SECTION \ NAME ci-dessus. Autrement dit, dans ce cas, un thread nommé SECTION \ _NAME est généré.

6. Coupez chaque fil

L'instance blackbird.sr71.Blackbird devient le processus principal, et ce processus appelle la méthode run de chaque Thread, et la méthode run appelle la méthode qui collecte les données de chaque plugin.

7. Chaque thread est stocké dans la file d'attente pour la métrique et lu à partir de la file d'attente

Chaque thread jette un élément dans la file d'attente pour la métrique (pour les données), et un plugin pour un plugin qui envoie quelque part récupère l'élément de la file d'attente et envoie les données.

Si vous affichez le contenu jusqu'à présent dans la figure, cela ressemble à ceci

------------------------------------------
| blackbird Main process                 |
------------------------------------------
  |              |              |
  -- Tharead001  -- Thread002    -- Thread003 ...

  ---------
  |-------|
  |-------|
  | Queue |
  |-------|
  |-------|
  ---------

#La file d'attente est créée dans le processus principal

Quelle ??

Donc, ce que je veux dire après tout, c'est qu'il est vraiment facile d'écrire un plugin, d'écrire la partie pour obtenir les données et les métriques, et d'appeler la méthode de mise en file d'attente de la classe de base, et c'est fondamentalement la fin. J'expliquerai en détail comment écrire un plugin la prochaine fois.

Recommended Posts

Écrivez votre plugin blackbird # 002
Écrivez votre plugin blackbird # 001
Écrivez votre plugin blackbird # 003
Ecrire le plugin vim en Python
Ecrire un plugin Vim simple en Python 3