Create a module (tutorial)

Šī ir soli pa solim apmācība, kurā parādīts, kā izveidot vienkāršu Zabbix lietotāja saskarnes moduli. Jūs varat lejupielādēt visus šī moduļa failus kā ZIP arhīvu: MyAddress.zip.

Ko jūs izveidosiet

Šajā pamācībā vispirms izveidosiet lietotāja saskarnes moduli, kas pievieno jaunu izvēlnes sadaļu Mana adrese, un pēc tam pārveidosiet to par uzlabotāku lietotāja saskarnes moduli, kas veic HTTP pieprasījumu uz https://api.seeip.org un jaunā lapā tikko izveidotajā izvēlnes sadaļā Mana adrese parāda atbildi — jūsu datora IP adresi. Lūk, kā izskatīsies pabeigtais modulis:

I daļa — Jauna izvēlnes sadaļa

Tukša moduļa pievienošana Zabbix lietotāja saskarnei
  1. Izveidojiet direktoriju MyAddress sava Zabbix lietotāja saskarnes instalācijas modules direktorijā (piemēram, zabbix/ui/modules).

  2. Izveidojiet failu manifest.json ar moduļa pamatmetadatiem (skatiet atbalstīto parametru aprakstu).

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 lietotāja saskarnē atveriet sadaļu Administration > General > Modules un noklikšķiniet uz pogas Scan directory.

  1. Sarakstā atrodiet jauno moduli My IP Address un noklikšķiniet uz hipersaites "Disabled", lai mainītu moduļa statusu no "Disabled" uz "Enabled" (ja modulis nav norādīts sarakstā, skatiet sadaļu problēmu novēršana).

Modulis tagad ir reģistrēts lietotāja saskarnē. Tomēr tas vēl nav redzams, jo jums joprojām ir jādefinē moduļa funkcionalitāte. Kad moduļa direktorijam pievienosiet saturu, pēc lapas atsvaidzināšanas Zabbix lietotāja saskarnē izmaiņas būs redzamas nekavējoties.

Izveidot izvēlnes sadaļu
  1. Izveidojiet failu Module.php direktorijā MyAddress.

Šajā failā tiek implementēta jauna Module klase, kas paplašina noklusējuma CModule klasi. Klase Module galvenajā izvēlnē ievietos jaunu sadaļu My Address.

Metode setAction() norāda darbību, kas jāizpilda, noklikšķinot uz izvēlnes sadaļas. Sākumā varat izmantot iepriekš definēto darbību userprofile.edit, kas atvērs lapu User profile. Šīs pamācības III daļā uzzināsiet, kā izveidot pielāgotu darbību.

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'));
    }
}

Varat aizstāt 'userprofile.edit' ar citām darbībām, piemēram, 'charts.view' (atver pielāgotās diagrammas), 'problems.view' (atver Monitoring > Problems) vai 'report.status' (atver pārskatu System information).

  1. Atsvaidziniet Zabbix lietotāja saskarni. Tagad Zabbix galvenās izvēlnes apakšdaļā ir pieejama jauna sadaļa My Address. Noklikšķiniet uz My Address, lai atvērtu lapu User profile.

II daļa — Izvēlnes sadaļas atrašanās vietas maiņa

Šajā daļā jūs pārvietosiet izvēlnes sadaļu My Address uz sadaļu Monitoring un pēc tam pievienosiet tai ligzdotu izvēlni. Tādējādi lietotāji varēs piekļūt divām apakšizvēlnes lapām no izvēlnes sadaļas Monitoring > My Address.

  1. Atveriet un rediģējiet failu 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. Atsvaidziniet Zabbix lietotāja saskarni. Izvērsiet izvēlnes sadaļu Monitoring un pārbaudiet, vai sadaļa My address tagad atrodas zem sadaļas Discovery.

  1. Lai izvēlnes sadaļai My Address pievienotu ligzdotas lapas, vēlreiz atveriet un rediģējiet failu Module.php.

Šajā darbībā tiek izveidotas divas apakšsadaļas:

  • External IP, kas izpilda jaunu darbību my.address, kura tiks definēta nākamajās darbībās;
  • User profile, kas izpilda iepriekš definēto darbību userprofile.edit, lai atvērtu lapu User profile.

Ņemiet vērā, ka ligzdotajai izvēlnei papildus iepriekšējās darbībās izmantotajām klasēm ir jāizmanto arī klase 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. Atsvaidziniet Zabbix lietotāja saskarni. Pārbaudiet, vai izvēlnes sadaļā My address tagad ir trešā līmeņa izvēlne ar divām lapām — External IP un User profile.

III daļa - Moduļa darbība

Darbība tiek ieviesta divos failos - actions/MyAddress.php un views/my.address.php. Fails actions/MyAddress.php nodrošina biznesa loģikas ieviešanu, savukārt fails views/my.address.php ir atbildīgs par skatu.

  1. Izveidojiet direktoriju actions direktorijā MyAddress.

  2. Izveidojiet failu MyAddress.php direktorijā actions.

Darbības loģika tiks definēta klasē MyAddress. Šī darbības klase ieviesīs četras funkcijas: init(), checkInput(), checkPermissions() un doAction(). Zabbix lietotāja saskarne izsauc funkciju doAction(), kad tiek pieprasīta darbība. Šī funkcija nodrošina moduļa biznesa loģiku.

Dati jāorganizē kā asociatīvs masīvs. Masīvs var būt daudzdimensiju un var saturēt jebkādus datus, ko sagaida skats.

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. Izveidojiet jaunu direktoriju views direktorijā MyAddress.

  2. Izveidojiet failu my.address.php direktorijā views un definējiet moduļa skatu.

Ņemiet vērā, ka mainīgais $data skatā ir pieejams bez tā īpašas definēšanas. Ietvars automātiski nodod asociatīvo masīvu skatam.

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. Moduļa darbība jāreģistrē failā manifest.json. Atveriet manifest.json un pievienojiet jaunu objektu actions, kas satur:
  • darbības atslēgu ar darbības nosaukumu, kas rakstīts ar mazajiem burtiem (a-z), un vārdiem, kas atdalīti ar punktiem (piemēram, my.address);
  • darbības klases nosaukumu (MyAddress) kā my.address objekta atslēgas class vērtību;
  • darbības skata nosaukumu (my.address) kā my.address objekta atslēgas view vērtību.

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. Atsvaidziniet Zabbix lietotāja saskarni. Noklikšķiniet uz My address > External IP, lai skatītu sava datora IP adresi.