Ово је водич корак по корак који показује како да направите једноставан Zabbix кориснички интерфејс модул.Све датотеке овог модула можете преузети као ZIP архиву: MyAddress.zip.
Током овог водича, прво ћете креирати модул кориснички интерфејса који додаје нови одељак менија Моја адресаа затим га конвертујте у more advanced модул корисничког интерфејса који поставља HTTP захтев на https://api.seeip.org и приказује одговор - IP адресу вашег рачунара - на новој страници у новокреираном одељку менија Моја адреса.Ево како ће готов модул изгледати:
1.Креирајте директоријум MyAddress у modules директоријуму ваше Zabbix инсталације корисничког интерфејса (на пример, zabbix/ui/modules). 2. Направите датотеку manifest.json са основним метаподацима модула (погледајте опис подржаних parameters).
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."
}
У корисничком интерфејсу Zabbix-a, идите на Администрација → Опште → Модули одељак и кликните на дугме Скенирај директоријум.
Пронађите нови модул Моја IP адреса на листи и кликните на хипервезу "Онемогућено" да бисте променили статус модула из "Онемогућено" у "Омогућено".
Модул је сада регистрован на корисничком интерфејсу. Међутим, то још није видљиво, јер још увек треба да дефинишете функционалност модула.Када додате садржај у директоријум модула, одмах ћете видети промене на корисничком интерфејсу Zabbix-a након освежавања странице.
Ова датотека имплементира нову класу Моdule која проширује подразумевану класу CModule. Класа Module ће уметнути нови одељак менија My Adress у главни мени.
Метода setAction() специфицира радњу која ће се извршити након клика на одељак менија. За почетак, можете користити унапред дефинисану акцију userprofile.edit, која ће отворити страницу Кориснички профил. У part III овог упутства, научићете како да креирате прилагођену радњу.
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'));
}
}
Можете да замените 'userprofile.edit'
са другим радњама, на пример, 'charts.view'
(отвара прилагођене графиконе), 'problems.view'
(отвара Мониторинг → Проблеми) или 'report.status'
(отвара извештај Информације о систему).
У овом делу ћете преместити одељак менија Моја адреса у одељак Надгледање и затим му додати угнежђени мени. Као резултат тога, корисници ће моћи да приступе двема страницама подменија из одељка менија Надгледање → Моја адреса.
ui/modules/MyAddress/Module.php
<?php
именски простор Modules\MyAdress;
користите 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')
);
}
}
Овај корак креира два пододељка:
Имајте на уму да за угнеждени мени морате да користите класу CMenu поред класа коришћених у претходним корацима.
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')
])
)
);
}
}
Акција је имплементирана у два фајла - actions/MyAddress.php и views/my.address.php. Датотека actions/MyAddress.php брине о имплементацији пословне логике, док је датотека views/my.address.php одговорна за приказ.
Креирајте директоријум actions у директоријуму MyAddress.
Креирајте датотеку MyAddress.php у директоријуму actions.
Логика акције ће бити дефинисана у класи MyAddress. Ова класа радње ће имплементирати четири функције: init(), checkInput(), checkPermissions() и doAction(). Zabbix корицнички интерфејс позива функцију doAction() када се захтева акција. Ова функција је одговорна за пословну логику модула.
Подаци морају бити организовани као асоцијативни низ. Низ може бити вишедимензионалан и може садржати све податке које очекује приказ.
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);
}
}
Креирајте нови директоријум views у директоријуму MyAddress.
Креирајте датотеку my.address.php у директоријуму views и дефинишите приказ модула.
Имајте на уму да је променљива $data
доступна у приказу без посебног дефинисања. Оквир аутоматски прослеђује асоцијативни низ у приказ.
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();
my.address
);МyAddress
) као вредност за кључ class
објекта my.address
;my.address
) као вредност за кључ view
објекта 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"
}
}
}