Créer un module (tutoriel)

Il s'agit d'un didacticiel étape par étape qui montre comment créer un module frontal Zabbix simple. Vous pouvez télécharger tous les fichiers de ce module sous forme d'archive ZIP : MyAddress.zip.

Ce que vous construirez

Au cours de ce didacticiel, vous allez d'abord créer un module frontend qui ajoute une nouvelle section de menu Mon adresse puis convertit en un module frontal plus avancé qui envoie une requête HTTP à https://api.seeip.org et affiche la réponse - l'adresse IP de votre ordinateur - sur une nouvelle page dans la section de menu Mon adresse nouvellement créée. Voici à quoi ressemblera le module fini :

Partie I - Nouvelle section de menu

Ajouter un module vide à l'interface Zabbix
  1. Créez un répertoire Mon Adresse dans le répertoire modules de votre installation frontend Zabbix (par exemple, zabbix/ui/modules).

  2. Créez un fichier manifest.json avec les métadonnées de base du module (voir la description des paramètres pris en charge).

ui/modules/MonAdresse/manifest.json

{
           "manifest_version": 2.0,
           "id": "mon-adresse",
           "name": "Mon adresse IP",
           "version": "1.0",
           "namespace": "MonAdresse",
           "description": "Mon adresse IP externe"
       }
  1. Dans l'interface Zabbix, accédez à la section Administration → Général → Modules et cliquez sur le bouton Analyser le répertoire.

  1. Localisez le nouveau module Mon adresse IP dans la liste et cliquez sur le lien hypertexte « Désactivé » pour changer l'état du module de « Désactivé » à « Activé ».

Le module est maintenant enregistré dans le frontend. Cependant, il n'est pas encore visible, car vous devez encore définir les fonctionnalités du module. Une fois que vous avez ajouté du contenu au répertoire du module, vous verrez immédiatement les modifications dans l'interface Zabbix lors de l'actualisation de la page.

Créer une section de menu
  1. Créez un fichier Module.php dans le répertoire MonAdresse.

Ce fichier implémente une nouvelle classe Module qui étend la classe CModule par défaut. La classe Module insérera une nouvelle section de menu My Address dans le menu principal.

La méthode setAction() spécifie une action à exécuter en cliquant sur la section de menu. Pour commencer, vous pouvez utiliser l'action prédéfinie userprofile.edit, qui ouvrira la page Profil utilisateur. Dans la partie III de ce didacticiel, vous apprendrez à créer une action personnalisée.

ui/modules/MonAdresse/Module.php

<?php
       
       namespace Modules\MonAdresse ;
       
       use Zabbix\Core\CModule,
           APP,
           CMenuItem ;
       
       class Module extends CModule {
       
           public function init(): void {
               APP::Component()->get('menu.main')
                   -->add((new CMenuItem(_('Mon adresse')))
                   ->setAction('userprofile.edit'));
           }
       }

Vous pouvez remplacer userprofile.edit'` par d'autres actions, par exemple,charts.view'(ouvre des graphiques personnalisés), ``problems.view' (ouvre Surveillance → Problèmes) ou `report .status' (ouvre le rapport Informations système).

  1. Actualisez l'interface Zabbix. Il y a maintenant une nouvelle section Mon adresse en bas du menu principal de Zabbix. Cliquez sur Mon adresse pour ouvrir la page Profil utilisateur.

Partie II - Changement d'emplacement de la section de menu

Dans cette partie, vous allez déplacer la section du menu Mon adresse vers la section Surveillance. En conséquence, les utilisateurs pourront accéder à deux pages de sous-menu à partir de la section de menu Surveillance → Mon adresse.

  1. Ouvrez et modifiez le fichier Module.php.

ui/modules/MonAdresse/Module.php

<?php
       
       Espace de noms Modules\MonAdresse ;
       
       namespace Modules\MyAddress;
           APP,
           CMenuItem ;
       
       class Module extends CModule {
       
           class Module extends CModule {
               APP::Component()->get('menu.main')
                   ->findOrAdd(_('Surveillance'))
                       ->getSous-menu()
                           ->insertAfter(_('Discovery'),
                               (new CMenuItem(_('My Address')))->setAction('userprofile.edit')
                           );
           }
       }
  1. Actualisez l'interface Zabbix. Développez la section du menu Surveillance et observez que la section Mon adresse se trouve désormais sous la section Découverte.

Partie III - Action du module

Une action est implémentée dans deux fichiers - actions/MonAdresse.php et views/mon.adresse.php. Le fichier actions/MonAdresse.php s'occupe de l'implémentation de la logique métier, tandis que le fichier views/mon.adresse.php est responsable de la vue.

  1. Créez un répertoire actions dans le répertoire MonAdresse.

  2. Créez un fichier MonAdresse.php dans le répertoire actions.

La logique d'action sera définie dans la classe MonAdresse. Cette classe d'action implémentera quatre fonctions : init(), checkInput(), checkPermissions() et doAction(). L'interface Zabbix appelle la fonction doAction() lorsque l'action est demandée. Cette fonction est responsable de la logique métier du module.

Les données doivent être organisées sous forme de tableau associatif. Le tableau peut être multidimensionnel et contenir toutes les données attendues par la vue.

ui/modules/MonAdresse/actions/MonAdresse.php

<?php
       
       namespace Modules\MyAddress\Actions;
       
       use CController,
           CControllerResponseData;
       
       class MyAddress extends CController {
       
           public function init(): void {
               $this->disableCsrfValidation();
           }
       
           protected function checkInput(): bool {
               return true;
           }
       
           protected function checkPermissions(): bool {
               return true;
           }
       
           protected function doAction(): void {
               $data = ['my-ip' => file_get_contents("https://api.seeip.org")];
               $response = new CControllerResponseData($data);
               $this->setResponse($response);
           }
       }
  1. Créez un nouveau répertoire views dans le répertoire MonAdresse.

  2. Créez un fichier mon.adresse.php dans le répertoire views et définissez la vue du module.

Notez que la variable $data est disponible dans la vue sans la définir spécifiquement. Le framework transmet automatiquement le tableau associatif à la vue.

ui/modules/MonAdresse/views/mon.adresse.php

<?php
       
       (new CHtmlPage())
           ->setTitle(_('Le titre HTML de ma page d'adresse'))
           ->addItem(new CDiv($data['my-ip']))
           ->show();
  1. L'action du module doit être enregistrée dans le fichier manifest.json. Ouvrez manifest.json et ajoutez un nouvel objet « actions » qui contient :
  • la clé d'action avec le nom de l'action écrit en minuscules (a-z) et avec des mots séparés par des points (par exemple, « mon.adresse ») ;
  • le nom de la classe d'action (MonAdresse) comme valeur pour la clé class de l'objet mon.adresse ;
  • le nom de la vue d'action (mon.adresse) comme valeur pour la clé view de l'objet mon.adresse.

ui/modules/MonAdresse/manifest.json

{
           "manifest_version": 2.0,
           "id": "mon-adresse",
           "name": "Mon adresse IP",
           "version": "1.0",
           "namespace": "MonAdresse",
           "description": "Mon adresse IP externe",
           "Actions": {
               "mon.adresse": {
                   "class": "MonAdresse",
                   "view": "mon.adresse"
               }
           }
       }
  1. Ouvrez Module.php et remplacez le nom de l'action dans la méthode setAction() par mon.adresse.

ui/modules/MonAdresse/Module.php

<?php
       
       namespace Modules\MyAddress;
       
       use Zabbix\Core\CModule,
           APP,
           CMenuItem ;
       
       class Module extends CModule {
       
           public function init(): void {
               APP::Component()->get('menu.main')
                   ->findOrAdd(_('Surveillance'))
                       ->getSubmenu()
                           ->insertAfter(_('Discovery'),
                               (new CMenuItem(_('Mon adresse')))->setAction('mon.adresse')
                           );
           }
       }
  1. Actualisez l'interface Zabbix. Cliquez sur la section de menu Mon adresse pour voir l'adresse IP de votre ordinateur.