Criar um módulo (tutorial)

Este é um tutorial passo a passo que mostra como criar um módulo simples de front-end do Zabbix. Você pode fazer o download de todos os arquivos desse módulo como um arquivo ZIP: MyAddress.zip.

O que você criará

Durante este tutorial, você primeiro criará um módulo de frontend que adiciona uma nova seção de menu My Address e, em seguida, convertê-lo em um módulo de frontend more advanced que faz uma solicitação HTTP para https://api.seeip.org e exibe a resposta - o endereço IP do seu computador - em uma nova página na recém-criada seção de menu My Address. Veja a seguir a aparência do módulo finalizado:

Parte I - Nova seção do menu

Adicionar um módulo em branco ao front-end do Zabbix
  1. Crie um diretório MyAddress em zabbix/ui/modules.

  2. Crie um arquivo manifest.json com os metadados básicos do módulo (consulte a descrição dos [parameters] suportados(../file_structure/manifest)).

ui/modules/MyAddress/manifest.json

{
           "manifest_version": 2.0,
           "id": "my-address",
           "name": "Meu endereço IP",
           "version" (versão): "1.0",
           "namespace": "MyAddress",
           "description" (descrição): "My External IP Address" (Meu endereço IP externo)
       }
  1. No front-end do Zabbix, vá para a seção Administration → General → Modules e clique no botão Scan directory.

  1. Localize o novo módulo My IP Address na lista e clique no hiperlink "Disabled" (Desativado) para alterar o status do módulo de "Disabled" (Desativado) para "Enabled" (Ativado).

O módulo agora está registrado no frontend. Entretanto, ele ainda não está visível, pois você ainda precisa definir a funcionalidade do módulo. Depois de adicionar conteúdo ao diretório do módulo, você verá imediatamente as alterações no frontend do Zabbix ao atualizar a página.

Criar uma seção de menu
  1. Crie um arquivo Module.php no diretório MyAddress.

Esse arquivo implementa uma nova classe Module que estende a classe padrão CModule. A classe Module inserirá uma nova seção de menu My Address no menu principal.

O método setAction() especifica uma ação a ser executada ao clicar na seção do menu. Para começar, você pode usar a ação predefinida userprofile.edit, que abrirá a página User profile. Na part III deste tutorial, você aprenderá a criar uma ação personalizada.

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'));
           }
       }

Você pode substituir 'userprofile.edit' por outras ações, por exemplo, 'charts.view' (opens custom graphs), 'problems.view' (opens Monitoring → Problems) ou 'report.status' (opens System information report).

  1. Atualize o front-end do Zabbix. Agora há uma nova seção My Address na parte inferior do menu principal do Zabbix. Clique em My Address para abrir a página User profile.

Parte II - Alteração do local da seção do menu

Nesta parte, você moverá a seção de menu My Address para a seção Monitoring. Como resultado, os usuários poderão acessar duas páginas de submenu na seção de menu Monitoring → My Address.

  1. Abra e edite o arquivo 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. Atualize o front-end do Zabbix. Expanda a seção do menu Monitoring e observe que a seção My address agora está localizada abaixo da seção Discovery.

Parte III - Módulo de ação

Uma ação é implementada em dois arquivos - actions/MyAddress.php e views/my.address.php. O arquivo actions/MyAddress.php cuida da implementação da lógica comercial, enquanto o arquivo views/my.address.php é responsável pela visualização.

  1. Crie um diretório actions no diretório MyAddress.

  2. Crie um arquivo MyAddress.php no diretório actions.

A lógica da ação será definida na classe MyAddress. Essa classe de ação implementará quatro funções: init(), checkInput(), checkPermissions() e doAction(). O front-end do Zabbix chama a função doAction() quando a ação é solicitada. Essa função é responsável pela lógica comercial do módulo.

::: nota importante Os dados devem ser organizados como uma matriz associativa. A matriz pode ser multidimensional e pode conter quaisquer dados esperados pela exibição. :::

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. Crie um novo diretório views no diretório MyAddress.

  2. Crie um arquivo my.address.php no diretório views e defina a visualização do módulo.

Observe que a variável $data está disponível na visualização sem que ela seja especificamente definida. A estrutura passa automaticamente a matriz associativa para a visualização.

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

<?php
       
       (new CHtmlPage())
           ->setTitle(_('O título HTML da página Meu endereço'))
           ->addItem(new CDiv($data['my-ip']))
           ->show();
  1. A ação do módulo deve ser registrada no arquivo manifest.json. Abra o arquivo manifest.json e adicione um novo objeto actions que contenha
  • a chave da ação com o nome da ação escrito em letras minúsculas (a-z) e com palavras separadas por pontos (por exemplo, my.address);
  • o nome da classe da ação (MyAddress) como um valor para a chave class do objeto my.address;
  • o nome da visualização da ação (my.address) como um valor para a chave view do objeto my.address.

ui/modules/MyAddress/manifest.json

{
           "manifest_version": 2.0,
           "id": "my-address",
           "name": "Meu endereço IP",
           "version" (versão): "1.0",
           "namespace": "MyAddress",
           "description" (descrição): "Meu endereço IP externo",
           "actions": {
               "my.address": {
                   "class": "MyAddress",
                   "view": "my.address"
               }
           }
       }
  1. Abra o arquivo Module.php e altere o nome da ação no método setAction() para my.address.

ui/modules/MyAddress/Module.php

<?php
       
       namespace Modules\MyAddress;
       
       use Zabbix\Core\CModule,
           APP,
           CMenuItem;
       
       class Module extends CModule {
       
           função pública init(): void {
               APP::Component()->get('menu.main')
                   ->findOrAdd(_('Monitoring'))
                       ->getSubmenu()
                           ->insertAfter(_('Discovery'),
                               (new CMenuItem(_('My Address')))->setAction('my.address')
                           );
           }
       }
  1. Atualize o front-end do Zabbix. Clique na seção do menu My address para ver o endereço IP do seu computador.