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

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

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

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

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

Рекомендуем создать обработчик на основе существующего проекта. Чтобы скопировать проект:

  1. Подключитесь к серверу-локации по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  2. Выполните команду:
    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 — для остальных устройств.
Пример наследования от 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)

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

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

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

Может быть полезно