Будучи тимлидом команды разработки, вы получили от менеджера проекта задачу повысить скорость разработки. Звучит, как начало плохого анекдота, но, тем не менее, решение вам все же нужно найти. В ходе размышлений и изучений различного внешнего опыта других команд разработки вы решили попробовать инструменты геймификации. То есть применить техники и подходы игрового характера с целью повышения вовлеченности команды в решение задач.
Вами была придумана рейтинговая таблица самых активных контрибьютеров за спринт. Что это значит в теории: по окончании итерации (4 рабочие недели) выгружается список коммитов, сделанных в релизную ветку продукта, и на его основе вычисляются трое самых активных разработчиков, сделавших наибольшее количество коммитов. В зависимости от занятого места, разработчик получает определенное количество внутренней валюты вашей компании, которую он впоследствии может обменять на какие-то товары из внутреннего магазина.
На практике вы видите решение следующим образом: на следующий день после окончания спринта в 00:00 запускается автоматическая процедура, которая забирает файл с данными о коммитах в релизную ветку, сделанных в период спринта, после чего выполняется поиск 3-х самых активных контрибьютеров. Имена найденных разработчиков записываются в файл, который впоследствии отправляется вам на почту.
В рамках практической реализации данной задачи вам необходимо разработать процедуру формирование отчета “Топ-3 контрибьютера”. Данная процедура принимает на вход текстовый файл (commits.txt), содержащий данные о коммитах (построчно). Каждая строка содержит сведения о коммите в релизную ветку в формате: “<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”. Например: AIvanov 25ec001 2024-04-24T13:56:39.492
К данным предъявляются следующие требования:
- имя пользователя может содержать латинские символы в любом регистре, цифры (но не начинаться с них), а также символ "_";
- сокращенный хэш коммита представляет из себя строку в нижнем регистре, состояющую из 7 символов: букв латинского алфавита, а также цифр;
- дата и время коммита в формате YYYY-MM-ddTHH:mm:ss.
В результате работы процедура формирует новый файл (result.txt), содержащий информацию об именах 3-х самых активных пользователей по одному в каждой строке в порядке убывания места в рейтинге. Пример содержимого файла: AIvanov AKalinina CodeKiller777
Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение.
Ковалева Мария Анатольевна
В программе main.cpp реализована функция writeResult(). Она создает или переписывает файл result.txt, передавая в него имена 3 самых активных контрибьюторов за последние 4 недели (спринт).
Также для работы созданы:
- Структура Contributor, чтобы хранить имя пользователя и кол-во его коммитов за последние 4 недели. Для структуры создан компоратор, сравнивающий кол-во коммитов
- Функция isWithinFourWeeks для проверки, что передаваемая дата находится в пределах последних 4 недель
- Функция countCommits, которая получает путь до файла commits.txt (предполагается, что он находится в корневой папке проекта), считает коммиты для каждого пользователя и отдает отсортированный по убыванию вектор Contributor
Возможные доработки в будущем:
- Установить регулярный запуск программы можно с помощью утилиты cron и скрипта, который читает result.txt после выполнения программы. Для этого необходимо создать start.sh (для windows другое расширение):
touch start.sh
- В файл start.sh:
#!/bin/bash
cd #путь до папки с репозиторием
./top3
cat result.txt
И создать правило для cron:
- В командной строке
crontab -e
- Выбрать удобный редактор и в конфигурационном файле прописать запуск start.sh:
SHELL=/bin/bash
MAILTO= #указать свою почту
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
0 0 */28 * * root /путь_к_start.sh/start.sh
Сохранить при выходе из редактора. С помощью этой настройки скрипт будет запускаться каждые 28 дней.
Для настройки отправки сообщений на почту в linux.
- Как обрабатывать ситуацию, если больше чем у 3 пользователей максимальное кол-во коммитов за спринт? Можно выводить всех, выбирать трёх рандомных из них. Или выбирать из них тех, у кого было больше всего коммитов в день за месяц :)
- Обработка чтения commits.txt на строки с нарушенным форматом (имя пользователя, не подходящее под условие, неверная запись версии коммита, неверная дата)
Для сборки и запуска необходим компилятор C++17. В репозиторий с программой поместите commits.txt для тестирования, после чего можно запускать программу.
Запуск с помощью g++ через терминал Linux:
- Перейдите в папку с репозиторием
- Выполните команду для сборки:
g++ main.cpp -o top3
- Чтобы запустить программу выполните:
./top3
В папке с репозиторием появится result.txt
Запуск на Windows с помощью g++:
- Установите компилятор
- Откройте консоль, перейдите в папку с репозиторием
- Выполните команду для сборки:
g++ main.cpp -o top3
- Чтобы запустить программу выполните:
top3
В папке с репозиторием появится result.txt