Креирајте модул (водич)

Ово је водич корак по корак који показује како да направите једноставан Zabbix кориснички интерфејс модул.Све датотеке овог модула можете преузети као ZIP архиву: MyAddress.zip.

Шта ћеш изградити

Током овог водича, прво ћете креирати модул кориснички интерфејса који додаје нови одељак менија Моја адресаа затим га конвертујте у more advanced модул корисничког интерфејса који поставља HTTP захтев на https://api.seeip.org и приказује одговор - IP адресу вашег рачунара - на новој страници у новокреираном одељку менија Моја адреса.Ево како ће готов модул изгледати:

Part I - Нови одељак менија

Додајте празан модул у кориснички интерфејс Zabbix-а
  1. Креирајте директоријум MyAddress у modules директоријуму ваше Zabbix инсталације корисничког интерфејса (на пример, zabbix/ui/modules).

  2. Направите датотеку manifest.json са основним метаподацима модула (погледајте опис подржаних параметара).

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."
       }
  1. У корисничком интерфејсу Zabbix-a, идите на Администрација → Опште → Модули секцију и кликните на дугме Скенирај директоријум.

  1. Пронађите нови модул Моја IP адреса на листи и кликните на хипервезу "Онемогућено" да бисте променили статус модула из "Онемогућено" у "Омогућено" (ако не видите свој модул на листи, проверите дозволе).

Модул је сада регистрован на корисничком интерфејсу. Међутим, још увек није видљив, јер још увек треба да дефинишете функционалност модула. Када додате садржај у директоријум модула, одмах ћете видети промене у Zabbix корисничком интерфејсу након освежавања странице.

Направите одељак менија
  1. Креирајте датотеку Module.php у директоријуму MyAdress.

Ова датотека имплементира нову класу Мо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' (отвара извештај Информације о систему).

  1. Освежите Zabbix кориснички интерфејс. Сада постоји нови одељак Моја адреса на дну главног менија Zabbix-а. Кликните на Моја адреса да отворите страницу Кориснички профил.

Part II - Промена локације одељка менија

У овом делу ћете преместити одељак менија Моја адреса у одељак Надгледање и затим му додати угнежђени мени. Као резултат тога, корисници ће моћи да приступе двема страницама подменија из одељка менија Надгледање → Моја адреса.

  1. Отворите и уредите датотеку Module.php.

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')
                   );
                   }
       }
  1. Освежите Zabbix кориснички интерфејс. Проширите одељак менија Надгледање и обратите пажњу да се одељак Моја адреса сада налази испод одељка Откривање.

  1. Да бисте додали угнеждене странице у одељак менија Моја адреса, поново отворите и уредите датотеку Module.php.

Овај корак креира два пододељка:

  • Спољни IP који извршава нову акцију 'my.address' која ће бити дефинисана у следећим корацима;
  • Кориснички профил који извршава унапред дефинисану радњу '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')
            ])
            )
            );
            }
       }
  1. Освежите Zabbix кориснички интерфејс. Обратите пажњу на то да одељак менија Моја адреса сада садржи мени трећег нивоа са две странице - Спољна IP адреса и Кориснички профил.

Part III - Акције модула

Акција је имплементирана у два фајла - actions/MyAddress.php и views/my.address.php. Датотека actions/MyAddress.php брине о имплементацији пословне логике, док је датотека views/my.address.php одговорна за приказ.

  1. Креирајте директоријум actions у директоријуму MyAddress.

  2. Креирајте датотеку 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);
           }
       }
  1. Креирајте нови директоријум views у директоријуму MyAddress.

  2. Креирајте датотеку 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();
  1. Радња модула мора бити регистрована у датотеци manifest.json. Отворите manifest.json и додајте нови објекат "actions" који садржи:
  • акциони кључ са именом радње написаним малим словима (а-z) и речима раздвојеним тачкама (на пример, 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"
            }
            }
       }
  1. Освежите Zabbix кориснички интерфејс. Кликните на Моја адреса → Екстерни IP да бисте видели IP адресу свог рачунара.