Crea un modulo (tutorial)

Questo è un tutorial passo-passo che mostra come creare un semplice modulo frontend Zabbix. Puoi scaricare tutti i file di questo modulo come archivio ZIP: MyAddress.zip.

Cosa realizzerai

Durante questo tutorial, creerai innanzitutto un modulo frontend che aggiunge una nuova sezione di menu My Address e poi lo convertirai in un modulo frontend più avanzato che effettua una richiesta HTTP a https://api.seeip.org e visualizza la risposta - l'indirizzo IP del tuo computer - in una nuova pagina nella sezione di menu My Address appena creata. Ecco come apparirà il modulo completato:

Parte I - Nuova sezione del menu

Aggiungere un modulo vuoto al frontend di Zabbix
  1. Creare una directory MyAddress nella directory modules dell'installazione del frontend di Zabbix (ad esempio, zabbix/ui/modules).

  2. Creare un file manifest.json con i metadati di base del modulo (vedere la descrizione dei parametri supportati).

ui/modules/MyAddress/manifest.json

{
    "manifest_version": 2.0,
    "id": "my-address",
    "name": "My IP Address",
    "version": "1.0",
    "namespace": "MyAddress",
    "description": "My External IP Address."
}
  1. Nel frontend di Zabbix, andare alla sezione Administration → General → Modules e fare clic sul pulsante Scan directory.

  1. Individuare il nuovo modulo My IP Address nell'elenco e fare clic sul collegamento ipertestuale "Disabled" per modificare lo stato del modulo da "Disabled" a "Enabled" (se il modulo non è elencato, vedere la sezione troubleshooting).

Il modulo è ora registrato nel frontend. Tuttavia, non è ancora visibile, perché è necessario definire ancora la funzionalità del modulo. Una volta aggiunto contenuto alla directory del modulo, le modifiche saranno immediatamente visibili nel frontend di Zabbix dopo l'aggiornamento della pagina.

Creare una sezione di menu
  1. Crea un file Module.php nella directory MyAddress.

Questo file implementa una nuova classe Module che estende la classe predefinita CModule. La classe Module inserirà una nuova sezione di menu My Address nel menu principale.

Il metodo setAction() specifica un'azione da eseguire al clic sulla sezione di menu. Per iniziare, puoi usare l'azione predefinita userprofile.edit, che aprirà la pagina User profile. Nella parte III di questo tutorial, imparerai a creare un'azione personalizzata.

ui/modules/MyAddress/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')
            ->add((new CMenuItem(_('My Address')))
            ->setAction('userprofile.edit'));
    }
}

Puoi sostituire 'userprofile.edit' con altre azioni, ad esempio 'charts.view' (apre i grafici personalizzati), 'problems.view' (apre Monitoring → Problems), oppure 'report.status' (apre il report System information).

  1. Aggiorna il frontend di Zabbix. Ora c'è una nuova sezione My Address in fondo al menu principale di Zabbix. Fai clic su My Address per aprire la pagina User profile.

Parte II - Modifica della posizione della sezione di menu

In questa parte, sposterai la sezione di menu My Address nella sezione Monitoring e poi vi aggiungerai un menu nidificato. Di conseguenza, gli utenti potranno accedere a due pagine di sottomenu dalla sezione di menu Monitoring → My Address.

  1. Apri e modifica il file Module.php.

ui/modules/MyAddress/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(_('Monitoring'))
            ->getSubmenu()
            ->insertAfter(_('Discovery'),
                (new CMenuItem(_('My Address')))->setAction('userprofile.edit')
            );
    }
}
  1. Aggiorna il frontend di Zabbix. Espandi la sezione di menu Monitoring e osserva che la sezione My address ora si trova sotto la sezione Discovery.

  1. Per aggiungere pagine nidificate alla sezione di menu My Address, apri e modifica di nuovo il file Module.php.

Questo passaggio crea due sottosezioni:

  • External IP che esegue una nuova azione 'my.address' che verrà definita nei passaggi successivi;
  • User profile che esegue l'azione predefinita 'userprofile.edit' per aprire la pagina User profile.

Nota che per il menu nidificato è necessario utilizzare la classe CMenu oltre alle classi usate nei passaggi precedenti.

ui/modules/MyAddress/Module.php

<?php

namespace Modules\MyAddress;

use Zabbix\Core\CModule,
    APP,
    CMenu,
    CMenuItem;

class Module extends CModule {

    public function init(): void {
        APP::Component()->get('menu.main')
            ->findOrAdd(_('Monitoring'))
            ->getSubmenu()
            ->insertAfter(_('Discovery'),
                (new CMenuItem(_('My Address')))->setSubMenu(
                    new CMenu([
                        (new CMenuItem(_('External IP')))->setAction('my.address'),
                        (new CMenuItem(_('User profile')))->setAction('userprofile.edit')
                    ])
                )
            );
    }
}
  1. Aggiorna il frontend di Zabbix. Osserva che la sezione di menu My address ora contiene un menu di terzo livello con due pagine: External IP e User profile.

Parte III - Azione del modulo

Un'azione viene implementata in due file - actions/MyAddress.php e views/my.address.php. Il file actions/MyAddress.php si occupa dell'implementazione della logica di business, mentre il file views/my.address.php è responsabile della view.

  1. Crea una directory actions nella directory MyAddress.

  2. Crea un file MyAddress.php nella directory actions.

La logica dell'azione sarà definita nella classe MyAddress. Questa classe di azione implementerà quattro funzioni: init(), checkInput(), checkPermissions() e doAction(). Zabbix frontend chiama la funzione doAction() quando viene richiesta l'azione. Questa funzione è responsabile della logica di business del modulo.

I dati devono essere organizzati come un array associativo. L'array può essere multidimensionale e può contenere qualsiasi dato previsto dalla view.

ui/modules/MyAddress/actions/MyAddress.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. Crea una nuova directory views nella directory MyAddress.

  2. Crea un file my.address.php nella directory views e definisci la view del modulo.

Nota che la variabile $data è disponibile nella view senza doverla definire esplicitamente. Il framework passa automaticamente l'array associativo alla view.

ui/modules/MyAddress/views/my.address.php

<?php

(new CHtmlPage())
    ->setTitle(_('The HTML Title of My Address Page'))
    ->addItem(new CDiv($data['my-ip']))
    ->show();
  1. L'azione del modulo deve essere registrata nel file manifest.json. Apri manifest.json e aggiungi un nuovo oggetto actions che contenga:
  • la chiave dell'azione con il nome dell'azione scritto in minuscolo (a-z) e con le parole separate da punti (ad esempio, my.address);
  • il nome della classe dell'azione (MyAddress) come valore per la chiave class dell'oggetto my.address;
  • il nome della view dell'azione (my.address) come valore per la chiave view dell'oggetto my.address.

ui/modules/MyAddress/manifest.json

{
    "manifest_version": 2.0,
    "id": "my-address",
    "name": "My IP Address",
    "version": "1.0",
    "namespace": "MyAddress",
    "description": "My External IP Address.",
    "actions": {
        "my.address": {
            "class": "MyAddress",
            "view": "my.address"
        }
    }
}
  1. Aggiorna Zabbix frontend. Fai clic su My address → External IP per vedere l'indirizzo IP del tuo computer.