Aquest és un tutorial passa a passa per crear un mòdul d'interfície bàsic de Zabbix. Podeu descarregar tots els fitxers d'aquest mòdul com a arxiu ZIP: MyAddress.zip.
Durant aquest tutorial, creareu un mòdul d'interfície que afegeix una nova drecera de menú per obrir una secció Zabbix i després convertir-lo en un mòdul d'interfície més avançat que fa una petició HTTP a https://api.seeip.org i ensenya la resposta -l'adreça IP del vostre ordinador- a una nova pàgina creada al secció de menú La meva adreça. Així és com es veu el mòdul acabat:
Creeu un directori MyAddress al directori de mòduls de la instal·lació de Zabbix (per exemple, zabbix/ui/modules).
Creeu un fitxer manifest.json amb metadades de mòduls bàsiques (veieu la descripció dels paràmetres admesos).
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "la meva adreça",
"name": "La meva adreça IP",
"versió": "1.0",
"namespace": "La meva adreça",
"description": "La meva adreça IP externa"
}
El mòdul és ara registrat a la interfície. Tanmateix, encara no és visible, perquè encara cal definir la funcionalitat del mòdul. Un cop afegiu contingut al directori del mòdul, veureu immediatament els canvis a la interfície de Zabbix en actualitzar la pàgina.
Aquest fitxer implementa una nova classe Module que amplia la classe CModule per defecte. La classe Mòdul inserirà una nova secció de menú La meva adreça al menú principal.
El mètode setAction() especifica una acció que cal executar en fer clic a la secció del menú. Per començar, podeu emprar l'acció predefinida userprofile.edit, que obrirà la pàgina Perfil d'usuari. A la part III d'aquest tutorial, aprendràs a crear una acció personalitzada.
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(_('La meva adreça')))
->setAction('userprofile.edit'));
}
}
Podeu substituir 'userprofile.edit'
per altres accions, per exemple, 'charts.view'
(obre gràfics personalitzats), 'problems.view'
(obre Monitoratge→Problemes) o 'report.status'
(obre l'informe Informació del sistema).
En aquesta secció, moureu l'entrada del menú La Meva Adreça a la secció Monitoratge. Ara els usuaris podran accedir a la informació del seu perfil d'usuari des del submenú Monitoratge→La meva adreça.
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')
);
}
}
Aquesta passa crea dues subseccions:
Tingueu en compte que per al menú niuat, heu d'emprar la classe CMenu a més de les classes utilitzades a les passes anteriors.
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')
])
)
);
}
}
Una acció s'implementa a 2 fitxers: actions/MyAddress.php i views/my.address.php. El fitxer actions/MyAddress.php s'encarrega de la implementació de la lògica de negoci, mentre que l'arxiu views/my.address.php s'encarrega de la vista.
Afegiu un directori actions a MyAddress.
Creeu el fitxer MyAddress.php dins del directori actions.
L'acció lògica es definirà a la classe MyAddress. Aquesta classe d'acció implementarà quatre funcions: init(), checkInput(), checkPermissions(), doAction(). El frontend de Zabbix crida a la funció doAction() quan es demana l'acció. Aquesta funció és responsable de la lògica de negoci del mòdul.
Les dades s'han d'organitzar com una matriu associada. La matriu pot ser multidimensional i pot contindre qualsevol dada esperada per la vista.
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);
}
}
Afegiu el directori views a MyAddress.
Creeu el fitxer my.address.php dins del directori views i definiu la vista del mòdul.
Tingueu en compte que la variable $data
és disponible a la vista sense definir-la específicament. El marc passa automàticament la matriu associada a la vista.
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();
actions
que contingui:la meva.adreça
).MyAddress
) sota la clau class
de l'objecte my.address
.my.address
) sota la clau view
de l'objecte 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"
}
}
}