2022 Zabbix中国峰会
2022 Zabbix中国峰会

#动作

动作是一个负责'业务逻辑'的模块。一个动作一般由一个触发器和一个动作视图组成。

模块可以做以下事情:

  • 调用已经在Zabbix前端定义的动作。
  • 通过自定义动作覆盖默认动作。
  • 定义全新的动作。

如果想通过某些自定义行为去覆盖默认动作,请在模块配置中定义具有相同名称的动作。 当调用该动作时,模板动作会被执行,而不是Zabbix默认动作。

动作文档应该存储在actions文件夹中。动作需要被指定在manifest.json

###触发器

动作触发器工作流程:

1)检查HTTP请求中所有传递的参数是有效的: - 调用触发器的checkInput() 方法 - 使用CNewValidator.php定义的验证规则 - 调用 validateInput() 方法

2)检查用户权限 3)根据传输参数去准备数据:如果checkInput()返回trun,Zabbix调用触发器doAction()方法。 4)为视图准备$data数组。使用CControllerResponseDatasetResponse() 方法将响应存储在$data数组。

例子: ````php /** * 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));}````