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
-
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 Administração → Geral → Módulos e clique no botão Procurar diretório.

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

- 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')
])
)
);
}
}
- 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.
-
Crie um diretório actions no diretório MyAddress.
-
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);
}
}
-
Crie um novo diretório views no diretório MyAddress.
-
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();
- A ação do módulo deve ser registrada no arquivo manifest.json. Abra o manifest.json e adicione um novo objeto
actionsque 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 chaveclassdo objetomy.address; - o nome da visualização da ação (
my.address) como valor para a 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.
