Вы можете добавить в DCImanager 6 собственный обработчик оборудования СХД. Для этого создайте код обработчика и загрузите его в платформу.
Подготовка окружения
Обработчик СХД должен быть написан на языке Python. Рекомендуем использовать версию Python 3.9.
Рекомендуем создать обработчик на основе существующего проекта. Чтобы скопировать проект:
- Подключитесь к серверу-локации по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Выполните команду:
docker cp eservice_handler:/opt/ispsystem/equip_handler ./
При создании обработчика могут быть полезны директории проекта:
- /common — общие вспомогательные классы и функции;
- /dss_common — вспомогательные классы и функции для работы с оборудованием СХД.
Требуемые библиотеки Python и их версии вы можете посмотреть в файле проекта requirements.txt. Чтобы установить нужные библиотеки, выполните команду:
pip3 install -r requirements.txtДля проверки типов данных в проекте рекомендуем использовать анализатор mypy .
Создание обработчика
Наследование
Класс обработчика СХД наследуется от класса:
- BaseSnmpDSS — для устройств, которые работают через протокол SNMP;
- BaseHttpDSS — для устройств, которые работают через протокол HTTP;
- BaseDSS — для остальных устройств.
class ExampleHandlerDss(BaseDss):
"""Example handler class for DSS."""
def __init__(self, dss_data: DssData):
"""__init__.
Args:
dss_data (DssData): DSS connection data
"""
super().__init__(dss_data)
self.__logger = get_logger("example_handler_dss")Чтобы получить данные для подключения к СХД, используйте метод self.dss_data:
handler = make_handler(dss_data, custom_params)
logger.info(handler.dss_data.snmp_params)
logger.info(handler.dss_data.device_type)Методы для работы с СХД
Чтобы платформа могла получать данные от СХД и работать с ней, переопределите метод get_metrics:
class ExampleHandlerDss(BaseSnmpDss):
def get_metrics(self) -> DssMetricsView:
"""Returns DSS metrics."""
start_timestamp = int(datetime.datetime.now().timestamp() * 1_000)
metrics = DssMetricsView(start_timestamp)
# Логика сбора метрик
return metricsЧтобы DCImanager 6 могла собирать метрики с оборудования СХД, используйте методы базового класса для одного из типа опросов:
- BaseSnmp:
- snmp_walk;
- snmp_bulkwalk;
- snmp_get;
- snmp_set;
- snmp_set_multiple.
- BaseHttp:
- get;
- post.
Интерфейсы описаны в базовых классах BaseSnmpDSS и BaseHtmlDSS.
Функция создания обработчика
Каждый файл-обработчик должен содержать функцию make_handler. Эта функция создаёт объект обработчика:
def make_handler(dss_data: DssData) -> "ExampleHandlerDss":
"""Create DSS handler object.
Args:
dss_data (DssData): DSS connection data for selected protocol.
Returns:
BaseDss: Initialized DSS handler object
"""
return ExampleHandlerDss(dss_data)Загрузка обработчика на платформу
Чтобы загрузить обработчик в платформу:
-
Создайте директорию со следующей структурой:
handler_dir/ ├── __init__.py └── my_handler.pyПояснения -
Создайте архив tar.gz с этой директорией:
tar -czvf custom_handler.tar.gz handler_dirПояснения к команде -
Авторизуйтесь в DCImanager 6 с правами администратора:
curl -o- -k https://example.com/api/auth/v4/public/token \ -H "isp-box-instance: true" \ -d '{ "email": "<admin_email>", "password": "<admin_pass>" }'Пояснения к командеВ ответ придёт сообщение вида:
{"id":"24","token":"24-cee181d2-ccaa-4b64-a229-234aa7a25db6"}Сохраните из полученного ответа значение параметра token — токена авторизации.
-
Создайте описание для обработчика:
curl -o- -k https://example.com/api/eservice/v3/custom_equipment \ -H "isp-box-instance: true" \ -H "x-xsrf-token: <token>" \ -d '{ "device_type": "<device>", "handler": "<internal_handler_name>", "name": "<handler_name>", "protocol": ["<handler_protocol>"], "features": [] }'Пояснения к командеОтвет будет содержать id созданного разработчика. Сохраните это значение.
Пример ответа{"id": 1} -
Загрузите архив с обработчиком в платформу:
curl -o- -k https://example.com/api/eservice/v3/custom_equipment/<handler_id>/content \ -H "isp-box-instance: true" \ -H "x-xsrf-token: <token>" \ -F "data=@custom_handler.tar.gz" \ -F "handler_import=<import_path>"Пояснения к командеВы также можете использовать эту команду для загрузки новых версий обработчика в платформу.
Связанные статьи: