Integration Service Client documentation

Пример реализации клиента для Сервиса Интеграции АРМ Орион Икс.

Использование

Описание

Integration Service Client - это приложение для демонстрации и тестирования возможностей Сервиса Интеграции. Предоставляет примеры работы с методами, поддерживаемыми Сервисом Интеграции, а так же примеры обработки и отображения полученных данных.

Сборка

  1. Установите Python 3.9+, pip

    Для Linux так же требуется установка python3-tk

  2. Установите зависимости

    python -m pip install deps/requirements.txt
    
  3. Сборка исполняемого файла (необязательна, т.к. возможен запуск через интерпретатор):

    python3 -m PyInstaller --onefile \
            --distpath bin_dir \
            --workpath build_dir \
            --name is_client \
            src/main.py \
            src/app_context.py \
            src/gui.py \
            src/requests_data.py \
            src/requests_handler.py \
            src/settings.py \
            src/shared.py
    

Запуск

  1. Запустите исполняемый файл или запустите приложение из директории:

    python main.py
    
    Для работы с типами и связями требуется наличие файла "data/links_description.json"
    (путь относительно исполняемого файла/рабочей директории при запуске через интерпретатор)
    
  2. Введите адрес сервера и нажмите «Старт».

  3. После запуска в директории приложения создается client.log, в который пишутся запросы и ответы сервера.

App Context

Контекст приложения, содержащий параметры GUI и состояние клиента.

Описание

AppContext объединяет элементы интерфейса и состояние для управления взаимодействием с сервером. Он содержит все необходимые виджеты и параметры для работы GUI.

ClientState хранит состояние клиента для управления авторизацией и WebSocket-соединениями, включая токены, nonce и другие параметры сессии.

Классы

class app_context.AppContext(root: Tk, server: str)

Базовые классы: object

Контекст приложения, содержащий параметры GUI и состояние клиента.

Этот класс объединяет элементы интерфейса и состояние для управления взаимодействием с сервером.

root

Главное окно приложения.

Type:

tk.Tk

server_entry

Поле ввода адреса сервера.

Type:

tk.Entry

use_https_var

Флаг использования HTTPS.

Type:

tk.BooleanVar

output_widget

Текстовый виджет для вывода сообщений.

Type:

tk.Text

response_label

Виджет для отображения кода ответа сервера.

Type:

tk.Label

countdown_label

Виджет для отображения таймера.

Type:

tk.Label

stop_button

Кнопка для разрыва соединения и сброса состояния.

Type:

tk.Button

disconnect_button

Кнопка для отключения WebSocket.

Type:

tk.Button

combobox

Выпадающий список для выбора запрашиваемого типа.

Type:

ttk.Combobox

create_combobox

Выпадающий список для выбора создаваемого типа.

Type:

ttk.Combobox

search_combobox

Выпадающий список для выбора типа для поиска.

Type:

ttk.Combobox

computers_combobox

Выпадающий список для выбора comp_id из полученных.

Type:

ttk.Combobox

message_types_combobox

Выпадающий список для выбора типа для получения описания сообщений.

Type:

ttk.Combobox

proto_combobox

Выпадающий список для выбора прототипа для получения его типов.

Type:

ttk.Combobox

events_direction_combobox_combobox

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

Type:

ttk.Combobox

tree

Основная таблица для отображения данных.

Type:

ttk.Treeview

secondary_tree

Дополнительная таблица.

Type:

ttk.Treeview

keep_alive_var

Флаг использования heartbeat.

Type:

tk.BooleanVar

use_pass_phrase_var

Флаг использования pass_phrase.

Type:

tk.BooleanVar

login_entry

Поле ввода логина.

Type:

tk.Entry

password_entry

Поле ввода пароля.

Type:

tk.Entry

pass_phrase_entry

Поле ввода pass_phrase.

Type:

tk.Entry

messages_cache

Кэш: {type: {action: description}}.

Type:

Optional[Dict[str, Dict[int, Dict[str, Any]]]]

commands_info

Хранит {«type»: str, «id»: str} для списка команд.

Type:

Optional[Dict[str, str]]

elements_data

Данные поддерживаемых типов (загружаются из JSON).

Type:

Dict[str, Any]

cert_path

Путь к SSL-сертификату.

Type:

str

cert_path_var

Путь к SSL-сертификату.

Type:

str

cert_label

Виджет для отображения имени SSL-сертификата.

Type:

tk.Label

server

Адрес сервера по умолчанию.

Type:

str

state

Объект состояния клиента.

Type:

ClientState

__init__(root: Tk, server: str)

Инициализирует контекст приложения.

Параметры:
  • root (tk.Tk) – Главное окно приложения.

  • server (str) – Адрес сервера по умолчанию.

get_server() str

Возвращает адрес сервера из поля ввода или значение по умолчанию.

Результат:

Адрес сервера (например, „localhost:6659“).

Тип результата:

str

get_use_https() bool

Возвращает состояние флага HTTPS.

Результат:

True, если HTTPS вкл, иначе False.

Тип результата:

bool

load_certificate()
class app_context.ClientState

Базовые классы: object

Хранит состояние клиента для управления авторизацией и WebSocket-соединениями.

nonce

Уникальный идентификатор для авторизации, полученный при старте.

Type:

Optional[str]

token

Токен сессии, используемый для аутентификации запросов, полученный при логине.

Type:

Optional[str]

events_channel

Канал событий для WebSocket-соединения, полученный при логине.

Type:

Optional[str]

primary_type

Основной тип данных, выбранный для запросов в главной таблице.

Type:

Optional[str]

secondary_type

Вторичный тип данных, выбранный для запросов в дополнительной таблице.

Type:

Optional[str]

connection_timer

Идентификатор таймера.

Type:

Optional[int]

countdown_timer

Идентификатор таймера.

Type:

Optional[int]

active_websockets

Список активных WebSocket-соединений.

Type:

List[websocket.WebSocketApp]

request_id

Счетчик для id запросов.

Type:

Optional[int]

client_private_key

Приватный ключ клиента.

Type:

RSAPrivateKey

client_public_key

Публичный ключ клиента.

Type:

RSAPublicKey

server_public_key

Публичный ключ сервера.

Type:

RSAPublicKey

login_completed

Флаг выполнения логина.

Type:

Bool

__init__()

Инициализирует состояние клиента с пустыми значениями.

clear_nonce() None

Очищает значение nonce.

Используется для сброса nonce после истечения времени, заданного в NONCE_LIFETIME.

next_request_id() int

Генерирует следующий уникальный id запроса.

Requests Handler

Обработчик запросов к серверу и WebSocket.

Описание

Модуль requests_handler содержит всю логику взаимодействия с сервером через HTTP/HTTPS и WebSocket соединения. Он обрабатывает все типы запросов, управляет авторизацией и обновляет интерфейс в соответствии с полученными данными.

Функции

requests_handler.start_request(context: AppContext, user: str) None

Выполняет стартовый запрос для получения nonce и ключа сервера.

Выполняется генерация ключей и HMAC-подписи, обработка ответа сервера. nonce и server_public_key сохраняются в context. Перед выполнением запроса предыдущие значения удаляются.

  1. Генерирует RSA-ключи клиента (2048)

  2. Формирует public_key в PEM-формате

  3. Вычисляет HMAC-подпись (если используется pass_phrase)

  4. Отправляет запрос с user, public_key, signature

  5. Обрабатывает ответ: расшифровывает server_public_key_b64 и сохраняет его

Параметры:
  • context (AppContext) – Контекст приложения.

  • user (str) – Логин пользователя.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.login_request(context: AppContext, password: str) None

Выполняет запрос авторизации для получения token и events_channel.

  1. Шифрует пароль и кодирует в Base64

  2. Отправляет запрос с nonce и зашифрованным паролем

  3. Сохраняет token и events_channel из ответа

token и events_channel сохраняются в context. После окончания времени жизни token выполняется renew_connection().

Параметры:

context (AppContext) – Контекст приложения. password (str): Пароль пользователя.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.renew_connection(context: AppContext) None

Поддерживает соединение с сервером через периодический heartbeat.

При ответе сервера True соединение продлевается на SESSION_LIFETIME, затем снова вызывается renew_connection().

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.send_request(context: AppContext, request_body: Dict[str, Any] | List[Dict[str, Any]], show_elapsed_time: bool = True, table_widget: Treeview | None = None) Response | List[Response]

Отправляет HTTP/HTTPS-запрос к серверу и возвращает ответ. Поддерживает batch.

В Python библиотека requests сама заботится о сборке чанков (chunks) и возвращает полное тело ответа. В зависимости от реализации, может потребоваться собирать чанки.

Параметры:
  • context (AppContext) – Контекст приложения, содержащий настройки и состояние клиента.

  • request_body (Dict[str, Any] | List[Dict[str,Any]]) – Тело запроса в формате JSON-RPC. Один запрос (dict) или batch (lists of dicts).

  • show_elapsed_time (bool, optional) – Выводить ли время выполнения запроса. Defaults to True.

  • table_widget (ttk.Treeview, optional) – Очищать ли таблицу. Defaults to None.

Результат:

Ответ сервера.

Тип результата:

requests.Response

Исключение:

requests.RequestException – Если произошла ошибка соединения с сервером.

Примеры

>>> send_request(context, {"method": "start", "params": {"user": "root"}}, True)
requests_handler.process_response(response: Response, context: AppContext, table_widget: Treeview | None = None, return_full_batch: bool = False) Dict[str, Any] | List[Dict[str, Any]]

Обрабатывает ответ сервера и обновляет интерфейс.

Параметры:
  • response (requests.Response) – Ответ сервера на HTTP/HTTPS-запрос.

  • context (AppContext) – Контекст приложения.

  • table_widget (ttk.Treeview, optional) – Таблица для отображения данных. Defaults to None.

  • return_full_batch (bool) – Если True и batch - в возвращаемом списке полные тела ответов.

Результат:

Распарсенные данные ответа или пустой словарь при ошибке.

Тип результата:

Dict[str, Any] | List[Dict[str, Any]]

Примеры

>>> process_response(response, context, context.tree)

Элементы

requests_handler.create_element(context: AppContext, element_type: str, name: str, additional_params: List[Dict[str, Any]] = None) None

Создает элемент под корневым узлом.

Отправляет запрос на создание элемента с указанным типом и именем непосредственно под корневым.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип создаваемого элемента.

  • name (str) – Имя создаваемого элемента.

  • additional_params (List[Dict[str, Any]]) – Параметры для доп.таблиц. Default to None.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.create_child_element(context: AppContext, element_type: str, link_type: str, link_id: str, name: str, additional_params: List[Dict[str, Any]] = None) None

Создает дочерний элемент.

Отправляет запрос на создание элемента с указанным типом, именем и связью с родительским элементом. Обновляет таблицу, если в ней выведен данный тип.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип создаваемого элемента.

  • link_type (str) – Тип родительского элемента.

  • link_id (str) – id родительского элемента.

  • name (str) – Имя создаваемого элемента.

  • additional_params (List[Dict[str, Any]]) – Параметры для доп.таблиц. Default to None.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.delete_element_request(context: AppContext, element_id: str, current_type: str) None

Удаляет элемент по типу и id.

После получения ответа проверяется, что 200, выводится подтверждение, удаляется строка из таблицы, если загружен данный тип.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_id (str) – Идентификатор элемента.

  • current_type (str) – Тип элемента.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.update_element(context: AppContext, element_type: str, element_id: str, name: str, field_name: str, field_value: str) None

Обновление значения выбранного поля

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента.

  • element_id (str) – id элемента.

  • name (str) – Имя элемента.

  • field_name (str) – Ключ изменяемого значения.

  • field_value (str) – Новое значение.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_all_elements_request(context: AppContext) None

Запрашивает все экземпляры выбранного типа.

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_element_request(context: AppContext, element_id: str, current_type: str, action: str | None = None) None

Запрашивает данные элемента по его id.

Выводит данные в дополнительную таблицу.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_id (str) – Идентификатор элемента.

  • current_type (str) – Тип элемента.

  • action (str, optional) – Action из сообщения WebSocket. Default to None.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_elements_by_request(context: AppContext, element_id: str, linked_type: str, is_left: bool, current_type: str) None

Запрашивает элементы, связанные с выбранным.

Выводит данные в дополнительную таблицу.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_id (str) – Идентификатор исходного элемента.

  • linked_type (str) – Тип запрашиваемых элементов.

  • is_left (bool) – Направление связи (left или right).

  • current_type (str) – Тип исходного элемента.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_elements_by_comp_id_request(context: AppContext) None

Запрашивает все экземпляры выбранного типа для указанного comp_id.

Дублирует get_all_requests(), в запросе отличается значение «method» и в «params» добавляется «comp_id».

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

Связи

Создание связи между двумя элементами.

Параметры:
  • context (AppContext) – Контекст приложения.

  • left_type (str) – Тип главного элемента.

  • left_id (str) – id главного элемента.

  • right_type (str) – Тип привязываемого элемента.

  • right_id (str) – id привязываемого элемента.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

Удаление связи между двумя элементами.

Практически полностью дублирует create_link().

Параметры:
  • context (AppContext) – Контекст приложения.

  • left_type (str) – Тип главного элемента.

  • left_id (str) – id главного элемента.

  • right_type (str) – Тип привязываемого элемента.

  • right_id (str) – id привязываемого элемента.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

Поиск

requests_handler.find_elements_by_name(context: AppContext, element_type: str, name: str, case_insensitive: bool, exact: bool) None

Поиск элементов по имени.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента, поиск которого выполняется.

  • name (str) – Значение, по которому выполняется поиск.

  • case_insensitive (bool) – Учитывать регистр.

  • exact (bool) – Точное совпадение всего значения поля.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.find_elements_by_param_s(context: AppContext, element_type: str, param_name: str, param_value: str, additional: bool, case_insensitive: bool, exact: bool) None

Поиск элементов по строковому параметру.

Поиск выполняется по строке в указанном параметре для указанного типа.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента, поиск которого выполняется.

  • param_name (str) – Название поля, в котором выполняется поиск.

  • param_value (str) – Значение, по которому выполняется поиск.

  • additional (bool) – Выполнять поиск в доп. таблицах.

  • case_insensitive (bool) – Учитывать регистр.

  • exact (bool) – Точное совпадение всего значения поля.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.find_elements_by_param_i(context: AppContext, element_type: str, param_name: str, param_value: str, additional: bool, case_insensitive: bool, exact: bool) None

Поиск элементов по числовому параметру.

Поиск выполняется по числу в указанном параметре для указанного типа.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента, поиск которого выполняется.

  • param_name (str) – Название поля, в котором выполняется поиск.

  • param_value (str) – Значение, по которому выполняется поиск.

  • additional (bool) – Выполнять поиск в доп. таблицах.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.find_elements_by_any_param_s(context: AppContext, element_type: str, param_value: str, additional: bool, case_insensitive: bool, exact: bool) None

Поиск элементов по строковому параметру в любом поле.

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

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента, поиск которого выполняется.

  • param_value (str) – Значение, по которому выполняется поиск.

  • additional (bool) – Выполнять поиск в доп. таблицах.

  • case_insensitive (bool) – Учитывать регистр.

  • exact (bool) – Точное совпадение всего значения поля.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.find_elements_by_additional_param_s(context: AppContext, element_type: str, additional_param_value: str, case_insensitive: bool, exact: bool) None

Поиск элементов по строковому параметру в доп.таблице.

Поиск пользователя по его ключу. Для расширения возможностей нужно будет добавить параметры, т.к. в запросе передается имя доп.таблицы и имя параметра, в котором производится поиск.

Параметры:
  • context (AppContext) – Контекст приложения.

  • element_type (str) – Тип элемента, поиск которого выполняется.

  • additional_param_value (str) – Значение, по которому выполняется поиск.

  • case_insensitive (bool) – Учитывать регистр.

  • exact (bool) – Точное совпадение всего значения поля.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

WebSocket

requests_handler.connect_websocket(context: AppContext) None

Устанавливает соединение с WebSocket.

Параметры:

context (AppContext) – Контекст приложения.

requests_handler.disconnect_websocket(context: AppContext) None

Закрывает активное WebSocket-соединение.

Параметры:

context (AppContext) – Контекст приложения.

requests_handler.on_right_click(context: AppContext, event: Event, table_widget: Treeview) None

Обрабатывает правый клик по таблице, открывая контекстное меню.

Формирует команды меню на основе типа данных таблицы. Если context.state.primary_type не установлен, пытается взять тип из колонки „device_type“ выделенной строки. Возможные действия: получение элемента, создание/удаление связей, изменение значений, удаление, отправка команд.

Параметры:
  • context (AppContext) – Контекст приложения.

  • event (tk.Event) – Событие клика мыши.

  • table_widget (ttk.Treeview) – Таблица, на которой произошло событие.

Вспомогательные функции

requests_handler.get_computers(context: AppContext) None

Получение списка компьютеров.

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_events(context: AppContext, date_time: str, count: str) None

Получение списка событий.

Параметры:
  • context (AppContext) – Контекст приложения.

  • date_time (str) – Дата и время поиска событий.

  • count (str) – Количество событий.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_events_with_desc(context: AppContext, date_time: str, count: str) None

Получает список событий и добавляет описания из кэша.

Параметры:
  • context (AppContext) – Контекст приложения.

  • date_time (str) – Дата и время поиска событий.

  • count (str) – Количество событий.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_messages_desc(context: AppContext) None

Запрашивает описания сообщений для выбранного типа.

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_messages_desc_for_cache(context: AppContext, type_name: str) List[Dict[str, Any]]

Запрашивает описания сообщений для выбранного типа.

Параметры:
  • context (AppContext) – Контекст приложения.

  • type_name (str) – Тип для запроса.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

Результат:

Список описаний сообщений.

Тип результата:

List[Dict[str, Any]]

requests_handler.get_types_by_tag(context: AppContext) None

Запрашивает все типы, входящие в указанный прототип (tag).

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.get_types_by_tag_for_cache(context: AppContext) List[str]

Получает и возвращает список типов по прототипу orion_device.

Параметры:

context (AppContext) – Контекст приложения.

Исключение:

requests.RequestException – При ошибке соединения с сервером.

Результат:

Список типов.

Тип результата:

List[str]

requests_handler.get_custom_request(context: AppContext, request_type: str) None

Выполняет запрос, определенный в request_type.

Параметры:
  • context (AppContext) – Контекст приложения.

  • request_type (str) – Тип запроса (например, „incident_types“).

Исключение:

requests.RequestException – При ошибке соединения с сервером.

requests_handler.build_messages_cache(context: AppContext) None

Создает кэш описаний сообщений для всех типов.

  1. Получает список типов для прототипа orion_device, используя get_types_by_tag_for_cache.

  2. К полученному списку добавляет типы, отображаемые в комбобоксе (возможно, достаточно только их)

  3. Для каждого типа запрашивается описание и сохраняется в context.messages_cache.

Параметры:

context (AppContext) – Контекст приложения.

requests_handler.create_with_name(context: AppContext, create_func: Callable, *args, **kwargs) None

Вспомогательная функция для создания элемента с проверкой имени.

Параметры:
  • context (AppContext) – Контекст приложения.

  • create_func (Callable) – Функция создания (create_element или create_child_element)

  • *args – Позиционные аргументы для create_func.

  • **kwargs – Именованные аргументы для create_func.

requests_handler.update_field(context: AppContext, table_widget: Treeview, element_id: str, field_name: str, element_type: str) None

Открывает окно для ввода нового значения поля и обновляет строку в таблице.

Параметры:
  • context (AppContext) – Контекст приложения.

  • table_widget (ttk.Treeview) – Таблица.

  • element_id (str) – id выбранного элемента.

  • field_name (str) – Ключ изменяемого значения.

  • element_type (str) – Тип элемента.

Requests Data

Определения тел запросов в формате JSON-RPC.

Описание

Модуль requests_data содержит все предопределенные тела запросов в формате JSON-RPC, используемые в приложении. Каждая константа представляет собой готовое тело запроса, которое может быть отправлено на сервер.

Константы

Авторизация

requests_data.START_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'start', 'params': {'public_key': '', 'signature': '', 'user': None, 'version': '1.0'}}

Тело запроса для авторизации и получения token и events_channel.

requests_data.LOGIN_REQUEST_BODY = {'id': 2, 'jsonrpc': '2.0', 'method': 'login', 'params': {'encrypted_password_b64': None, 'nonce': None}}

Тело запроса для продления сессии (heartbeat).

requests_data.RENEW_CONNECTION_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'renew_connection', 'params': {'security': {'token': None, 'type': 'user'}}}

Тело запроса для получения списка компьютеров.

Элементы

requests_data.CREATE_ELEMENT_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'create_element', 'params': {'additional_params': [], 'name': 'Главный Отдел Станции Ракетных Катеров', 'params': {}, 'security': {'token': None}, 'type': 'department'}}

Тело запроса для создания дочернего элемента.

Тело запроса для удаления элемента.

requests_data.DELETE_ELEMENT_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'delete_element', 'params': {'id': '36adda5d-3556-4ac0-a980-8a1bc0d667bc', 'security': {'token': None}, 'type': 'user'}}

Тело запроса для изменения данных элемента.

requests_data.UPDATE_ELEMENT_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'update_element', 'params': {'additional_params': [], 'id': '36adda5d-3556-4ac0-a980-8a1bc0d667bc', 'name': 'Леди Баг и Супер Кот 2', 'params': {}, 'security': {'token': None}, 'type': 'user'}}

Тело запроса для создания связи между двумя элементами.

requests_data.GET_ELEMENT_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_element', 'params': {'id': None, 'security': {'token': None}, 'type': 'user'}}

Тело запроса для получения элементов указанного типа, связанных с выбранным.

requests_data.GET_ELEMENTS_REQUEST_BODY = {'id': None, 'jsonrpc': '2.0', 'method': 'get_elements', 'params': {'security': {'token': None}, 'type': 'user'}}

Тело запроса для получения всех элементов указанного типа для указанного comp_id.

requests_data.GET_COMPUTER_ELEMENTS_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_computer_elements', 'params': {'comp_id': '8cab1d51-9d91-4336-badc-2a9b97ea8b96', 'security': {'token': None}, 'type': 'user'}}

Тело запроса для получения элемента указанного типа по его id.

Связи

Тело запроса для удаления связи между двумя элементами.

Тело запроса для поиска элемента по значению (число) указанного параметра для указанного типа.

Поиск

requests_data.FIND_ELEMENTS_BY_NAME_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'find_elements_by_name', 'params': {'case_insensitive': True, 'exact': True, 'name': 'Пользователь tt 1 ', 'security': {'token': None}, 'type': 'user'}}

Тело запроса для поиска элемента по значению в доп.таблице (по ключу).

requests_data.FIND_ELEMENTS_BY_PARAM_S_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'find_elements_by_param_s', 'params': {'additional': True, 'case_insensitive': False, 'exact': False, 'param_name': 'key_code', 'param_value': '523', 'security': {'token': None}, 'type': 'user'}}

Тело запроса для поиска элемента по значению (строка) во всех параметрах для указанного типа.

requests_data.FIND_ELEMENTS_BY_PARAM_I_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'find_elements_by_param_i', 'params': {'additional': True, 'param_name': 'status', 'param_value': 4, 'security': {'token': None}, 'type': 'user'}}

Тело запроса для поиска элемента по значению (строка) указанного параметра для указанного типа.

requests_data.FIND_ELEMENTS_BY_ANY_PARAM_S_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'find_elements_by_any_param_s', 'params': {'additional': True, 'case_insensitive': False, 'exact': False, 'param_value': '523', 'security': {'token': None}, 'type': 'user'}}

Тело запроса для поиска элемента по его имени.

requests_data.FIND_ELEMENTS_BY_ADDITIONAL_PARAM_S_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'find_elements_by_additional_param_s', 'params': {'additional_param_name': 'key_code', 'additional_param_value': '523', 'additional_params_name': 'keys', 'case_insensitive': True, 'exact': False, 'security': {'token': None}, 'type': 'user'}}

Тело запроса для получения списка типов по прототипу.

Вспомогательные

requests_data.GET_COMPUTERS_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_computers', 'params': {'security': {'token': None}}}

Тело запроса для получения всех элементов указанного типа.

requests_data.GET_EVENTS_REQUEST_BODY = {'id': 4, 'jsonrpc': '2.0', 'method': 'get_events', 'params': {'count': 100500, 'date_time': '2025-05-04T00:00:00.0000000Z', 'direction': '+', 'security': {'token': None}}}

Тело запроса для получения списка возможных команд для указанного элемента.

requests_data.GET_MESSAGES_DESC_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_messages_desc', 'params': {'security': {'token': None}, 'type': 'user'}}

Тело запроса для создания элемента под корневым.

requests_data.GET_MESSAGE_GROUPS_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_message_groups', 'params': {'security': {'token': None}}}

Тело запроса для получения списка описаний сообщений.

requests_data.GET_INCIDENT_TYPES_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'get_incident_types', 'params': {'security': {'token': None}}}

Тело запроса для получения списка групп сообщений.

requests_data.GET_TYPES_BY_TAG_REQUEST_BODY = {'id': 1, 'jsonrpc': '2.0', 'method': 'types_by_tag', 'params': {'security': {'token': None}, 'tag': 'orion_device'}}

Тело запроса для получения списка событий.

Settings

Конфигурационные константы приложения.

Описание

Модуль settings определяет все конфигурационные константы приложения, включая: - настройки по умолчанию для подключения к серверу - временные параметры для управления сессией и авторизацией - пути к конфигурационным файлам - параметры повторных попыток и буферизации

Временные параметры

settings.NONCE_LIFETIME = 30

int([x]) -> integer int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by „+“ or „-“ and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int(„0b100“, base=0) 4

settings.TOKEN_LIFETIME = 62

int([x]) -> integer int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by „+“ or „-“ and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int(„0b100“, base=0) 4

settings.SESSION_LIFETIME = 30

int([x]) -> integer int(x, base=10) -> integer

Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.

If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by „+“ or „-“ and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int(„0b100“, base=0) 4

Пути к файлам

str(object=““) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to „strict“.

GUI

Графический интерфейс приложения.

Описание

Модуль gui содержит всю логику создания и управления графическим интерфейсом приложения. Он создает главное окно, все необходимые виджеты и настраивает их взаимодействие.

Функция create_gui() является точкой входа для создания интерфейса и принимает контекст приложения для доступа к всем необходимым параметрам и состоянию.

Основные функции

gui.create_gui(context: AppContext)

Создает графический интерфейс.

Параметры:

context (AppContext) – Контекст приложения.

Shared

Дополнительная логика (не относится к обработке запросов).

Описание

Модуль shared содержит общую логику, которая используется различными частями приложения, но не относится напрямую к обработке сетевых запросов. Включает функции работы с интерфейсом, управления состоянием и вспомогательные утилиты.

Функции интерфейса

shared.copy_selected_cell(root: Tk, event: Event, tree: Treeview) None

Копирует выделенную ячейку в буфер обмена

Параметры:
  • root (tk.Tk) – Главный виджет.

  • event – (tk.Event): Событие (Double-Button-1).

  • tree – (ttk.Treeview): Таблица, на которой произошло событие.

shared.copy_selection(root: Tk, event: Event, tree: Treeview) None

Копирует выделенные строки таблицы в буфер обмена.

Параметры:
  • root (tk.Tk) – Главный виджет.

  • event – (tk.Event): Событие (Control-c).

  • tree – (ttk.Treeview): Таблица, на которой произошло событие.

shared.sort_table(tree: Treeview, col: str, reverse: bool) None

Сортирует таблицу при клике на заголовок.

Параметры:
  • tree (ttk.Treeview) – Виджет таблицы.

  • col (str) – Колонка для сортировки.

  • reverse (bool) – Направление сортировки (True - по убыванию).

shared.update_table(table_widget: Treeview, items: List[Dict[str, Any]], various_types: bool = False) None

Заполняет таблицу данными из JSON.

Параметры:
  • table_widget (ttk.Treeview) – Виджет таблицы.

  • items (List[Dict[str, Any]]) – Данные для вывода.

  • various_types (bool) – Если True - то выводятся только name и type (т.к. у разных типов - разные поля)

shared.update_table_row(tree: Treeview, data: Dict[str, Any], action: str) None

Обновляет запись в таблице в зависимости от действия.

Параметры:
  • tree (ttk.Treeview) – Таблица для обновления.

  • data (Dict[str, Any]) – Данные элемента (должны содержать „id“)

  • action (str) – Действие: „create“, „update“, „delete“.

Вспомогательные диалоги

shared.get_element_name(root: Tk) str | None

Отображает модальное окно для ввода имени элемента.

Параметры:

root (tk.Tk) – Главное окно приложения.

Результат:

Введенное имя или None при отмене ввода.

Тип результата:

Optional[str]

shared.get_field_value(root: Tk, field_name: str) str | None

Отображает окно для ввода нового значения поля.

Параметры:
  • root (tk.Tk) – Главное окно приложения.

  • field_name (str) – Имя изменяемого поля.

Результат:

Новое значение или None при отмене.

Тип результата:

Optional[str]

shared.get_additional_params(root: Tk, initial_values: dict = None) List[Dict[str, Any]] | None

Выводит окно для ввода параметров для доп.таблиц и возвращает данные или None при отмене.

Параметры:
  • root (tk.Tk) – Главное окно приложения.

  • initial_values (dict, optional) – Начальные значения для редактирования.

Результат:

Введенное имя или None при отмене ввода.

Тип результата:

Optional[List[Dict[str]]]

Управление состоянием

shared.update_output(text: str, output_widget: Text) None

Добавяет текст в виджет вывода и прокручивает его.

Параметры:
  • text (str) – Текст для вывода.

  • output_widget (tk.Text) – Виджет вывода текста.

shared.update_status(status_code: int | None, status_label: Label) None

Выводит код ответа в статус-бар.

Параметры:
  • status_code (Optional[int]) – Код ответа сервера.

  • status_label (tk.Label) – Виджет статус-бара.

shared.start_countdown(timeout: int, timeout_message: str, countdown_label: Label, root: Tk, output_widget: Text, context) None

Запускает обратный отсчет.

Параметры:
  • timeout (int) – Устанавливаемое время таймера.

  • timeout_message (str) – Сообщение для отображения в виджете вывода текста.

  • countdown_label (tk.Label) – Виджет таймера.

  • root (tk.Tk) – Главный виджет.

  • output_widget (tk.Text) – Виджет вывода текста.

shared.on_disconnect(countdown_label: Label) None

Обрабатывает разрыв соединения.

Параметры:

countdown_label (tk.Label) – Виджет таймера.

Вспомогательные функции

shared.load_elements(file_path: str = 'jbi/links_description.json') Dict[str, Any]

Загружает данные из JSON-файла с описанием связей.

Параметры:

file_path (str) – Путь к JSON. Defaults to «jbi/links_description.json».

shared.normalize_server_url(server: str, use_https: bool)

Добавляет http:// или https:// к адресу.

Параметры:
  • server (str) – Адрес сервера.

  • use_https (bool) – Флаг использования HTTPS.

Main

Точка входа в приложение.

Описание

Модуль main содержит точку входа в приложение. Функция main() инициализирует контекст приложения, создает графический интерфейс и запускает основной цикл приложения.