Парсер сообщений ДЦ "Тракт"

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

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


Подробнее о ДЦ "Тракт"

Программа является кроссплатформенной и была протестирована на 32-х и 64-х битных версиях ОС Linux с ядрами 2.4.x (версия 0.4 не проверялась на данном ядре и, скорее всего, не будет работать), 2.6.x, 3.2.x и ОС Windows версии XP и 7.
Сборка программы осуществляется на ОС Linux, посредством кросскомпилятора mingw и компилятора gcc.
Для сборки необходимы: компилятор, make, autotools, glibc, gnulib.

Из особенностей отмечу:

  • Для конфигурации программа использует INI файлы. Используется модифицированный парсер с Google.code.
  • Программа для настройки имеет собственный язык с переменными, функциями, условными конструкциями и подобием циклов.
    Для реализации этого строится синтаксическое дерево. Интерпретатор реализован вручную, без использования генераторов.
    Фактически, программа - попытка написания универсального преобразователя данных с минимальной ориентацией на специфику конкретной области.
    Вследствие этого программа имеет достаточно высокую степень настраиваемости.
  • Программа имеет русский и английский интерфейс на обеих операционных системах.
    Корректность кодировки для консоли Windows обеспечивается через внешний iconv.
    Существует возможность использовать стандартные средства перевода на другие языки.
  • Существует несколько настраиваемых источников ввода и вывода: сеть (UDP), файл и стандартный ввод/вывод/вывод ошибок.
  • Вывод программы возможно сохранять в разных форматах (plain, raw, CSV) и имеется возможность их добавления.
  • Имеется возможность выполнять пользовательские действия по событиям.
  • В действия возможно подставлять переменные из сообщения, вызвавшего срабатывание фильтра

Описание работы

Сообщения поступают на вход программы, затем разбираются, в соответствии с описанием, и выводятся на указанный пользователем вывод.

Обработка сообщений

Шлюзы ДЦ "Тракт" посылают большое составное сообщение, собранное из сообщений, принятых шлюзами от машин линейных пунктов.
Составное сообщение имеет заголовок общего формата (Ebilock-950) и тело, состоящее из простых сообщений. После создания составного сообщения, шлюз рассылает его на широковещательный адрес в данной подсети по UDP протоколу. По умолчанию, для рассылки основных сообщений используется порт 7001.

Программа, вызванная без опций, пытается загрузить файл описания метаданных по умолчанию и файл описания станций. Если загрузка прошла успешно, парсер читает данные из указанных источников ввода и, при получении сообщения, выводит его на стандартный вывод в человекочитаемом виде. Обработка производится до нажатия пользователем сочетания клавиш Ctrl+C.

Если приходит составное сообщение, программа выводит заголовок составного сообщения и отображает заголовки и содержание всех простых сообщений, входящих в составное.
Если приходит простое сообщение, программа просто отображает его заголовок и содержание.

Определение типа сообщения и его структуры производится, используя метаданные сообщения, загружаемые из файла описания метаданных, при старте программы. По умолчанию это файл conf/ru/messages.ini.

Соответствие адресов станций их именам, отображаемым в заголовке сообщения, загружается из файла описания станций.
По умолчанию это файл conf/ru/stations.ini.

Настройка программы

Все настройки хранятся в каталоге conf. Файлы настроек представляют собой обычные INI файлы. Файл config.ini содержит ссылки на прочие файлы настроек:

  • header_file - файл с полями заголовка.
  • messages_file - файл с описаниями сообщений.
  • stations_file - файл с соответствиями адресов станций их именам.
  • filters_file - файл с фильтрами.

Также в нём содержатся прочие опции, например источник ввода по умолчанию и формат вывода. Более подробно всё описано непосредственно в самом файле config.ini.

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

Пользователю может потребоваться настройка фильтров, которые по умолчанию содержатся в файле filters.ini. Фильтр представляет собой условия, которые необходимы для его активации, приёмник обработанных данных и действия, которые будут выполнены, если сообщение подходит под фильтр.

Сам фильтр описывается секцией в INI-файле. Например:

;------------------------------------------------------------------------------
[filter]

msg_type = 0x0504
expr = type == 0x41
action = system, echo %% %type %$msg_descr LEN: "%length" > /dev/stderr
from = network, 10.30.1.255:7001
;------------------------------------------------------------------------------

Здесь:

  • msg_type - тип сообщения для которого применяется фильтр. Он обязателен.
  • expr - выражение в C стиле. Если его результат равен нулю (ложен), фильтр не применяется.
    Если выражение отсутствует, считается, что оно всегда истинно.
  • from - источник ввода сообщения. Если сообщение пришло из другого источника, фильтр не применяется.
    Если источник не указан, под фильтр подходит сообщение из любого источника, соответствующее выражению.
  • action - действие, которое будет выполнено.

Прочие опции расписаны в заголовке filters.ini.

В выражении возможно использовать поля сообщения и заголовка. Все они описаны в messages.ini и header.ini, соответственно.

Источник ввода начинается с ключевого слова file, network или stdin. За ним, после запятой указываются параметры источника: имя файла для file, адрес:порт для network.

Для поля action существует два типа действий: system и message. Тип message реализован не полностью. На Windows он покажет окно с сообщением. Но, на данный момент, некорректно поддерживается кодировка. Тип system используется для запуска программы с передачей ей параметров. Параметрами могут быть поля сообщения и заголовка, имена которых идут после символа '%'.

Изменить источник ввода по умолчанию возможно либо в файле config.ini, либо с помощью параметра командной строки -f, например:
./sparser -f"file, raw_data"

Вызвать справку по параметрам командной строки возможно, используя ключ -h:
./sparser -h

Программа с исходными кодами

Размер: 3.5Mb
Загрузить
Исходные коды на github.com

Маленькая программа для посылки сообщений из файла по UDP

Размер: 12Kb
Загрузить

CD со шлюзами ДЦ "Тракт"

Система развёртывания шлюзов диспетчерской централизации "Тракт" предназначена для обеспечения быстрого развёртывания программной части шлюза ДЦ "Тракт".
Система представляет собой загрузочный CD, с операционной системой QNX 4.25.

Задачи системы:

  • Сохранение образа шлюза.
  • Восстановление образа шлюза.
  • Проведение настраиваемой установки ПО шлюзов диспетчерской централизации "Тракт".
  • Проверка работоспособности дисков, файловой системы и оперативной памяти.
  • Восстановление работоспособности операционной системы шлюза вручную.


Подробнее о ДЦ "Тракт"

Общие сведения

Диск содержит полноценную QNX 4.25. Вы можете пользоваться диском через меню или переключиться на другую консоль (Ctrl+Alt+цифра) и войти под пользователем root или под пользователем user, без пароля. После выполнения входа вам будет доступна консоль ОС QNX.

Состав инструментария диска

В состав диска, помимо ОС, входят следующие компоненты:
  • Сценарий проверки системы: /usr/bin/checker.
    Выводит меню, используя которое, возможно проверить поверхность дисков, файловую систему и оперативную память.
  • Сценарий установки ПО шлюзов ДЦ "Тракт": /etc/trakt_gate_setup.
    Данные шлюзов содержатся в /mnt/cdrom/gates. Они включают архив с ОС QNX 4.25, устанавливаемой на шлюзы и архивы с описанием шлюзов.
  • Тестер оперативной памяти, адаптированный для QNX 4.25. /usr/bin/memtester.
  • Редакторы Vi (elvis), med, qed, mcedit.
  • Оболочка Mishell Commander (для запуска - nc).
  • Оболочка Midnight Commander (для запуска - mc).
  • Архиваторы unrar, zip, gzip, bzip2, lzma, pax (с эмуляцией tar и cpio), архиватор freeze/melt.
  • Утилита mkisofs для создания ISO.
  • TCP/IP стек, также включающий основные сетевые утилиты.
  • Руссификатор и шрифты для кодировок cp866 и koi8-r: /etc/config/cfont/rus.
  • Переключатель раскладок ruskey.
  • Программы проверки связи:
    • /usr/bin/cd_check — проверка несущей.
    • /usr/ucb/ping — пинг.
    • /usr/bin/net_check — проверка работоспособности сети на модемах.
    • /usr/bin/net_check_tty и net_tty_check — проверка работоспособности токовой петли.
    • /usr/bin/remnode_check — проверка удаленного узла.
  • Сценарии для соединения через модем и токовую петлю: /usr/bin/connect_k1, /usr/bin/connect_tty.
  • Утилиты получения сведений об аппаратуре.

Структура диска

На CD содержатся:
  • Загрузочная ОС QNX с инструментарием.
  • Архив с операционной системой шлюза (он не зависит от ОС диска).
  • Образы шлюзов, сохранённые пользователем.
  • Сценарий для сохранения настроек шлюзов.
  • Некоторые отдельные драйвера для шлюза.
  • Архив с исходными кодами, позволяющий создать диск с нуля.
  • Руководство по диску и справочные материалы, в которых есть более подробное описание функций.
  • Сохранение образа шлюза

    Диск содержит сценарий, упрощающий снятие настроек с работающих шлюзов. Выключение шлюза для этого не требуется.
    Конфигурационные файлы сохраняются отдельно в сжатых tar архивах. Помимо конфигурационных файлов, сохраняются автоматически формируемые файлы с описанием, которые находятся вне архива.
    Конфигурации шлюзов хранятся на CD, что позволяет пользователю легко добавить их в ISO образ и перезаписать диск с новыми конфигурациями.

    Установка шлюза

    Шлюз возможно установить в двух режимах:
    • Простом - шлюз будет развёрнут из сохранённого образа.
    • Расширенном - будет запущен оригинальный скрипт установки. Подходит для новых шлюзов.

    В любом случае, установка имеет систему меню, проводящую пользователя через весь процесс.
    После установки предлагается сохранить настройки на дискету (не всё оборудование имеет USB).
    Сохранённые настройки нового шлюза также возможно добавить в ISO и, записав новый диск, иметь возможность устанавливать данный шлюз быстрым способом.
    После установки быстрым способом также возможно вручную внести коррективы в установленный шлюз. Затем, установка предложит сохранить настройки.

ISO образ загрузочного CD

Размер: 38Mb
Загрузить

Отдельно архив для сборки CD (под QNX)

Размер: 23Mb
Загрузить

Несколько фотографий с дороги

Несколько своих и чужих фотографий с прошлого места работы. Авторские права не соблюдены, потому что авторов найти не удалось.