Как распарсить mantis

Во многих программерских конторах в качестве багтрекера (или в целом для управления задачами) используется популярный продукт Mantis. Нам, руководителям рабочих групп, регулярно нужно доставать из него статистику: с какой скоростью мы движемся, успеваем ли решать задачи в срок, сколько багов осталось до релиза, кто из команды работает медленнее всех остальных. В Мантисе есть своя статистика, но её информативность сгодится лишь для агит-плаката на тему “пятилетка в четыре года”. В реальной жизни нужны гораздо более кастомизированные отчёты.

Я раскопал свой старый php-скрипт, который писал в далёкой молодости, и адаптировал его к сегодняшним реалиям. И вот что получилось:

Сначала определим проекты, которые нас интересуют (по их айдишникам)

$projects=’27,96,124,68′; // просто через запятую перечислим

Определим период времени – для наглядности пишу прямым текстом, но вы конечно же воспользуйтесь функцией date:

$from =  ‘2007-03-28 00:00:00’;
$to =  ‘2007-04-03 23:59:59’;

Также предположим, что вы используете категории bug и task для обозначения багов и задач соответственно. А теперь – непосредственно SQL-запросы:

Сколько багов было занесено по вашему проекту:

SELECT COUNT(id) AS C FROM mantis_bug_table WHERE category=”bug” AND project_id IN (‘.$projects.’) AND date_submitted>=”‘.$from.'” AND date_submitted<=”‘.$to.'”;

Сколько нерешённых багов имеется на данный момент:

SELECT COUNT(id) AS C FROM mantis_bug_table WHERE category=”bug” AND project_id IN (‘.$projects.’) AND status<80;

Сколько багов решено (или закрыто) за данный период времени. Во избежание дублирования решённых и закрытых используется DISTINCT(bug_id):

SELECT COUNT(DISTINCT(bug_id)) FROM mantis_bug_history_table LEFT JOIN mantis_bug_table ON mantis_bug_table.id=mantis_bug_history_table.bug_id WHERE (new_value=80 OR new_value=90) AND (category=”bug” AND project_id IN (‘.$projects.’) AND field_name=”status” AND date_modified>=”‘.$from.'” AND date_modified<=”‘.$to.'”);

Сколько багов “решил” данный разработчик ($user_id) за период времени:

SELECT COUNT(DISTINCT(bug_id)) FROM mantis_bug_history_table WHERE new_value=80 AND mantis_bug_history_table.user_id=’.$user_id.’ AND field_name=”status” AND date_modified>=”‘.$from.'” AND date_modified<=”‘.$to.'”;

Удачного использования!