Всем привет! В данной статье я расскажу о том как забавы ради сделал простенькую визуализацию спринтов из Jira. Кто не любит читать много букв может сразу посмотреть на результат или же на исходники.
Все началось с D3 - я проникся примерами и решил попробовать нарисовать что-нибудь свое. В качестве идеи для визуализации были выбраны спринты. Я решил построить график такого типа, чтобы по нему было видно кто по каким задачам работал и сколько на это уходило времени.
Внимание: для построения графика требуется, чтобы задачи были оценены в часах и чтобы программисты, тестировщики списывали потраченное время по задачам.
Чтение данных из Jira
Для чтения данных я использовал RestAPIs. Здесь модуль, в котором реализованы нужные методы. Последовательность чтения такова:
По boardId получаем список спринтов и находим среди них активный.
По activeSprintId получаем список issues
Для списка issues получаем statuses, worklogs, storyPoints и т.д.
Подготовка данных для визуализации сделана здесь. Так как данных довольно много, код получился муторным. Надеюсь, что найдется время его порефакторить.
Сохранение данных
Хранить данные я решил в AzureStorage. Здесь модуль, в котором реализованы нужные методы. Со стораджа нам нужно будет считать шаблоны в память, добавить в них данные из Jira и сохранить результаты на сторадж для дальнейшего просмотра.
Шаблон TimeBoardTemplate используется для построения таблицы. По данной таблице можно посмотреть прогресс вашей команды, сравнить его с другими командами, при необходимости перейти по линкам в Jira или же открыть графический отчет по спринту.
Шаблон TimeFlowTemplate используется для построения графического отчета. По данному отчету видно кто по каким задачам работал, сколько ушло на это времени. Сколько времени еще потребуется на каждую задачу. Как продвигаются задачи от несделанных к сделанным. Для детальной информации можно перейти по ссылкам в Jira.
Обновление данных
Для обновления данных была создана AzureFunction с триггером на запуск раз в полчаса. Также была сделана небольшая оптимизация, чтобы функция ничего не делала по выходным или по ночам. Весь процесс занимает совсем немного времени - так что для функции хватит самого дешевого плана.
Входные данные
Входные данные задаются здесь. С небольшими правками код должен заработать на любой облачной Jira. Нужно подправить id для кастомного поля 'Story Points' здесь. Если в вашей Jira это поле и называется по другому, то нужно будет также подправить соответствующий запрос. Ну и конечно же заполнить корректно входные данные.
Безопасность данных
Если вы не хотите, чтобы данные отчеты можно было посмотреть с любого устройства, то можно ограничить доступ к стораджу по ip.
P.S.
Почему 'кишки'? Коллега увидев график первый раз спросил: "Это что за кишки?" Так название и прижилось.
В приведенных ссылках реальные имена пользователей, задач, спринтов были заменены на сгенеренные. Сам код конечно же такой подмены делать не будет.
"Есть ложь, большая ложь и статистика" - делать какие либо выводы по графикам, таблицам можно только зная и понимая текущий контекст работы команд.
Спасибо всем кто прочитал статью!