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

Adicionando 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 (veja 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, ele 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.

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 Meu Endereço para a seção Monitoramento e adicionar um submenu a ela. Como resultado, os usuários poderão acessar duas páginas de submenu na 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(_('Monitoramento'))
                ->getSubmenu()
                    ->insertAfter(_('Descoberta'),
                        (new CMenuItem(_('Meu Endereço')))->setAction('userprofile.edit')
                    );
    }
}
  1. Atualize o frontend do Zabbix. Expanda a seção do menu Monitoramento e observe que a seção Meu Endereço agora está localizada abaixo da seção Descoberta.

  1. Para adicionar paginas abaixo da seção do menu Meu Endereço, abra e edite o arquivo Module.php novamente.

Esse passo cria duas subseções:

-IP Externo que executa uma nova ação 'my.address', que será definida nos próximos passos; -Perfil de Usuário que executa a ação prédefinida 'userprofile.edit' para abrir a pagina Perfil de usuário.

Note que para submenus, voce precisa usar a classe CMenu além das classes utilizadas em passos 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(_('Monitoramento'))
->getSubmenu()
->insertAfter(_('Descoberta'),
(new CMenuItem(_('Meu Endereço')))->setSubMenu(
new CMenu([
(new CMenuItem(_('IP Externo')))->setAction('my.address'),
(new CMenuItem(_('Perfil de Usuário')))->setAction('userprofile.edit')
])
)
);
}
}
  1. Atualize o frontend do Zabbix. Observe que a seção do menu Meu Endereço agora contem um menu de terceiro nível, com duas páginas - IP Externo and Perfil de Usuário.

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

Os dados devem ser organizados como um sequência associativa. A sequência 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 sequência associativa para a visualização.

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

<?php

(new CHtmlPage())
    ->setTitle(_('O título HTML da minha Página de 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. Atualize a interface web do Zabbix. Clique na seção do menu My address → External IP para ver o endereço IP do seu computador.