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ê vai construir
Durante este tutorial, você primeiro criará um módulo de frontend que adiciona uma nova seção de menu My Address e, em seguida, o converterá em um módulo de frontend mais avançado 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 seção de menu My Address recém-criada. Veja como o módulo finalizado ficará:

Parte I - Nova seção do menu
Adicionar um módulo em branco ao frontend do Zabbix
-
Crie um diretório MyAddress no diretório modules da sua instalação do frontend do Zabbix (por exemplo, zabbix/ui/modules).
-
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."
}
- No frontend do Zabbix, vá para a seção Administration → General → Modules e clique no botão Scan directory.

- Localize o novo módulo My IP Address na lista e clique no hiperlink "Disabled" para alterar o status do módulo de "Disabled" para "Enabled" (se o módulo não estiver listado, consulte a seção de troubleshooting).

O módulo agora está registrado no frontend. No entanto, ele ainda não está visível, porque 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
- 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 de menu. Para começar, você pode usar a ação predefinida userprofile.edit, que abrirá a página User profile. Na parte 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' (abre gráficos personalizados), 'problems.view' (abre Monitoring → Problems), ou 'report.status' (abre o relatório System information).
- Atualize o frontend 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.
- 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')
);
}
}
- 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.

- 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')
])
)
);
}
}
- 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 - Ação do módulo
Uma action é 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 view.
-
Crie um diretório actions no diretório MyAddress.
-
Crie um arquivo MyAddress.php no diretório actions.
A lógica da action será definida na classe MyAddress. Essa classe de action implementará quatro funções: init(), checkInput(), checkPermissions() e doAction(). O frontend do Zabbix chama a função doAction() quando a action é solicitada. Essa 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 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);
}
}
-
Crie um novo diretório views no diretório MyAddress.
-
Crie um arquivo my.address.php no diretório views e defina a view do módulo.
Observe que a variável $data está disponível na view sem precisar ser definida especificamente.
O framework passa automaticamente o array associativo para a 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();
- A action do módulo precisa ser registrada no arquivo manifest.json. Abra manifest.json e adicione um novo objeto
actionsque contenha:
- a chave da action com o nome da action escrito em minúsculas (a-z) e com as palavras separadas por pontos (por exemplo,
my.address); - o nome da classe da action (
MyAddress) como valor da chaveclassdo objetomy.address; - o nome da view da action (
my.address) como valor da chaveviewdo objetomy.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"
}
}
}
- Atualize o frontend do Zabbix. Clique em My address → External IP para ver o endereço IP do seu computador.
