Delphi→ Мониторинг аварий ACiD Lite

Ноя 11, 2010


Есть такая замечательная программа — Equipment Manager от Orange System, которая является OSS/BSS (система поддержки операционной и бизнес деятельности операторов связи). Она содержит систему мониторинга, которую я и попытался воспроизвести в своем примере.

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

  • Прямое обращение к базе
  • Получение файлов по TCP

Чтобы снизить нагрузку на БД воспользуемся вторым вариантом.

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

Первым делом перехватим пакеты между EQM и сервером, и узнаем, что там интересного. Перехват данных был осуществлен с помощью удобного и бесплатного снифера — SmartSniff.


В перехваченных данных было не совсем то, что я ожидал. Все пакеты присылались в какой-то шифровке. Хорошо, что в пойманных пакетах, четко отслеживалось начало и конец закодированных данных. Эти данные были успешно сохранены в файл, после чего начались эксперименты.

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

Данных действительно было много, порядка 20 Мбайт в расшифрованном виде. Поэтому, чтобы осуществлять удобный поиск, необходимо занести их в базу данных. Наиболее подходящим компонентом для этих целей оказался SQLite. Как было описано в предыдущем посте, благодаря транзакциям удалось увеличить скорость выполнения запросов в БД.


В итоге, программа должна выполнять следующие этапы для получения данных:

1. Получение данных по TCP
2. Декомпрессия данных
3. Занесение данных в БД

Все эти этапы, было решено завернуть в отдельный компонент — EQMClass.
Это действительно удобно!

Получение данных реализовал через ранее описанный модуль WinTCP, т.к. штатные компоненты не отвечали требованиям. А скинирование было сделано с помощью QuickSlide.


Что я извлек из данного проекта? Классы — это круто!
Практически вся программа была собрана из ранее созданных модулей.

При тестировании программы, были обнаружены утечки памяти — за 20 минут работы программы, её объем в оперативной памяти увеличивался почти в 10 раз.

Но это уже история другой статьи…

Похожие статьи:

  1. Мониторинг очереди Asterisk
  2. Напоминалка RemindSave

Добавить комментарий

Ваш адрес email не будет опубликован.