Режим фокусировки

Создание обработчика ИБП

Вы можете добавить в DCImanager 6 собственный обработчик ИБП. Для этого создайте код обработчика и загрузите его в платформу.

Подготовка окружения

Обработчик ИБП должен быть написан на языке Python. Рекомендуем использовать версию Python не ниже 3.9.

Вы можете создать обработчик на основе существующего проекта. Чтобы скопировать проект, подключитесь к серверу-локации DCImanager 6 по SSH и выполните команду: 

docker cp eservice_handler:/opt/ispsystem/equip_handler ./

При создании обработчика могут быть полезны директории проекта:

  • /common — общие вспомогательные классы и функции;
  • /ups_common — вспомогательные классы и функции для работы с ИБП;
  • /ups_common/handlers — обработчики ИБП.

Требуемые библиотеки Python и их версии вы можете посмотреть в файле проекта requirements.txt. Чтобы установить нужные библиотеки, выполните команду: 

pip3 install -r requirements.txt

Для проверки типов данных в проекте рекомендуем использовать анализатор mypy.

Создание обработчика

Класс для работы с ИБП

Класс ИБП наследуется от класса:

  • BaseSnmpUps — для устройств, работающих через протокол SNMP;
  • BaseUps — для остальных устройств.

Класс BaseSnmpUps содержит методы взаимодействия с ИБП по протоколу SNMP:

  • snmp_get — выполнить запрос чтения по определённому OID;
  • snmp_set — выполнить модифицирующий запрос по определённому OID;
  • snmp_walk — выполнить запрос, результатом которого будет список.
Пример описания класса
class ExampleHandlerSnmp(BaseSnmpUps):
    """Example handler class."""

    def __init__(self, ups_data: UpsSnmpData):
        """__init__.

        Args:
            ups_data (UpsSnmpData): ups connection data
        """
        super().__init__(ups_data)

Методы для работы с ИБП

Чтобы DCImanager 6 мог взаимодействовать с ИБП, переопределите методы класса BaseUps:

  • status — опрос ИБП;
  • port_up — включение порта;
  • port_down — выключение порта;
  • statistic — сбор статистики.

Служба работы с оборудованием использует не "сырые" json-данные, а их объектное представление. Экземляры класса UpsView — представление ИБП. Имеет следующие параметры:

  • load_percentage — нагрузка, %;
  • charge_time — заряд, мин;
  • input_power — выходная мощность, кВт;
  • output_power — потребляемая мощность, кВт.

Класс UpsData наследуется от базового класса ConnectionParams и определяет данные для доступа к ИБП.

Каждый файл-обработчик должен содержать функцию make_handler. Эта функция создаёт объект обработчика:

Пример функции
def make_handler(ups_data: UpsData) -> BaseSnmpUps:
    """
    Returns APC UPS handler object
    :param ups_data: Snmp UPS data object
    :return:
    """
    return ApcSnmp(ups_data)

Пример кода обработчика

Пример кода

Загрузка обработчика в платформу

Чтобы загрузить обработчик в платформу:

  1. Создайте директорию со следующей структурой:

    handler_dir/
    ├── __init__.py
    └── my_handler.py
    Пояснения
  2. Создайте архив tar.gz с этой директорией: 

    tar -czvf custom_handler.tar.gz handler_dir
    Пояснения к команде
  3. Авторизуйтесь в 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 — токена авторизации.

  4. Создайте описание для обработчика: 

    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}
  5. Загрузите архив с обработчиком в платформу: 

    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>"
    Пояснения к команде
    Вы также можете использовать эту команду для загрузки новых версий обработчика в платформу.
Может быть полезно