Dit is een stapsgewijze handleiding die laat zien hoe je een eenvoudige Zabbix-frontendmodule kunt maken. Je kunt alle bestanden van deze module downloaden als een ZIP-archief: MyAddress.zip.
Tijdens deze tutorial ga je eerst een frontend-module bouwen die een nieuwe sectie Mijn Adres aan het menu toevoegt. Vervolgens zul je het converteren naar een geavanceerdere frontend-module die een HTTP-verzoek maakt naar https://api.seeip.org en het antwoord weergeeft - het IP-adres van je computer - op een nieuwe pagina in de zojuist gecreëerde Mijn Adres menu sectie. Zo ziet de afgewerkte module eruit:
Maak een directory genaamd MyAddress in zabbix/ui/modules.
Maak een bestand genaamd manifest.json aan met de basisgegevens van de module (zie de beschrijving van ondersteunde parameters).
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "my-address",
"name": "Mijn IP-adres",
"version": "1.0",
"namespace": "MyAddress",
"description": "Mijn Externe IP-adres"
}
De module is nu geregistreerd in de frontend. Hij is echter nog niet zichtbaar, omdat je nog steeds de functionaliteit van de module moet definiëren. Zodra je inhoud aan de modulemap toevoegt, zul je onmiddellijk de wijzigingen zien in de Zabbix-frontend wanneer je de pagina vernieuwt.
Dit bestand implementeert een nieuwe Module-klasse die de standaard CModule-klasse uitbreidt. De Module-klasse zal een nieuwe Mijn Adres menusectie toevoegen aan het hoofdmenu.
De methode setAction() geeft een actie aan die wordt uitgevoerd wanneer er op de menusectie wordt geklikt. Je kunt in eerste instantie de vooraf gedefinieerde actie userprofile.edit gebruiken, die de pagina Gebruikersprofiel opent. In deel III van deze tutorial leer je hoe je een aangepaste actie kunt maken.
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(_('Mijn Adres')))
->setAction('userprofile.edit'));
}
}
Je kunt 'userprofile.edit'
vervangen door andere acties, bijvoorbeeld 'charts.view'
(opent aangepaste grafieken), 'problems.view'
(opent Monitoring → Problemen) of 'report.status'
(opent rapport over Systeeminformatie).
In dit deel verplaats je de menusectie Mijn Adres naar de sectie Monitoring. Hierdoor kunnen gebruikers toegang krijgen tot twee submenupagina's vanuit de Monitoring → Mijn Adres menusectie.
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(_('Ontdekking'),
(new CMenuItem(_('Mijn Adres')))->setAction('userprofile.edit')
);
}
}
Een actie wordt geïmplementeerd in twee bestanden - actions/MyAddress.php en views/my.address.php. Het bestand actions/MyAddress.php zorgt voor de implementatie van de business logica, terwijl het bestand views/my.address.php verantwoordelijk is voor de weergave.
Maak een map genaamd actions in de MyAddress-map.
Maak een bestand genaamd MyAddress.php in de actions-map.
De logica van de actie wordt gedefinieerd in de klasse MyAddress. Deze actieklasse zal vier functies implementeren: init(), checkInput(), checkPermissions() en doAction(). De doAction()-functie wordt aangeroepen door de Zabbix-frontend wanneer de actie wordt aangevraagd. Deze functie is verantwoordelijk voor de business logica van de module.
De data moet georganiseerd zijn als een associatieve array. De array kan meerdere dimensies hebben en kan elke data bevatten die de view verwacht.
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);
}
}
Maak een nieuwe map genaamd views in de MyAddress-map.
Maak een bestand genaamd my.address.php in de views-map en definieer de weergave van de module.
Merk op dat de variabele $data
beschikbaar is in de view zonder deze expliciet te definiëren. Het framework geeft automatisch de associatieve array door aan de view.
ui/modules/MyAddress/views/my.address.php
<?php
(new CHtmlPage())
->setTitle(_('De HTML-titel van mijn adrespagina'))
->addItem(new CDiv($data['my-ip']))
->show();
actions
toe dat het volgende bevat:my.address
);MyAddress
) als waarde voor de sleutel class
van het object my.address
;my.address
) als waarde voor de sleutel view
van het object 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"
}
}
}
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('my.address')
);
}
}