This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

Створення модуля (інструкція)

Це покрокова інструкція, яка показує, як створити простий модуль фронтенду Zabbix. Ви можете завантажити всі файли цього модуля у вигляді ZIP-архіву: MyAddress.zip.

Що ви створите

У цьому уроці ви спочатку створите модуль інтерфейсу, який додає новий розділ меню Моя адреса, а потім перетворите його на [більш просунутий] (#part-iii---module-action) модуль інтерфейсу, який робить HTTP-запит до https://api.seeip.org і відображає відповідь - IP-адресу вашого комп'ютера - на новій сторінці в новоствореному розділі меню Моя адреса. Ось як виглядатиме готовий модуль:

Частина I - Новий розділ меню

Додайте порожній модуль до інтерфейсу Zabbix
  1. Створіть каталог MyAddress у каталозі modules вашої інсталяції web-інтерфейсу 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": "Моя зовнішня IP-адреса" }
  1. У інтерфейсі Zabbix перейдіть до розділу Адміністрування → Загальні → Модулі та натисніть кнопку Сканувати каталог.

  1. Знайдіть у списку новий модуль Моя IP-адреса та натисніть гіперпосилання «Дезактивовано», щоб змінити статус модуля з «Дезактивовано» на «Активовано».

Тепер модуль зареєстровано у фронтенді. Однак його ще не видно, тому що вам ще потрібно визначити функціональність модуля. Після того, як ви додасте контент до каталогу модулів, ви одразу побачите зміни у фронтенді Zabbix при оновленні сторінки.

Створення розділу меню
  1. Створіть файл Module.php у каталозі MyAddress.

Цей файл реалізує новий клас Module, який розширює стандартний клас CModule. Клас Module вставить новий розділ меню My Address в головне меню.

Метод setAction() визначає дію, яка буде виконана після натискання на розділ меню. Для початку ви можете скористатися попередньо визначеною дією userprofile.edit, яка відкриє сторінку Профіль користувача. У частині 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((новий CMenuItem(_('My Address')))  ->setAction('userprofile.edit'));  } }

Ви можете замінити «userprofile.edit» іншими діями, наприклад «charts.view» (відкриває користувацькі графіки), «problems.view» (відкриває Моніторинг → Проблеми) або 'report.status' (відкриває звіт Інформація про систему).

  1. Оновіть інтерфейс Zabbix. Тепер у нижній частині головного меню Zabbix є новий розділ Моя адреса. Натисніть Моя адреса, щоб відкрити сторінку Профіль користувача.

Частина II - Зміна розташування розділу меню

У цій частині ви перемістите розділ меню Моя адреса в розділ Моніторинг. У результаті користувачі матимуть доступ до двох сторінок підменю з розділу меню Моніторинг → Моя адреса.

  1. Відкрийте та відредагуйте файл Module.php.

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')  );  } }
  1. Оновіть інтерфейс Zabbix. Розгорніть розділ меню Моніторинг і зверніть увагу, що розділ Моя адреса тепер розташований під розділом Виявлення.

Частина 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(), коли викликається дія. Ця функція відповідає за бізнес-логіку модуля.

Дані повинні бути організовані як асоціативний масив. Масив може бути багатовимірним і може містити будь-які дані, які очікує view.

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 доступна у view без її спеціального визначення. Фреймворк автоматично передає асоціативний масив у view.

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», який містить:
  • ключ дії з назвою дії, написаною малими літерами (a-z) і словами, розділеними крапками (наприклад, my.address);
  • ім'я класу дії (MyAddress) як значення для ключа class об'єкта my.address;
  • ім'я для view дії (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. Відкрийте Module.php і змініть назву дії в методі setAction() на 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')  );  } }
  1. Оновіть інтерфейс Zabbix. Натисніть на розділ меню Моя адреса, щоб побачити IP-адресу вашого комп’ютера.