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, dass alle in einer HTTP-Anfrage übergebenen Parameter gültig sind:

    • Die Methode checkInput() des Controllers aufrufen;
    • Die in CNewValidator.php definierten Validierungsregeln verwenden;
    • Die Methode validateInput() aufrufen.
  2. Benutzerberechtigungen prüfen.

  3. Die Daten entsprechend den übergebenen Parametern vorbereiten: Wenn checkInput() true zurückgibt, ruft Zabbix die Methode doAction() des Controllers auf.

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

Beispiel:

/**
 * Eingabeparameter validieren.
 *
 * @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;
}

/**
 * Benutzerberechtigungen prüfen.
 *
 * @return bool
 */
protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}

/**
 * Action ausführen und Antwortobjekt erzeugen.
 */
protected function do Action(): void {
    $data = [ 
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];

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

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