пятница, 18 марта 2011 г.

Опыт внедрения EurekaLog

Недавно наша компания приобрела лицензию на библиотеку EurekaLog (далее – EL). Что это такое, наверное Вы уже знаете, а если не знаете – то самое время поинтересоваться этим

Этот пост я решил написать, чтобы обозначить проблемы, с которыми я столкнулся, при внедрении библиотеки. И в первую очередь адресую его GunSmoker’у.

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

  • база данных (на Oracle) и всё что с ней связано;
  • серверные скрипты и утилиты, работающие на стороне БД;
  • клиентские приложения (Delphi).

И вот клиентских приложений у нас аж девять штук. Для поддержания жизнедеятельности этих приложений у нас:

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

Итак, задача, которую я себе поставил, состояла в следующем:

  1. Разместить исходники библиотеки EL в SVN.
  2. Настроить makefile таким образом, чтобы сервер сборки приложений мог собирать приложения с EL без установки EL родной инсталляшкой.
  3. Настроить проекты (напомню, их много), чтобы все они компилировались с одинаковыми настройками EL.

Первое, что мне не понравилось, так это то, что на сайте для скачивания доступна лишь инсталляшка, которая при установке лишь спрашивает конечный каталог для сохранения всех файлов. Я был немного удивлён, что нет отдельного архива с исходниками. Ну ладно, мелочь, установил. Скопировал все установленные исходники в отдельный каталог и деинсталлировал. Разобрался как, установить EL ручками. Нужно мне это для того, чтобы программисты наши могли просто обновившись из SVN продолжить работу, а не скачивать отдельно дистрибутив и ещё устанавливать его.

Дальше – лучше. EL умная библиотека, и при активации самой себя в настройках delphi-проекта правит главный файл проекта (.dpr для Delphi7), добавляя себя в uses. Это с одной стороны очень удобно. Более того, EL умеет добавлять себя в uses не в самое начало, а после FastMM4, например. Это очень даже здорово. Только есть одно но. Напомню, что у нас проектов много. И мы используем набор библиотек, типа FastMM4, VCLFixPack и т.п. И чтобы при включении/исключении подобных библиотек не править каждый dpr-файл, у нас выделен отдельный модуль… назовём его ProjectAddons.pas. Этот модуль есть во всех проектах и стоит на первом месте. И именно в uses ProjectAddons.pas я планировал включить модуль ExceptionLog. Ну ладно, исходники есть (я всегда при покупке библиотек выбираю версию с исходниками), отключить автодобавление – дело техники. Правда это уже не красиво, лезть в исходник сторонней библиотеки…

Ещё раз я столкнулся с автодобавлением в uses уже при запуске скрипта сборки приложений вне IDE Delphi. Но тут тоже дело техники, достаточно перекомпилировать ecc32.exe.

Третий момент. Настройки EL сохраняются вместе с настройками проекта (в cfg-файл для Delphi7 и ранее). Это вполне логичное решение. Для сборки приложения вне IDE (используя ecc32), есть возможность указания отдельного файла с настройками, что тоже вполне оправдано. В итоге, достаточно настроить EL один раз, сохранить настройки в отдельный файл, и сервер сборки будет выкладывать файлы проектов с одинаковыми настройками. Однако на компьютерах разработчиков, при компиляции приложений из IDE, настройки подхватываются не оттуда. Опять же, проблема синхронизации – надо отслеживать девять (по числу приложений) файлов настроек. Именно этот момент я хочу предложить разработчикам EurekaLog реализовать по другому, а именно: в cfg-файле проекта хранить не все настройки EL, а только лишь ссылку на файл с настройками EL.

Ну и последний момент, который вынудил меня внести ещё две маленькие правки в исходный текст библиотеки. У нас для регистрации проблем и ошибок используется система баг-треккинга mantis. Поэтому EL я настроил так, чтобы отчёт об ошибках отсылался в mantis. И вот тут небольшая несуразица. В терминологии мантиса – у нас один Проект, просто приложений несколько. Когда пользователи добавляют вопросы в Проект, они указывают (при необходимости) приложение в отдельное поле. И вот настроить EL так, чтобы при создании вопроса в мантисе можно было указать приложение – оказалось не возможным, по причине того, что приложения в мантисе выбираются из выпадающего списка, а названия в этом списке не совсем совпадают с названиями приложений. Простое решение, которое пришло в голову – это скорректировать заголовок создаваемого вопроса. Т.е. вместо “[v<версия приложения> – <кол-во>]” я сделал так, чтобы подставлялось “[<название приложения> v<версия приложения> – <кол-во>]”. Жалко, что для этого нет отдельной настройки в EL.

 

В общем, потратил я на всё это дело какое-то время. Плюс повозился с тонкой настройкой обработки конкретных исключений. Пришлось ещё раз проявить хитрость, из-за особенности использования некоторых потоков, которые запускаются по WaitFor, и дублируют Exception, который не обработался потоком…

 

P.S.: Несмотря на некоторые трудности, с которыми я столкнулся при внедрении EurekaLog, на сегодня, наверное, нет лучшего помощника для отлавливания ошибок. Must Have.

6 коммент.:

GunSmoker комментирует...

Николай, в EurekaLog есть событие CustomWebFieldsRequest - в нём можно сформировать все дополнительные поля, которые нужно отправить в Mantis.

Николай Зверев комментирует...

Да, есть (спасибо, я раздел справки с описанием событий изучил). Но я, написав так:
"приложения в мантисе выбираются из выпадающего списка, а названия в этом списке не совсем совпадают с названиями приложений", имел ввиду следующее: это поле в нашем мантисе заведено, во-первых, числовым (подставляется ссылка на справочник приложений), во-вторых, сам справочник приложений заведён криво. А в третьих, т.к. у нас несколько Проектов (не приложений для Проекта о котором я писал), то это доп. поле не выведено в сводку вопросов, т.е. чтобы увидеть приложение, всё равно надо открывать вопрос. Это, конечно, мелочи, но когда с ними работаешь каждый день...

Алексей Тимохин комментирует...

>Первое, что мне не понравилось, так это то, что на сайте для скачивания доступна лишь инсталляшка, которая при установке лишь спрашивает конечный каталог для сохранения всех файлов. Я был немного удивлён, что нет отдельного архива с исходниками.

Мне тоже не нравится, когда нельзя просто скачать исходники. Очень многие библиотеки грешат этим.

И тоже обычно сначала устанавливаю такие дистрибутивы, в какую-нибудь левую папку, потом копирую содержимое этой папки и делаю uninstall. Особенно неприятно, когда при деинсталле такие библиотеки оставляют за собой какие-нибудь скомпилированные файлы, в пути добавленном в Library Path.

Впрочем, с теми либами, с которыми работаешь постоянно уже свыкаешься с таким поведением.

Алексей Тимохин комментирует...

Николай, если не секрет, что представляет собой ваш сервер сборки?

Николай Зверев комментирует...

Да ничего особенного он из себя не представляет. Просто сервер (виндовый), на котором по заданию запускается bat-скрипт, который проверяет, надо ли делать сборку конкретного приложения (сравниваются ревизии из SVN) и если надо - запускается другой bat-скрипт, который работает с упомянутым в заметке makefile.

Sergey комментирует...

а как отправлять сообщения из EurekaLog на GitHub ?

Отправить комментарий

.

.