Redmine. Настраиваем jabber-оповещения за 5 минут

    Redmine – прекрасная система для управления проектами и отслеживания ошибок. Однако (из моего личного опыта использования), она не способна выстроить в работающем коллективе самоорганизующуюся систему контроля ошибок. Разработчики бывают слишком заняты для того, чтобы отслеживать все комментарии, относящиеся к их задачам; с другой стороны автор, создавший ту или иную задачу, точно так же редко в неё заглядывает. В случаях, когда задача поставлена некорректно или должна быть уточнена, диалог между исполнителем и автором может затянуться, т. к. обсуждение ведётся вяло. Из-за этого трекер-лист превращается в помойку неактуальных задач. Становится проще решить вопрос напрямую, не прибегая к Redmine. Эффективность такой системы мала.

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

    Сходу проблема может быть решена так:
    • Redmine умеет рассылать оповещения на почту. В принципе то, что нужно, но имеет ряд недостатков: во-первых, никто не будет проверять почту каждые пять минут; во-вторых, данная функция оповещения может быть отключена самим пользователем; в случае отсутствия корпоративной почты такие письма-оповещения спешат в секцию спама.
    • Расширением для IDE, например mylyn для Eclipse. К сожалению, решает проблему только с одного конца: у обычных пользователей нет никаких IDE. Зато для разработчиков дает широчайшие возможности для работы с Redmine прямиком из IDE. Наверное, это даже лучший вариант (для разработчиков), если компания способна развернуть рабочее место с предустановленной IDE и настроенным расширением.
    • Оповещения через jabber или icq.

    Для Redmine существует занятный jabber-бот orangutan. Это амбициозный проект, целью которого является организация работы с Redmine через jabber-протокол. В идеальном мире вы можете: закрывать, создавать и комментировать задачи просто отправляя команды-сообщения на человеческом языке. Но это в идеальном мире. А в реальном возникают сложности в настройке, команды фиксированы, о человеческом языке речи не идет. Кроме того для работы бота на Redmine нужно накатить плагин, писаный для какой-то лохматой версии. И самый главный минус: поддержка только английского языка.

    К сожалению, я не нашел других возможностей организации jabber-оповещений для Redmine. Пришлось сотворить свой сервис оповещений.

    Сервис оповещений «send2me»


    Как я уже писал ранее, Redmine умеет рассылать почтовые оповещения об изменениях в задачах. Воспользовавшись этой возможностью можно реализовать отправку jabber-оповещений путем прямой пересылки почтовых сообщений списку jabber-адресов. На основе этой идеи появился send2me.org.

    После регистрации каждый пользователь получает персональный почтовый ящик, например «mail@send2me.org». Любое сообщение, поступившее на этот электронный почтовый ящик, пересылается списку jabber-контактов, согласно созданным правилам. Сервис предоставляет простой интерфейс описания правил отбора сообщений для рассылки. Правила описываются блоками условных переходов, регулярными выражениями и таблицей маршрутизации. Три этих составляющих позволяют описать сколь угодно сложное правило отправки сообщений. Тем не менее, создание правила для рассылки оповещений от Redmine является тривиальной задачей, благодаря встроенным шаблонам.

    Итак, настроим jabber-оповещения для Redmine:

    1. Регистрируемся на send2me.org и получаем персональный почтовый ящик, например «mail@send2me.org».

    2. В Redmine создаем пользователя, который будет слушать все оповещения, а в качестве его электронного адреса указываем «mail@send2me.org». Таким образом, мы добиваемся того, что все изменения в задачах будут отправляться на указанную почту.

    3. Теперь нам нужно создать правило обработки сообщений Redmine. Для этого заходим под своим пользователем на send2me.org и жмем на кнопку «Добавить» в разделе «Правила».



    В форме редактирования правила указываем шаблон «Redmine».



    Пройдемся по пунктам, которые нужно изменить.
    • В первом блоке (красная цифра «1» на изображении) мы отбрасываем все сообщения, которые приходят не от Redmine. Делается это регулярным выражением:
       $header{'X-Redmine-Host'} =~ /^yourredminehost.com$/
      Соответственно, вместо "yourredminehost.com" следует вписать хост вашего Redmine.
    • Во втором блоке мы отбрасываем все сообщения не из нашего проекта. Используется регулярное выражение:
      $header{'X-Redmine-Project'} =~ /^identifier$/
      где "identifier" это идентификатор проекта в Redmine. Этот блок опциональный – если его удалить, то будут приниматься сообщения от всех проектов.
    • Ну и наконец, в третьем блоке нужно заполнить таблицу соответствий пользователей Redmine и их jabber-контактов.

    Замечание: для определения получателей сообщения используются заголовки письма, которые генерирует Redmine.
            ( $header{'X-Redmine-Issue-Author'}, 
              $header{'X-Redmine-Issue-Assignee'}, 
              split(';', $header{'X-Redmine-Watchers'} ))
    К сожалению Redmine не добавляет в заголовок письма наблюдателей задачи. Поэтому «из коробки» оповещения будут приходить только авторам задач и назначенным исполнителям. Для определения наблюдателей используется дополнительный заголовок "X-Redmine-Watchers". Чтобы он работал, необходимо поставить простенький плагин для Redmine (он не требует ни миграции, ни каких либо манипуляций с настройкой Redmine).

    На этом процедура настройки jabber-оповещений Redmine заканчивается. Далее для тех, кому интересно, я опишу архитектуру сервиса send2me.org

    Архитектура сервиса оповещений


    На рисунке представлена принципиальная схема организации такого сервиса.



    Любое письмо, поступившее на электронный почтовый ящик, обрабатывается следующим образом:
    • Postfix – принимает полученное сообщение и перенаправляет его в именованный канал (named pipe). Postfix сконфигурирован таким образом, что перенаправляет в пайп только сообщения от тех пользователей, для которых есть запись в базе данных send2me.org (т.е. для зарегистрированных пользователей). Остальные сообщения удаляются.
    • Rule processor (обработчик правил) – извлекает сообщение из именованного канала и применяет к нему набор пользовательских правил. Если сообщение не отбрасывается согласно правилам, то оно подготавливается для отправки jabber-контактам и перенаправляется в следующий именованный канал.
    • Ejabberd module (bot) – извлекает сообщение из именованного канала и отправляет его.

    Отдельным звеном является web crud, написанный на Dancer и предназначенный для создания и редактирования пользовательских правил.

    Вложения писем сервисом не обрабатываются, а вырезаются при получении с помощью renattach.

    Мне сложно оценить производительность такой архитектуры: postfix и ejabberd являются широко известными высококачественными продуктами. Полагаю, узким звеном являются части системы, написанные мною на perl. Думаю, довольно быстро хабраэффект свалит мой нищебродский сервер (1Ghz & 512MB), но на обслуживание реально заинтересованных пользователей его вполне хватит.
    Поделиться публикацией

    Похожие публикации

    Комментарии 15

      +2
      А не проще ли было бы написать плагин для Redmine, делающий тоже самое? И добавить поддержку других протоколов, кроме jabber?
        +1
        Самое смешное что он есть))) У меня работает, но есть проблемы, если сервер начинает тупить то весь редмайн тоже тупит, отправляю черех gtalk
          0
          Отправка через очередь не решает проблему?
            0
            Давайте допилим?
            0
            Изначально я так и делал. Но пришел к выводу, что так как я сделал проще. Проще прежде всего для администрирования, а это главная моя цель. Плюс, больше гибкость, можно настроить оповещения с code.google.com. На очереди Trac.

            А еще, что важно, очень хотелось пощупать erlang.

            Хотел icq прикрутить тоже, ну почему-то модуль Net::OSCAR слишком сильно кочевряжится, и противится моим потугам. Так что это цель на будующие.
            +2
            извините за любопытство, а зачем? ну в смысле нотификация в джаббер. почему не хватает почты? если в проекте 7-10 человек, то задолбит же жаббер.

            интересен именно рабочий кейс почему так.

            спасибо.
              +1
              Я вот тоже представил себе, что будет с моим jabber-клиентом от нотификации в него и ужаснулся.
              Хотелось бы рассказа от автора почему.
                0
                >> если в проекте 7-10 человек, то задолбит же жаббер.

                Оповещения приходят о тех задачах, для которых вы автор, исполнитель или наблюдатель. Соответственно, то что приходит в жаббер, конкретно касается вас.

                >> почему не хватает почты

                Почта не корпоративная, поэтому у многих она фейковая. Жаббер же берется тот с которого человек реально сидит, поэтому ему придется просматривать оповещения. И он уже не может сказать, а я ничего не получал.

                На самом деле, кому то такие оповещения мешают, кому то помогают. Мне лично, удобно тем что мне браузер открывать не надо. И в течении дня примерно понимаю какая там ситуация по задачам, и что происходит.
                0
                Нам вполне хватает стандартных оповещений. Учитывая, что все по работе используют google apps. И мобильные почтовые клиенты.

                В смысле jabber-api можно было использовать предоставляемый redmine REST api в связке с любым расширяемым ботом.
                  0
                  Я пробовал использовать Redmine REST API. Но оно очень ограниченно. Там нет API которое оповещает об изменениях. Т.е. diff придется делать самому. Я шел этим путем, но все уперлось в то что Redmine не позволяет выгружать данные больше чем о 100 задачах единовременно. Т.е. что бы сделать diff 1000 задач, нужно cделать 10 запросов с offset = i * 100. Я счел это API бесполезным. И большой минус что оно есть только в новых версиях Redmine.
                  0
                  Redmine умеет рассылать оповещения на почту. В принципе то, что нужно, но имеет ряд недостатков: во-первых, никто не будет проверять почту каждые пять минут
                  У яндекса, к примеру, есть уведомления о почте по jabber'у
                    0
                    И у меня теперь тоже есть :) А если серьезно, изначально все задумывалось как плагин к Redmine, а получилось то что получилось.
                    +1
                    У нас стоит Messenger Plugin, при правильной настройке уведомлений, вполне полезная вещ при критических ситуациях, все задачи ведутся в редмайне и поддержка тоже. Редмайн локальный, жаба тоже локально поднята, все смотрит и на ружу.
                      0
                      Мы точно такой юзаем более года. Очень довольны.
                      0
                      Корпоративная почта + правило в Outlook + всплывающее окно для писем, соответствующих этому правилу. Мне хватает, но возможно у нас активность в redmine не такая высокая как у вас.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое