konstantinkotov / zabbix-api-package
用于舒适地与 Zabbix API 系统一起工作的解决方案
Requires
- php: ^8.1
Requires (Dev)
- orchestra/testbench: ^9.0
README
本包用于在 Telecloud 生态系统中的 Zabbix API 系统中舒适地工作。
安装
通过 Composer
包安装
composer require konstantinkotov/zabbix-api-package
包设置
php artisan zabbix:install
.env 参数
ZABBIX_BASE_POINT=<zabbix base endpoint>
ZABBIX_API_KEY=<zabbix api key>
如何使用
所有请求都接受实现 HasBuildInterface 接口的类的填充实例。除了
主要对象:类 HostDirector、类 HostGroupParamsBuilder、类 TriggerParamsBuilder、类 TemplateParamsBuilder
支持对象:类 HostGroupBuilder、类 HostTemplateBuilder、类 HostInterfacesBuilder
附加对象:枚举 HostField、枚举 HostGroupField、枚举 TriggerField、枚举 TriggerPriority、枚举 TriggerValue、枚举 TriggerStatus、枚举 TriggerState
主机
获取
首先,您需要创建一个主机导演并设置必要的过滤器。所有过滤器字段您可以在 Enum HostField 中找到。然后,您必须发起一个请求。例如
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostDirector;
use Konstantinkotov\ZabbixApiPackage\Enums\Hosts\HostField;
$hostIds = [<your_first_host_id>, <your_second_host_id>, ...];
$hostDirector = new HostDirector();
$hostDirector->addFilter([
HostField::HOST_ID->value => $hostIds,
HostField::NAME->value => <your_necessary_host_name>,
"<necessary_field_name>" => "<necessary_field_value>",
...
]);
$hostDirector->addFilter([HostField::HOST_ID->value => $hostIds]);
$hostDirector->addFilter([HostField::NAME->value => <searchable_host_name>]);
array|stdClass $response = ZabbixService::hosts()->get($hostDirector, ?bool $associative);
创建
首先,您需要创建所有必要的构建器并发起请求,包括所有构建器到主机导演并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostInterfacesBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostGroupBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostTemplateBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostDirector;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$hostInterfaceBuilder = new HostInterfacesBuilder();
$hostInterfaceBuilder->setType();
$hostInterfaceBuilder->setMain();
$hostInterfaceBuilder->setUseIp();
$hostInterfaceBuilder->setIp(<your_server_ip>);
$hostInterfaceBuilder->setDns();
$hostInterfaceBuilder->setPort();
$hostInterfaceBuilder->setInterfaceRef(<?your_host_interface>);
$hostGroupBuilder = new HostGroupBuilder();
$hostGroupBuilder->setGroupId(<your_group_id>);
$hostTemplateBuilder = new HostTemplateBuilder();
$hostTemplateBuilder->setTemplateId(<your_template_id>);
$hostDirector = new HostDirector();
$hostDirector->setHostName(<your_host_name>);
$hostDirector->setInterfaces($hostInterfaceBuilder);
$hostDirector->setGroups($hostGroupBuilder);
$hostDirector->setTemplates($hostTemplateBuilder);
array|stdClass $response = ZabbixService::hosts()->create($hostDirector);
更新
首先,您需要使用必要的数据数组创建一个主机导演,并设置所需的可变主机 ID。您可以在 Enum HostField 中找到可用字段,然后发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostDirector;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
use Konstantinkotov\ZabbixApiPackage\Enums\Hosts\HostField;
use Konstantinkotov\ZabbixApiPackage\Enums\Hosts\HostStatus;
$hostDirector = new HostDirector();
$hostDirector->addParams([
HostField::HOST_ID->value => <your_mutable_host_id>,
HostField::NAME->value => <your_new_host_name>,
HostField::STATUS->value => HostStatus::ENABLED,
"<necessary_field_name>" => "<necessary_field_value>",
...
]);
array|stdClass $response = ZabbixService::hosts()->update($hostDirector);
删除
首先,您需要创建一个主机导演,设置所需的过滤器,并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\HostDirector;
use Konstantinkotov\ZabbixApiPackage\Enums\Hosts\HostField;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$hostDirector = new HostDirector();
$hostDirector->addFilter([HostField::HOST_ID->value => <your_host_id>]);
array|stdClass $response = ZabbixService::hosts()->delete($hostDirector);
主机组
获取
您可以创建一个主机组参数构建器并发起请求。您也可以不使用组参数构建器发起请求。例如(使用 GroupParamsBuilder 实例)
use Konstantinkotov\ZabbixApiPackage\Builders\Hosts\Groups\HostGroupParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Enums\Hosts\Groups\HostGroupField;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$hostGroupParamsBuilder = new HostGroupParamsBuilder();
$hostGroupParamsBuilder->addOutput(HostGroupField::NAME);
$hostGroupParamsBuilder->addOutput(HostGroupField::FLAGS);
...
array|stdClass $response = ZabbixService::hosts()->groups()->get($hostGroupParamsBuilder, ?bool $associative);
触发器
获取
您必须创建一个触发器参数构建器,设置必要的参数并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Triggers\TriggerParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Enums\Triggers\TriggerField;
use Konstantinkotov\ZabbixApiPackage\Enums\Triggers\TriggerPriority;
use Konstantinkotov\ZabbixApiPackage\Enums\Triggers\TriggerValue;
use Konstantinkotov\ZabbixApiPackage\Enums\Triggers\TriggerStatus;
use Konstantinkotov\ZabbixApiPackage\Enums\Triggers\TriggerState;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$triggerParamsBuilder = new TriggerParamsBuilder();
$triggerParamsBuilder->addHostId(<your_first_host_id>);
$triggerParamsBuilder->addHostId(<your_second_host_id>);
...
$priorities = [TriggerPriority::HIGH, TriggerPriority::DISASTER];
$filterArray = [
TriggerField::PRIORITY->value => $priorities,
TriggerField::VALUE->value => TriggerValue::HAS_PROBLEM,
TriggerField::STATUS->value => TriggerStatus::ENABLED,
TriggerField::STATE->value => TriggerState::UNKNOWN,
"<necessary_field_name>" => "<necessary_field_value>",
...
];
$triggerParamsBuilder->addFilter($filterArray);
$triggerParamsBuilder->addFilter([TriggerField::VALUE->value => TriggerValue::OK]);
$triggerParamsBuilder->addFilter([TriggerField::STATUS->value => TriggerStatus::ENABLED]);
...
$triggerParamsBuilder->setSortField(TriggerField::PRIORITY);
$triggerParamsBuilder->setSortOrder('DESC'|'ASC');
array|stdClass $response = ZabbixService::triggers()->get($triggerParamsBuilder, ?bool $associative);
模板
获取
您必须创建一个模板参数构建器,设置必要的参数并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Templates\TemplateParamsBuilder;
use \Konstantinkotov\ZabbixApiPackage\Enums\Templates\TemplateField;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$templateParamsBuilder = new TemplateParamsBuilder();
$templateParamsBuilder->addOutput(TemplateField::HOST);
$templateParamsBuilder->addOutput(TemplateField::TEMPLATE_ID);
...
array|stdClass $response = ZabbixService::templates()->get($templateParamsBuilder, ?bool $associative);
项目
获取
您必须创建一个项目参数构建器,设置必要的参数并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Items\ItemParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Enums\Items\ItemField;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$itemParamsBuilder = new ItemParamsBuilder();
$itemParamsBuilder->addOutput(ItemField::HOST);
$itemParamsBuilder->addOutput(ItemField::NAME);
...
$itemParamsBuilder->addFilter([ItemField::HOST_ID => <your_host_id>]);
...
$itemParamsBuilder->addFilter([ItemField::NAME => [<interface_fullname>, ...]]);
...
array|stdClass $response = ZabbixService::items()->get($itemParamsBuilder, ?bool $associative);
仪表板
获取
您必须创建一个仪表板参数构建器,设置必要的参数并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Dashboards\DashboardParamsBuilder
use Konstantinkotov\ZabbixApiPackage\Enums\Dashboards\DashboardField;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$dashboardParamsBuilder = new DashboardParamsBuilder();
$dashboardParamsBuilder->addOutput(DashboardField::NAME);
$dashboardParamsBuilder->addOutput(DashboardField::DASHBOARD_ID);
...
$dashboardParamsBuilder->addFilter([DashboardField::DASHBOARD_ID]);
$dashboardParamsBuilder->addFilter([DashboardField::SELECT_PAGES => [DashboardField::WIDGETS]]);
...
array|stdClass $response = ZabbixService::dashboard()->get($dashboardParamsBuilder, ?bool $associative);
更新
首先,您需要创建一个仪表板参数构建器,设置仪表板 ID,创建一个页面参数构建器,设置仪表板 ID,添加所有必要的组件,并发起请求。例如
use Konstantinkotov\ZabbixApiPackage\Builders\Dashboards\DashboardParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Dashboards\Pages\PageParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Dashboards\Pages\Widgets\WidgetParamsBuilder;
use Konstantinkotov\ZabbixApiPackage\Builders\Dashboards\Pages\Widgets\WidgetFieldItemBuilder;
use Konstantinkotov\ZabbixApiPackage\Enums\Dashboards\DashboardField;
use Konstantinkotov\ZabbixApiPackage\Enums\Dashboards\Widgets\WidgetType;
use Konstantinkotov\ZabbixApiPackage\Enums\Dashboards\Widgets\WidgetFieldItemType;
use Konstantinkotov\ZabbixApiPackage\ZabbixService;
$dashboardParamsBuilder = new DashboardParamsBuilder();
$dashboardParamsBuilder->setDashboardId(<your_dashboard_id>);
$pageParamsBuilder = new PageParamsBuilder();
$pageParamsBuilder->setDashboardPageId(<your_dashboard_pageid>);
$pageParamsBuilder->setWidgets(array<WidgetParamsBuilder::class>);
// or you can create a new widget
$widgetParamsBuilder = new WidgetParamsBuilder();
$widgetParamsBuilder->setName(<your_widget_name>);
$widgetParamsBuilder->setType(WidgetType::SVG_GRAPH);
$widgetParamsBuilder->setPositionX(<?your_X_coordinates>);
$widgetParamsBuilder->setPositionY(<?your_Y_coordinates>);
$widgetParamsBuilder->setWidth(<your_widget_width>);
$widgetParamsBuilder->setHeight(<your_widget_height>);
$widgetFieldItemBuilder = new WidgetFieldItemBuilder();
$widgetFieldItemBuilder->setType(WidgetFieldItemType::STRING);
$widgetFieldItemBuilder->setName(<your_widget_field_name>);
$widgetFieldItemBuilder->setValue(<your_widget_field_value>);
$widgetParamsBuilder->addField($widgetFieldItemBuilder);
$pageParamsBuilder->addWidget($widgetParamsBuilder);
...
$dashboardParamsBuilder->setPages($pageParamsBuilder);
array|stdClass $response = ZabbixService::dashboard()->update($dashboardParamsBuilder, ?bool $associative);