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

Ноя 11, 2010

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

Видимо разработчики этого программного продукта, кстати не совсем дешевого, совсем забыли о многопоточности. Любая попытка прикоснуться к EQM, во время обновления журнала аварий (каждые 15 секунд), на несколько минут превращала окна программы в белые квадраты. Работать с Equipment Manager таким образом было не выносимо, так как основной функцией, которой пользуется наш отдел, это функция мониторинга, т.е. отображение списка адресов, на которых произошли аварии (нет ответа ICMP на пинг).

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


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

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

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


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

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

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

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


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

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

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

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

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