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

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

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

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

Направите одељак менија
  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 адресу свог рачунара.