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.
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.
Dans l'ensemble,
C'est devenu un flux.
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.
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é.
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.
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
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.