Во многих программерских конторах в качестве багтрекера (или в целом для управления задачами) используется популярный продукт 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.'”;
Удачного использования!