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 раз.

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

Post to Twitter

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

  1. Мониторинг очереди Asterisk

Комментарии (9)

  1. avatar

    Сергей
    Ноябрь 29th, 2010 at 12:04 #

    Не совсем понял зачем нужно заносить данные в базу данных.
    Насколько я понимаю данные и так находядся там или нет?

  2. avatar

    GlooK
    Ноябрь 29th, 2010 at 12:56 #

    Исходные данные, это строки и столбцы, разделенные запятой.
    Данные выглядят примерно так:

    D-Link, 10.102.0.10, ставрапольская 4, 300
    D-Link, 10.102.0.11, ставрапольская 5, 350

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

    Еще один нюанс, каждый раз программа получает новую порцию данных — эти данные должны заменять некоторые строки имеющихся данных. Как-то так.

  3. avatar

    Сергей
    Ноябрь 29th, 2010 at 13:01 #

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

  4. avatar

    GlooK
    Ноябрь 29th, 2010 at 13:23 #

    Просто доступ к этой базе мне никто не даст т.к. программа писалась для себя, а не для работодателя.

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

  5. avatar

    Сергей
    Ноябрь 29th, 2010 at 17:44 #

    Кстати, часом не в *выпилено* работаете? В городе *выпилено*?

  6. avatar

    GlooK
    Ноябрь 29th, 2010 at 19:14 #

    Вы раскрыли все мои карты) Откуда узнали?

  7. avatar

    Сергей
    Ноябрь 29th, 2010 at 19:57 #

    Уж больно знакомые названия улиц :)

  8. avatar

    utvorog
    Декабрь 16th, 2010 at 15:20 #

    Вообще, SQLLite вовсе не предназначен для обработки данных даже среднего объема, не то что большого. Даже MySQL уже после нескольких десятков принятых файлов позволит гораздо быстрее работать с полученной базо

  9. avatar

    utvorog
    Декабрь 16th, 2010 at 15:20 #

    базой данных
    Да и не только с одного компьютера…

Ваш комментарий

Rambler's Top100 Яндекс.Метрика