Popstas

Записки о Linux

1 Mar 2018, 20:30 - 6 мин читать

Интеграция Планфикса и Toggl для учета времени

Прошло ровно 2 года с тех пор, как я сделал прошлую интеграцию Планфикса с Git, так получилось, что я опять в отпуске и опять готов поделиться новой интеграцией.

Tl;dr: автоматическая отправка из Toggl в Планфикс через аналитики. Ссылки:

Toggl

Я постоянно пользуюсь Toggl с ноября 2015, так как у меня в рабочем дне бывает очень много переключений с одной задачи на другую (20-30 в день - обычное дело), Toggl стал для меня незаменимым инструментом для отслеживания того, на что сколько именно времени я потратил. Так как в нашей компании потраченное время напрямую влияет на зарплату и на стоимость для наших клиентов, учет времени для меня был довольно важен.

Еще до Toggl я делал что-то похожее на него, то ли не понял тогда, как им пользоваться, то ли там фич не хватало. В любом случае, ничего лучше Toggl для учета времени я не видел, хотя в последние годы и не искал, кто еще не пробовал, советую на него посмотреть - https://toggl.com

Планфикс

Планфикс не имеет из коробки автоматической системы учета времени, если не считать Таймера, который не ложится под нашу систему учета времени: мы используем кастомные аналитики, а Таймер умеет ставить только Фактическое время работы.

В то же время, на форуме уже не раз поднималась тема трекинга времени, в частности, интеграцией с Toggl

Я же последние 2 года переносил данные из Toggl в Планфикс вручную, это было сравнительно легко, чтобы было еще проще, я написал небольшой юзерскрипт, который сокращал ввод аналитики до пары кликов (не будет работать без дописывания под вас).

Схема была такая:

  • если задача закончена, смотрю общее время в Toggl и сразу переношу в Планфикс, через коммит или вручную
  • если задача вернулась в работу, считаю в уме, сколько я уже внес и сколько осталось
  • в конце месяца смотрю сумму по самым большим проектам, сравниваю с отчетом Планфикса и добавляю разницу

В общем, так можно было и продолжать пользоваться, но это было не очень удобно, да и часть времени все равно не доходила до Планфикса.

От прототипа до сегодня

Я знал, что у Планфикса и Toggl есть API, что можно это все использовать и связать, но мне казалось это слишком сложным (так и оказалось :) и я не мог придумать, как связывать записи в Toggl с задачами в Планфиксе.

Но вот месяц назад звезды сошлись и я вдруг понял: нужно хранить в Toggl номер задачи, а назад отправлять через email! Чтобы номер задачи был отдельно и не мельтешил, я решил, что разумнее всего будет сделать его в виде тега.

Тем же вечером я пришел домой и за 3 часа написал рабочий прототип: nodejs скрипт, который при запуске находит Toggl-записи с тегом из цифр, отправляет email на соответствующий адрес и отмечает в Toggl запись как отправленную добавлением к ней тега sent.

Следующую неделю я занимался ежедневным переписыванием с нуля проекта:

  1. NodeJS скрипт
  2. Electron приложение
  3. Express.js + серверный рендеринг twig
  4. Express.js + Vue + OnsenUI

Вечером переписывал, а днем использовал на работе последнюю рабочую версию.

В первые пару дней я понял, что теги с номером задач вручную ставить не очень удобно, поэтому я решился дописать официальное расширение Toggl для браузеров, чтобы прямо на странице задачи была кнопка Play, как положено. На удивление, это оказалось так просто, что я пожалел, что не сделал это давно. Естественно, я отправил pull request, который к сожалению был проигнорирован, как и другие недавние запросы интеграций. Если у вас есть github аккаунт и вы собираетесь пользоваться расширением, пожалуйста, оставьте палец вверх в пулл реквесте, может быть так быстрее примут, мне не хочется сопровождать два расширения.

К концу первой недели вся видимая часть уже выглядела почти так, как сейчас, но внутри было всё настолько прототипно, что кроме меня этим никто не мог пользоваться.

Потом я решил оставить web UI как есть, а серверную часть переписать на Go, который давно хотелось попробовать. Это разделило проект на 2 части: planfix-toggl-client (web UI), planfix-toggl-server (отправлялка и API для UI).

Через несколько дней я что-то сломал, и письма перестали доходить до Планфикса. Дело было в выходные, я решил, что письма стали попадать в спам. В тот день я решил отказаться от отправки письмами и переписать отправку на Планфикс API. Это в итоге добавило неделю, чтобы переписать на API без изменения остального. Конечно, API на Go для Планфикса никто не использовал, поэтому выделился еще один подпроект - planfix-go (API для между отправлялкой и Планфиксом). API позволило настроить весь процесс, не используя обработку действий в Планфиксе, как я делал раньше, а сразу отправлять готовую аналитику с гарантией того, что она отправится и без необходимости указывать логин и пароль от своего ящика в конфиге.

После этого уже были мелкие доработки, чистка кода, добавление удобняшек, дальнейшая история есть в CHANGELOG.md.

Наконец, я вернулся к расширению браузера, до сих пор оно работало в режиме разработчика, чтобы этим мог пользоваться кто-то, кроме меня, нужно было опубликовать расширение официально, что я и сделал, оказалось тоже всё просто, и через час расширения для Chrome и Firefox уже были доступны.

Планфикс + Toggl

Что получилось в итоге, я постарался изложить в описании проекта.

UI в общем-то сделан больше для интереса, для проверки того, что процесс запущен, но также выполняет одну удобную мне функцию: я могу из него перейти на страницу любой из последних 10-15 задач, над которыми я работал. В левой колонке указано количество сгруппированных записей (кол-во переключений), в правой - потраченное на задачу время, примерно как в Toggl, но с группировкой по задачам Планфикса.

Выглядит это так:

Остальной “интерфейс” довольно суров: конфиг для настройки и лог для обратной связи.

Как я использую planfix-toggl-server (не очень удачное название, решил не называть sender, вдруг еще что-то захочется добавить):

  • Добавил программу в автозагрузку Windows через планировщик заданий
  • Программа работает на фоне и раз в час отправляет накопившиеся неотправленные записи
  • Новую задачу я начинаю в Планфиксе, через расширение, после этого переключаюсь на нее уже через Toggl (отправлялка уберет тег sent из активной записи, если вы вернулись к уже отправленной задаче)

Что насчет отправки: способ через API доступен только для платных аккаунтов Планфикса, тут никакого заговора нет, просто так надежнее. По этой же причине отправка через email стала еще ненадежнее, т.к. я ей больше не пользуюсь.

Что насчет паролей: чтобы пользоваться отправлялкой, вам нужно будет внести свои ключи API от Планфикса и Toggl и логин с паролем от вашего юзера в Планфиксе, тут ничего секьюрного я не придумал (да и не пытался). Все исходники открыты, я могу только сказать, что никакие данные не отправляются никуда, кроме как по маршруту из Toggl в Планфикс, статистика не собирается (поэтому надеюсь получить обратную связь другими способами).

Конечно, проект такой, что вряд ли им сможет пользоваться не программист, но я постарался сделать всё просто, насколько возможно было сделать без написания полноценного UI и чтобы не делать больше того, что мне хотелось сделать. Буду рад, если кому-то еще это пригодится.

Код

Теги: planfix toggl go nodejs vue onsenui

Итоги 2017 года Переезд с Windows на Ubuntu 18.04, попытка номер 5

comments powered by Disqus