Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

Criar um módulo (tutorial)

Este é um tutorial passo a passo que mostra como criar um módulo simples de frontend do Zabbix. Você pode baixar todos os arquivos deste módulo como um arquivo ZIP: MyAddress.zip.

O que você irá construir

Durante este tutorial, você irá primeiro construir um módulo de frontend que adiciona uma nova seção de menu Meu Endereço e depois convertê-lo em um módulo de frontend mais avançado que faz uma requisição HTTP para https://api.seeip.org e exibe a resposta - o endereço IP do seu computador - em uma nova página na seção de menu Meu Endereço recém-criada. Veja como o módulo finalizado ficará:

Parte I - Nova seção de menu

Adicione um módulo em branco ao frontend do Zabbix
  1. Crie um diretório MyAddress no diretório modules da sua instalação do frontend do Zabbix (por exemplo, zabbix/ui/modules).

  2. Crie um arquivo manifest.json com os metadados básicos do módulo (consulte a descrição dos parâmetros suportados).

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. No frontend do Zabbix, vá para a seção Administração → Geral → Módulos e clique no botão Procurar diretório.

  1. Localize o novo módulo My IP Address na lista e clique no hiperlink "Desabilitado" para alterar o status do módulo de "Desabilitado" para "Habilitado" (se o módulo não estiver listado, consulte a seção de solução de problemas).

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

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

Este arquivo implementa uma nova classe Module que estende a classe padrão CModule. A classe Module irá inserir uma nova seção de menu Meu Endereço 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 Perfil do usuário. Na parte III deste tutorial, você aprenderá como 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(_('Meu Endereço')))
                   ->setAction('userprofile.edit'));
           }
       }

Você pode substituir 'userprofile.edit' por outras ações, por exemplo, 'charts.view' (abre gráficos personalizados), 'problems.view' (abre Monitoramento → Problemas) ou 'report.status' (abre o relatório Informações do sistema).

  1. Atualize o frontend do Zabbix. Agora há uma nova seção Meu Endereço na parte inferior do menu principal do Zabbix. Clique em Meu Endereço para abrir a página Perfil do usuário.

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

Nesta parte, você moverá a seção de menu Meu endereço para a seção Monitoramento e, em seguida, adicionará um menu aninhado a ela. Como resultado, os usuários poderão acessar duas páginas de submenus a partir da seção de menu Monitoramento → Meu endereço.

  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 frontend do Zabbix. Expanda a seção de menu Monitoramento e observe que a seção Meu endereço agora está localizada abaixo da seção Descoberta.

  1. Para adicionar páginas aninhadas à seção de menu Meu endereço, abra e edite novamente o arquivo Module.php.

Esta etapa cria duas subseções:

  • IP externo que executa uma nova ação 'my.address' que será definida nas próximas etapas;
  • Perfil do usuário que executa a ação predefinida 'userprofile.edit' para abrir a página Perfil do usuário.

Observe que, para o menu aninhado, você precisa usar a classe CMenu além das classes usadas nas etapas anteriores.

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. Atualize o frontend do Zabbix. Observe que a seção de menu Meu endereço agora contém um menu de terceiro nível com duas páginas - IP externo e Perfil do usuário.

Parte III - Ação do módulo

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 de negócio, 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. Esta classe de ação implementará quatro funções: init(), checkInput(), checkPermissions() e doAction(). O frontend do Zabbix chama a função doAction() quando a ação é solicitada. Esta função é responsável pela lógica de negócio do módulo.

Os dados devem ser organizados como um array associativo. O array pode ser multidimensional e pode conter quaisquer dados esperados pela visualizaçã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 ser definida especificamente. O framework passa automaticamente o array associativo para a visualização.

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. A ação do módulo deve ser registrada no arquivo manifest.json. Abra o manifest.json e adicione um novo objeto actions que contém:
  • a chave da ação com o nome da ação escrito em minúsculas (a-z) e com palavras separadas por pontos (por exemplo, my.address);
  • o nome da classe da ação (MyAddress) como valor para a chave class do objeto my.address;
  • o nome da visualização da ação (my.address) como valor para a chave view do objeto 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. Atualize o frontend do Zabbix. Clique em My address → External IP para ver o endereço IP do seu computador.