Автоматизация учета затраченного времени между сервисом Clockify и Redmine.
Трекать время, затраченное на работу, считаю очень важным аспектом и для работодателя и для личного удовлетворения работой, для личной оценки выполненной работы. В дни повышенной активности, когда задачи сыпятся со всех сторон, когда много разных контекстов, задача фиксации потраченного времени уходит на последний план.
Данная утилита предназначена для того, чтобы пользоваться удобным сервисом для фиксации затраченного времени и чтобы удобно переносить это время в task-tracker, в текущей реализации - Redmine.
Я попробовал много разных приложений для отслеживания времени, и Clockify не хранит данные локально и достаточно юзерфрендли.
P.S. спасибо Виктору Ф. за то, что когда-то порекомендовал этот сервис
- если пользоваться GoogleChrome расширением, то иногда вылетает из аккаунта, но таймер не останавливается, и время не "обнуляется".
- доступность сервиса зависит доступности сервисов Google на территории РФ, 1-2 раза за год были проблемы с доступом к tracker.
- громоздкий интерфейс на официальной странице из-за того, что Clockify - полноценный сервис по управлению проектами.
git clone https://github.com/milov-dmitriy/clockmine.git
cd clockmine
cp ./deploy/.env ./.env
- копируем
API-ключ
для вашей учетной записи Redmine; - присваиваем скопированное значение переменной
REDMINE_API_KEY
в.env
файле.
- создаем или логинимся (если уже есть) в учетную запись
Clockify
; - переходим в
настройки
и перематуываем в самый низ сраницы; - генерируем API-ключ в соответствующем поле и копируем сгенерированное значение в переменную
CLOCKIFY_API_KEY
в.env
файле.
В магазине расширений GoogleChrome есть соответствующие расширение Clockify, однако оно гораздо менее удобное, чем полная версия сервиса tracker. Расширение не рекомендую.
- если ваша таймзона отличается от
Europe/Moscow
, то в.env
файле меняем значение переменнойTIMEZONE
на таймзону из списка разрешенных таймзон, перечисленных в файлеtimezones.py
;- Default: таймзоной по умолчанию выбрана
Europe/Moscow
- Default: таймзоной по умолчанию выбрана
- по желанию можно в .env файле в переменной
REDMINE_URL_TIME_ENTRY
указать любую ссылку, которая будет выводится в консоль сразу после того, как вы успешно выполните командуpush
(о которой мы поговорим чуть позже);- Default: в консоль выводится
такая
ссылка
- Default: в консоль выводится
- по желанию в переменной
REDMINE_ACTIVITIES_NOT_ALLOWED
в.env
файле указываем в формате python-списка деятельность, которой вы не пользуетесь при проставлении трудочасов.- Default: нет запрещенных деятельностей
Сбилдим контейнер:
chmod u+x ./upgrade.sh
./upgrade.sh
Команда ниже импортирует деятельность из Redmine в Clockify:
docker-compose exec app ./manage.py init
- Заходим на страницу tracker;
- Поле описания деятельности заполняем по формату:
{redmine_task_id} -ci {comment}
и выбираем один из тегов; - Запускаем таймер;
- Останавливаем таймер.
- В описании/заголовке затреканного времени в Clockify обязательно должен быть номер Redmine-задачи, к которой у вас есть доступ в Redmine, символы
-ci
обязательны и нужны для отделения комментария от деятельности, комментарий обязателен - Для успешного выполнения команды
push
(docker-compose exec app ./manage.py push
) каждая распаршенная запись из Clockify должна иметьY
в колонкеOk?
.Y
означает, что запись из Clockify может быть успешно перенесена в Redmine. - Если у вас запущен таймер, то при выполнении одной из команд (
push
илиreport
) clockmine самостоятельно остановит запущенный таймер. - Время будет затрекано в Redmine в ту дату, в которую был сделан старт таймера в Clockify.
- Если вы работали в пятницу и забыли затрекать, то, после успешного выполнения команды "push" в понедельник, время будет затрекано в пятницу.
- Если вы запустили трекер в 23:30 вторника, а остановили в 01:00 среды, то время будет затрекано во вторник.
- Информация о затреканном времени удаляется из Clockify сразу после того, как была успешно перенесена в Redmine, т.е. после выполнения
push
-команды. - Если вы не выбрали никакой тег (аналог "Деятельность" в Redmine) в записи Clockify, то этой записи будет автоматически присвоен тег/деятельность "Разработка".
- Если вы указали несколько тегов в Clockify, то будет взята первая по списку деятельность.
docker-compose exec app ./manage.py --help
docker-compose exec app ./manage.py init
docker-compose exec app ./manage.py report
docker-compose exec app ./manage.py report --coeff 0.5
docker-compose exec app ./manage.py report --target 5.0
docker-compose exec app ./manage.py push
docker-compose exec app ./manage.py push -c 0.5
docker-compose exec app ./manage.py push -t 5.0
- введенное вами число пройдет валидацию только, если будет больше нуля;
report
- получить информацию о затреканном времени в Clockify;push
- перенести затреканное время из Clockify в Redmine и удалить всё затреканное время в Clockify;coeff
- умножает каждое затреканное время на значение coeff, т.е. можно легко затрекать -50% (-с 0.5
) от суммарного времени и не высчитывать это значение самому;target
- указывает итоговое суммарное значение затреканного времени, т.е. если вы суммарно затрекали 6.0h, но знаете, что 30m оказывали консультации во многих задачах по чуть-чуть и никак не смогли затрекать это время, то указывайте--target 6.5
.
- Прикрутить ТГ-бота, через который можно было бы выполнять все команды, который бы трекал время по расписанию, например, или напоминал что надо затрекать.
- logger вместо print
- ...