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

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

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

Pievienojiet tukšu moduli Zabbix lietotāja saskarnei
  1. Izveidojiet direktoriju MyAddress savas Zabbix lietotāja saskarnes instalācijas modules direktorijā (piemēram, zabbix/ui/modules).

  2. Izveidojiet manifest.json failu ar moduļa pamata metadatiem (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 troubleshooting).

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 pievienosiet saturu moduļa direktorijam, pēc lapas atsvaidzināšanas izmaiņas nekavējoties būs redzamas Zabbix lietotāja saskarnē.

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

Šis fails ievieš jaunu Module klasi, kas paplašina noklusējuma CModule klasi. Module klase galvenajā izvēlnē ievietos jaunu My Address izvēlnes sadaļu.

Metode setAction() norāda darbību, kas tiks izpildīta, noklikšķinot uz izvēlnes sadaļas. Sākumā varat izmantot iepriekš definēto darbību userprofile.edit, kas atvērs Lietotāja profils lapu. Šīs pamācības III daļā jūs 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āgotus grafikus), 'problems.view' (atver Uzraudzība → Problēmas), vai 'report.status' (atver Sistēmas informācija atskaiti).

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

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 tai pievienosiet ligzdotu izvēlni. Rezultātā 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ārliecinieties, ka 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ā solī tiek izveidotas divas apakšsadaļas:

  • External IP, kas izpilda jaunu darbību 'my.address', kura tiks definēta nākamajos soļos;
  • 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šējos soļos 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ārliecinieties, ka 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 ir atbildīga par moduļa biznesa loģiku.

Dati ir jāorganizē kā asociatīvs masīvs. Masīvs var būt daudzdimensionāls 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 ir pieejams skatā bez īpašas tā 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 ir 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 ar vārdiem, kas atdalīti ar punktiem (piemēram, my.address);
  • darbības klases nosaukumu (MyAddress) kā vērtību objekta my.address atslēgai class;
  • darbības skata nosaukumu (my.address) kā vērtību objekta my.address atslēgai view.

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 redzētu sava datora IP adresi.