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.
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:
Crie um diretório MyAddress em zabbix/ui/modules.
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)
}
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.
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).
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.
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')
);
}
}
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.
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. 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);
}
}
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 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();
actions
que contenhamy.address
);MyAddress
) como um valor para a chave class
do objeto my.address
;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"
}
}
}
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')
);
}
}