Bugzilla4Intranet

From Wiki4Intranet
Revision as of 10:42, 4 November 2023 by VitaliyFilippov (Talk | contribs) (Reverted edits by SEO TROLLING (talk) to last revision by Виталий Липатов)

This is a page snapshot, showing old (but not deleted) versions of images and templates.
Jump to: navigation, search

Bugzilla4Intranet — форк баг-трекера Bugzilla (версии 3.6.4), ставящий своей конечной целью превращение Bugzilla в настраиваемый трекер, а также оптимизацию производительности и ликвидацию некачественного кода, присутствующего в оригинале в большом количестве.

Идеальная цель проекта:

  • Полностью настраиваемая объектная модель, редактируемая из интерфейса. Функционирование всех объектов системы на её основе, возможность добавлять свои объекты, возможность поиска любых объектов, автоматическое версионирование всех изменений, отсутствие (полное или практически полное) жёстких завязок на конкретные поля или сущности.
  • Полная ликвидация CGI.pm.
  • Минимум сложной программной логики в шаблонах. Шаблоны — это представление, а не контроллер!
  • Выделенный отдельно уровень локализации, не требующий для перевода на другой язык переписывать шаблоны.

Состояние проекта

Bugzilla4Intranet — форк версии 3.6.4. Это не самая новая версия Bugzilla. Что это означает на данный момент:

  • Пока что не поддерживается обновление с новых версий Bugzilla до Bugzilla4Intranet. UPDATE: Уже поддерживается (в ветке 'beta'), схема БД совместима. Какие-то мелкие баги всё ещё возможны, но в целом, как минимум на MySQL, всё должно работать.
  • По пути доработки некоторые редкоиспользуемые фичи могли отвалиться — например, importxml.pl, миграция багов, какие-нибудь скрипты из contrib/, поддержка Oracle, тесты…
  • Часть возможностей, присутствующих в свежем оригинале, может отсутствовать в нашей версии, например:
    • Отсутствует группировка полей на форме поиска в fieldset’ы.
    • Отсутствуют Уже присутствуют сохраняемые отчёты.
    • Отсутствуют (и, скорее всего, добавлены не будут — фича странная и даже, возможно, вредная) «пользовательские теги» на багах, то есть теги, которые видят только пользователи, их создавшие.
    • Отсутствует Уже присутствует и улучшена поддержка SQLite — а именно, в отличие от оригинальной Bugzilla, можно использовать встроенный в SQLite полнотекстовый поиск FTS4, при передаче параметра &debug=1 работает вывод плана запроса, и можно использовать sqlite с contrib/bzdbcopy.pl. Пока в ветке sqlite.
    • Отсутствует поддержка одновременной Prev/Next навигации по нескольким спискам багов (параметр &list_id=…), ибо последний список багов хранится в Cookie, а не в БД.
    • Возможно, какие-то прочие фичи, в основном — мелкие.

Зато — добавлено множество новых возможностей! Из крупных доработок можно отметить:

  • Интерфейс:
    • Новая более удобная форма постановки бага. Идея — разделение всех полей на две колонки: в левой, крупной — описание бага и большие текстовые поля, в правой — все мелкие поля с детальной информацией.
    • Небольшой редизайн формы редактирования бага. Поля отображаются не справа от своих названий в следующей колонке, а под названиями, и выводятся в 4 колонки, плавно уменьшающиеся до 2 и потом 1 с уменьшением ширины экрана (например, на мобильниках); комментарии отображаются во всю ширину экрана.
    • Улучшенный интерфейс Boolean Charts.
    • Более аккуратные стили практически на всех страницах.
    • Интеграция более свежего скина Mozilla.
    • Поддержка Gravatar-юзерпиков.
    • Приятный глазу HTML-формат почтовых уведомлений по багам.
  • Excel-импорт.
  • Улучшения работы с вложениями:
    • Добавление нескольких вложений к багу разом;
    • Возможность при добавлении вложения вставить текст или изображение прямо из буфера обмена;
    • Возможность скачать все вложения к багу в одном ZIP-архиве;
    • Базовый онлайн-просмотр офисных документов с помощью LibreOffice;
    • Показ приложенных изображений прямо внутри комментариев.
  • Улучшения Custom-полей и более мощные зависимости между полями:
    • Новые типы;
    • Доступность «обратных к полю типа BUG_ID отношений» в поиске и Excel-импорте;
    • Возможность делать custom поля зависимыми друг от друга;
    • Возможность не только показывать одно custom поле для нескольких значений контролирующего поля, а также и показывать одно и то же значение select-поля для нескольких значений контролирующего поля;
    • Возможность разрешить/запретить пустое значение (NULL, то есть, «---» для select-полей, просто пустое для прочих) в зависимости от значений другого поля (например, попродуктно);
    • Возможность включить/выключить копирование поля при клонировании багов, в том числе — в зависимости от значений другого поля (например, попродуктно);
    • Настройки значений по умолчанию для любых полей — как глобальных, так и зависимых от значений другого поля;
    • Все вышеперечисленные поля зависимостей могут быть как одинаковыми, так и разными. То есть NULL можно включать/выключать в зависимости от одного поля, значение по умолчанию — в зависимости от другого поля, клонирование — от третьего, наборы значений — от четвёртого, видимость — от пятого.
    • Все вышеперечисленные зависимости можно задавать для пустого значения поля;
    • Полностью убраны старые параметры, включающие/выключащие поля и задающие их значения по умолчанию (Administration → Parameters → Bug Fields). Теперь эти настройки нужно делать через общий интерфейс настройки полей;
    • Более аккуратная форма редактирования свойств полей;
    • Новые удобные интерфейсы редактирования зависимостей и наборов значений для каждого контролирующего значения прямо с его страницы (то есть, например, включать/выключать поля прямо со страницы продукта);
    • Аналогично 4.x можно деактивировать старые версии, milestone’ы, компоненты;
    • Target Milestone можно перенастроить так, чтобы значения по умолчанию выбирались в зависимости не от продукта, а от любого другого select-поля (например, от компонента);
    • Продукты можно перемещать между классификациями со страницы продукта, а не через отдельный нетривиальный интерфейс «Reclassify».
  • «Валидаторы» изменений багов, то есть — настраиваемые предупреждения / ошибки.
  • Представление сохранённых поисков в виде MySQL’ных View, позволяющих запрашивать информацию внешними инструментами и с учётом прав доступа.
  • Страницы массовой фиксации трудозатрат (в том числе — задним числом и от чужого имени при наличии соответствующего разрешения).
  • RSS-ленты комментариев и активности по багам и поискам.
  • Различные новые поля в поиске, в том числе — поля связанных багов.
  • Возможность правки комментариев, Diff’ы в истории изменений и письмах.
  • Возможность отключения полей «Platform» и «Operating system», возможность настраивать регулярные выражения для автоопределения их значений на основе User-Agent.
  • Улучшения интерфейсов настройки прав доступа, несколько облегчающие работу с оными в Bugzilla (модель разграничения доступа в Bugzilla весьма неочевидная):
    • Редизайн формы настроек доступа к продукту.
    • Новый интерфейс редактирования групп, отображающий полный список пользователей, так или иначе входящих в группу и/или имеющих права включения других пользователей в эту группу. То есть, для редактирования можно «заходить» со стороны группы, а не со стороны каждого входящего в неё пользователя.
    • Детальная информация о том, какие разрешения дают группы, на странице списка групп в панели администрирования и на странице с информацией о собственных группах (Preferences → Permissions).
  • Улучшения ответа на баги через почту — возможность использовать заголовки полей, возможность поставить несколько вложений, адекватная диагностика при ошибках, фильтрация автоматических ответов (чтобы, например, не получалось бесконечного цикла отправки комментариев при установке пользователем ответа типа «я в отпуске до XX.XX»).
  • Новый «REST-JSON»/«REST-XML» API, принимающий входные параметры как обычные параметры POST или строки запроса, отвечающий JSON или XML, способный перехватывать любые ошибки и передавать их в ответе в виде имён (а не ужасных прибитых гвоздями численных кодов).
  • Бэкпортированы веб-сервисы из Bugzilla 4.4.

Кроме новых возможностей, уже проведена большая работа по рефакторингу наслоений оригинального кода:

  • Полностью переписан код, отвечающий за поиск. Даже сложные запросы поиска строятся так, что СУБД может максимизировать использование индексов и выполнять их оптимально.
  • Приведена в норму структура базы данных — теперь все целочисленные первичные ключи имеют одинаковый тип INT, а не разные SMALLINT/MEDIUMINT/INT, а все select-поля хранят ID значений вместо самих значений, и NULL вместо строкового «---», используемого как NULL в оригинале (а также вместо версии «unspecified»); кроме того, практически всем VARCHAR колонкам проставлен максимальный лимит длины (255), чтобы не заниматься крохоборством и не увеличивать максимальную длину сначала до 20, потом до 64, потом до 128… VARCHAR, как следует из названия, имеет переменную длину и «лишнего» места не занимает.
  • Полностью переписана логика сохранения багов в БД — теперь код работает корректнее и эффективнее, кроме того, для работы с моделью более не нужно обращаться к контроллеру (*.cgi).
  • Ликвидирован hard-code возможных значений для поля «See Also». В оригинале 3.6 данное поле может содержать только URL определённого вида, соответствующего жёстко заданным в коде (!!!) шаблонам для разных баг-трекеров. В оригинале 4.4 авторы решили это отрефакторить и… что бы вы думали? Оставили завязку в коде, но вынесли каждый шаблон в отдельный класс! Зачем так сделано — загадка, нормальное решение — простой настраиваемый набор регулярных выражений в параметрах.
  • Ликвидирован (по меньшей мере, почти) hard-code названий статусов (теперь их можно, например, назвать русскими именами).
  • Ликвидирован hard-code классов обработчиков заданий очереди, не позволяющий без модификации кода ядра добавлять собственные типы заданий в расширениях.
  • Из шаблонов вынесены некоторые крупные куски программной логики, а также объёмные JavaScript’ы.
  • Из шаблонов вынесена некоторая часть сообщений локализации (описания полей, «термины»); убраны сверхдлинные IF..ELSEIF’ы, которыми выбирались сообщения об ошибках.
  • Реализовано клиентское кэширование зависимостей между значениями полей, что даёт браузеру возможность быстрее открывать формы редактирования и поиска багов.
  • Реализовано серверное кэширование метаданных между запросами.
  • Добавлена поддержка полнотекстового поиска Sphinx, который работает гораздо быстрее и качественнее, чем MySQL FULLTEXT.
  • Добавлена простая реализация standalone HTTP-сервера на основе HTTP::Server::Simple, в духе Plack; добавлены init-скрипты для запуска данного сервера и демона очереди заданий. Рекомендуется использовать HTTP::Server::Simple + nginx в качестве фронтенда к нему вместо работы под mod_perl, так как mod_perl создаёт большое количество различных проблем, в том числе мистических багов, не проявляющих себя в «голом» Perl’е.
  • Добавлена возможность корректной перезагрузки всех модулей и расширений на каждом запросе, что сильно упрощает отладку и разработку — больше не нужно после внесения каждого изменения перезапускать сервер.
  • Полностью переписана система расширений, новая создана по образу и подобию MediaWiki и позволяет перезагружать на каждом запросе в том числе и код расширений. Планируется добавление возможности расширениям создавать собственные точки входа (*.cgi скрипты) внутри собственной директории, а не в корне установки (возможно, для этого точки входа будут превращены из *.cgi файлов в классы-контроллеры).
  • По умолчанию вложения вообще не хранятся внутри БД (BLOB’ы — mauvais ton), хотя возможность хранения оставлена для совместимости с оригиналом.
  • Задолго до попытки реализации аналогичной фичи в оригинале, ещё в 2010 году, добавлен Redirect после сохранения изменений в баг, не дающий вам случайно перепослать POST запрос при нажатии F5. Кроме того, в оригинальной Bugzilla это не работает в Internet Explorer, а у нас — работает везде.
  • HTML-формат почты также появился задолго до его реализации в оригинальной Bugzilla.
  • Полностью изгнан YAHOO UI — пожалуй, худший из всех JS-фреймворков. Мало того, что он худший — зачем нужно JS-фреймворк в Bugzilla, вообще не очень понятно.
  • Как и в оригинале, реализована подсказка имён пользователей; правда, в связи с изгнанием YAHOO UI реализована она на других технологиях.
  • Практически изгнан CGI.pm: функции cgi->param() и cgi->cookie() не используются НИГДЕ; вместо них параметры и куки читаются из хешрефов Bugzilla->input_params и Bugzilla->cookies.
  • Удалены различные устаревшие процедурные интерфейсы типа LookupNamedQuery(), is_open_state() и тому подобные.

Прочие идеи:

  • Свои типы объектов (в процессе реализации в ветке classes).
  • UI для работы с вьюхами (правда, чтобы багзилла создавала mysql-пользователей, ей нужен рутовый mysql пароль).
  • Add me to CC list, добавление флага на странице добавления аттача…
  • …Либо интегрировать форму добавления аттача прямо на форму бага!
  • (готово) Отключение/включение Silent в параметрах.
  • Показывать историю изменений багов прямо в ленте комментариев.
  • Интеграция с VCS — показывать коммиты прямо в ленте комментариев.
  • Парсить и сохранять ссылки на баги в комментариях к другим багам и показывать на их основе обратные ссылки.
  • Массовая правка багов прямо из таблицы списка багов + возможно, пересортировка.
  • (готово) Заредизайнить форму редактирования бага.
  • Переименовать Checker’ы в «Валидаторы».
  • (готово) Какой-нибудь вариант «Responsive Layout».
  • Рассмотреть возможность утаскивания какого-нибудь функционала из https://github.com/bayoteers/.
  • Вмержить «недавние поиски» из 4.x?
  • Показывать «недавние поиски»?
  • Дать возможность экстенжнам создавать свои контроллеры (условно говоря, *.cgi скрипты).
  • (готово) Убрать из ядра CUSTIS-специфичные фичи.
  • Что-то сделать с editemailin.cgi.
  • Кастомизация картинок создания бага и т. п.

Установка

Вначале нужно установить Perl модули — просто вызовом команды cpan, она же perl -MCPAN -eshell (на случай, если в вашей системе не окажется исполняемого файла cpan).

Минимально требуемые модули:

cpan Date::Parse DBI CGI DateTime Email::Address \
  Template JSON Email::MIME Test::Taint \
  XML::Twig Text::TabularDisplay Email::Sender \
  Lingua::Translit Archive::Zip \
  DBD::mysql Image::Magick

Image::Magick обычно можно ставить как пакет вашего любимого Linux-дистрибутива, например perlmagick в Debian. Если вы используете PostgreSQL, то вместо DBD::mysql вам нужен DBD::pg.

В тестах GD есть старый баг, который никак не пофиксят — 1 тест не проходит и установка не удаётся. Так что, пока его не пофиксят, GD ставим с -f (force).

Опционально, но желательно:

cpan -f GD
cpan Template::Plugin::GD GD::Graph GD::Graph3d \
  MIME::Parser Mail::RFC822::Address Email::Reply \
  Devel::StackTrace Email::MIME::Attachment::Stripper \
  SOAP::Lite JSON::RPC JSON::XS Text::CSV HTML::Strip \
  Text::CSV_XS Spreadsheet::ParseExcel Spreadsheet::XLSX \
  Lingua::Stem::Snowball Math::Random::Secure TheSchwartz \
  Daemon::Generic HTTP::Server::Simple Net::Server Sys::Sendfile

После установки данных модулей создайте MySQL-базу данных и пользователя, имеющего к ней полный доступ, запустите ./checksetup.sh в директории установки Bugzilla и следуйте инструкциям.

При обновлении — просто обновите код и также запустите ./checksetup.sh. Нужные изменения в БД будут внесены автоматически.

История улучшений

Список доработок актуален на дату: 2012-12-05 (5 декабря 2012).

Улучшения оригинальной Bugzilla 3.0 по сравнению с 2.x

Bugzilla 3 имеет много преимуществ — авторы наконец-то осилили и mod_perl, и транзакции, и работу в UTF-8, и некоторые возможности расширения, и внешний вид посимпатичнее, и проверки дублирования изменений, и запросы через DBI (а не SendSQL()), и нормальные шаблоны для писем (если, конечно, Template Toolkit считать нормальным вообще).

В то же время, авторы Bugzilla начинают понимать, что возможности расширения в Bugzilla необходимы, и постепенно добавляют таковые. В 3.0 появляются Custom Fields (дополнительные поля у багов) и чуть-чуть хуков, в 3.2 появляется настраиваемый жизненный цикл бага, поддержка расширений авторизации и ещё чуть-чуть хуков. Правда, хуков там всё равно мало, и как пишут сами авторы, они не очень красивые и, вероятно, в будущем будут переделаны. Будущее — это 4.0, которая, скорее всего, вырастет когда-нибудь из HEAD’а, который обычно представляет собой unstable версию с нечётным индексом (3.1, 3.3, 3.5 и т.п). В 4.0 обещали хуки для всего, чего душе угодно, но пользоваться ими вряд ли кто-то будет, учитывая то, какой кошмар царит в головах авторов, судя по «новой системе расширений», добавленной в 3.6.

Производительность и надёжность (по сравнению с 2.x прогресс огромен):

  • mod_perl вместо CGI — улучшает производительность. Правда, изначальные заверения о том, что «теперь багзилла будет летать», как оказалось, несколько не соответствуют действительности. Причина — тому, кто юзает Template::Toolkit, мод_перл — мёртвому припарка. Выигрыш в производительности от mod_perl с лихвой компенсируется усложнением TT-шных шаблонов.
  • InnoDB вместо MyISAM — ошибок «…table XXX is marked as crashed…» больше нет.
  • транзакции вместо блокировок таблиц, а также внешние ключи (дождались!)
  • полнотекстовый поиск по багам с морфологией вместо поиска по подстроке (которому, кстати, сопутствовали долгие блокировки при поисках)
  • теперь вся багзилла работает в UTF-8 => отпадают все мыслимые проблемы с кодировками
  • убрано множество кривых решений вроде файла data/nomail с логинами юзеров, которым не надо слать почту (теперь в настройках юзера админ может задать bugmail disabled), data/versioncache с перловым хешем мешающим обновлять словари (типа кэш какой-то) и т. п.

Новые фичи:

  • Интерфейс! :) более красивый и сексуальный во всех аспектах.
  • Можно добавлять аттачи и ставить флаги непосредственно при вводе нового бага.
  • Нормальная защита от двойного сабмита любых форм.
  • Дополнительные заголовки в письмах от Bugzilla.
  • Email-управление багами.
  • «Разделяемые» хранимые запросы поиска.
  • Несколько более гибкая система прав (например, editbugs и canconfirm можно ставить на отдельные продукты).

Доработки 2.x → /dev/null

Следующие доработки были внесены нами давно в 2.x, и отмерли по той причине, что в 3.0 реализованы авторами:

Легенда

Легенда к списку доработок, разбитому по статусу относительно Bugzilla 3.

  • Ожидает проноса или решения о его ненужности,
  • Пронесено,
  • Не требуется / похоронено.

По категории:

Под заголовком «доработки X.Y» понимаются доработки, внесённые уже после объединения CustIS Bugzilla с оригинальной версией.

Доработки 2.x → 3.2

Список доработок, существовавших в «CustIS Bugzilla» на момент объединения её с mainstream-версией 3.2.

Всем спасибо за прохождение опроса по часто используемым функциям Bugzilla.

Пронесены в Bugzilla 3.2:

Доработки 3.2

Доработки 3.4

Bugzilla 3.4 установлена в качестве боевой 30 августа 2009. Всем спасибо за боевое «гамма-тестирование» (потому, что даже не совсем бета). :)

Доработки 3.6

Bugzilla 3.6 установлена в качестве боевой 10 июня 2010.

Внешние баги