konstantinkotov/zabbix-api-package

用于舒适地与 Zabbix API 系统一起工作的解决方案

1.0.0 2024-06-08 16:04 UTC

This package is auto-updated.

Last update: 2024-09-08 16:37:05 UTC


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);