Aktionen (Actions)

Aktionen sind für die 'Geschäftslogik' des Moduls verantwortlich. Eine Aktion besteht in der Regel aus einem controller und einer action view.

Ein Modul kann:

  • Aktionen aufrufen, die bereits im Zabbix-Frontend definiert sind.
  • Standardaktionen mit eigenen Aktionen überschreiben.
  • Völlig neue Aktionen definieren.

Um das Verhalten einer Standardaktion durch ein benutzerdefiniertes Verhalten zu überschreiben, definieren Sie eine Aktion mit demselben Namen in der Modulkonfiguration. Wenn die Aktion aufgerufen wird, wird die Modulaktion anstelle der Standardaktion von Zabbix ausgeführt.

Aktionsdateien sollten im Ordner actions gespeichert werden. Die Aktionen müssen in der manifest.json angegeben werden.

Controller

Workflow des Action-Controllers:

  1. Prüfen Sie, dass alle in einer HTTP-Anfrage übergebenen Parameter gültig sind:

    • Rufen Sie die Methode checkInput() des Controllers auf;
    • Verwenden Sie die in CNewValidator.php definierten Validierungsregeln;
    • Rufen Sie die Methode validateInput() auf.
  2. Prüfen Sie die Benutzerberechtigungen.

  3. Bereiten Sie die Daten gemäß den übergebenen Parametern vor: Wenn checkInput() true zurückgibt, ruft Zabbix die Methode doAction() des Controllers auf.

  4. Bereiten Sie das Array $data für die Ansicht vor. Verwenden Sie CControllerResponseData und die Methode setResponse(), um die Antwort im Array $data zu speichern.

Beispiel:

/**
 * Validate input parameters.
 *
 * @return bool
 */
protected function checkInput(): bool {
    $ret = $this->validateInput([
        'status' => 'in '.implode(',', [HOST_STATUS_MONITORED, HOST_STATUS_NOT_MONITORED])
    ]);

    if (!$ret) {
        $this->setResponse(new CControllerResponseFatal());
    }

    return $ret;
}

/**
 * Check user permissions.
 *
 * @return bool
 */
protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}

/**
 * Execute action and generate response object.
 */
protected function do Action(): void {
    $data = [ 
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];

    $this->setResponse(new CControllerResponseData($data));
}

Sie können die vollständige Liste der verfügbaren Controller-Klassen im Zabbix-Quellcode einsehen.