После создания базы данных MySQL выполните SQL-скрипты в каталоге sql
в указанном порядке.
Параметр | Описание | Значение по умолчанию |
---|---|---|
SERVER_PORT | Номер порта сервера | 3040 |
WAKATIME_APP_KEY | Ключ приложения Wakatime | |
WAKATIME_PROXY_URL | Адрес прокси-сервера для доступа к API Wakatime, например: socks5://127.0.0.1:1080 Укажите значение в зависимости от ваших требований | false, что означает отключение использования прокси |
WAKATIME_FTQQ_KEY | Ключ SCKEY для Server酱, см. http://sc.ftqq.com, если пустое значение — сообщения этого типа не будут отправлены | |
WAKATIME_DINGDING_KEY | Токен бота Dingding, если пустое значение — сообщения этого типа не будут отправлены | |
START_DAY | Дата начала записи | 2016-01-01 |
MYSQL_URL | Адрес подключения к базе данных MySQL | jdbc:mysql://127.0.0.1:3306/wakatime?characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=PRC |
MYSQL_USERNAME | Логин пользователя базы данных MySQL | wakatime |
MYSQL_PASSWORD | Пароль пользователя базы данных MySQL | 123456 |
JVM_OPTS | Параметры запуска JVM, полезны при запуске контейнером | -Xmx256m -Xms64m -Xss256k |
src/main/resources/application-config.properties
.WakatimeSyncApplication
.mvn -DskipTests clean package
docker build -t wf2311/wakatime-sync:1.0 .
```## Запуск приложения в контейнере
### Через Docker
```shell
docker run -d -t -p 3040:3040 -v ~/logs/wakatime-sync/:/application/logs \
-e JAVA_OPTS='-Xmx256m -Xms64m -Xss256k' \
-e SERVER_PORT='3040' \
-e WAKATIME_APP_KEY='<WAKATIME_APP_KEY>' \
-e WAKATIME_PROXY_URL='false' \
-e WAKATIME_FTQQ_KEY='<WAKATIME_FTQQ_KEY>' \
-e WAKATIME_DINGDING_KEY='<WAKATIME_DINGDING_KEY>' \
-e START_DAY='2020-01-01' \
-e MYSQL_URL='jdbc:mysql://<ip:port>/wakatime?characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=PRC' \
-e MYSQL_USERNAME='wakatime' \
-e MYSQL_PASSWORD='123456' \
--name wakatime-sync wf2311/wakatime-sync:1.0
Файл docker-compose.yml
версия: "3"
сервисы:
wakatime-sync:
образ: wf2311/wakatime-sync:1.0
имя_контейнера: wakatime-sync
окружение:
- JAVA_OPTS=-Xmx256m -Xms64m -Xss256k
- SERVER_PORT=3040
- WAKATIME_APP_KEY=<WAKATIME_APP_KEY>
- WAKATIME_PROXY_URL=false
- WAKATIME_FTQQ_KEY=<WAKATIME_FTQQ_KEY>
- WAKATIME_DINGDING_KEY=<WAKATIME_DINGDING_KEY>
- START_DAY=2016-02-01
- MYSQL_URL=jdbc:mysql://<ip:port>/wakatime?characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=PRC
- MYSQL_USERNAME=wakatime
- MYSQL_PASSWORD=123456
тома:
- ~/Share/logs/wakatime-sync/:/application/logs
порты:
- "3040:3040"
jdbc:mysql://<mysql-ip>:<mysql-port>/<mysql-db>?characterEncoding=utf8&...
jdbc
для связи. В приведённой выше jdbc-url
, если <mysql-ip>
заполнен значением localhost
или 127.0.0.1
, это не позволит обратиться к хосту. Рекомендуется использовать публичный IP адрес. Если у вас нет публичного IP адреса, существуют решения в интернете. Конечно, если вы используете docker-compose
, <mysql-ip>
можно указать имя сервиса mysql
.jre
или jdk
, Oracle
может потребовать от пользователя выполнения некоторых проверок, подробнее см.:https://blog.csdn.net/wengyupeng/article/details/878978663. Этот проект автоматически собирает данные за предыдущий день каждый день. Если вам требуется импортировать исторические данные, вы можете вызвать соответствующие интерфейсы проекта вручную:
curl -X POST http://<ваш_домен>:<порт>/api/v1/sync \
-d day=<число_дней_для_синхронизации> \
-d apiKey=<ваши_ключи_api_wakatime>
WakaTime — это инструмент для отслеживания времени, затраченного на программирование, который поддерживает большинство популярных сред разработки и браузер Google Chrome.
WakaTime предлагает множество различных графиков для анализа временных данных работы. Однако, как бесплатному пользователю, доступен просмотр только последних 14 дней; чтобы получить доступ ко всем данным, требуется ежемесячная подписка стоимостью $9.К счастью, WakaTime предлагает API, который позволяет получать первичные данные о времени работы через интерфейс (даже для бесплатных пользователей доступен просмотр только последних 14 дней). Этот проект использует API WakaTime для сохранения данных WakaTime в базе данных, а затем отображает их с помощью плагинов для графиков. В настоящее время реализовано три типа графиков:
График продолжительности работы над проектами ежедневно:
График активности за указанный период времени:
Календарь ежедневной продолжительности работы над кодом:
Backend: JDK 1.8, Spring Boot, Jodd-HTTP, Thymeleaf;
Database: MySQL 5.7;
Frontend: Moment.js, ElementUI, AntV-G2, ECharts;
Уведомление сервис: Server酱, Диньдин робот;Логика проекта довольно простая — каждый день автоматически собираются данные за прошедший день через API WakaTime и сохраняются; затем они отображаются с помощью графических плагинов. В будущем будут дорабатываться функции кэширования запросов и синхронизации уведомлений.Использование AntV-G2 и ECharts объясняется тем, что для представления временной последовательности можно использовать AntV-G2, но для создания календарной диаграммы использование AntV-G2 было бы слишком сложным, поэтому была выбрана ECharts.
Начальный вариант проекта использовал базу данных MongoDB, однако впоследствии был заменён на MySQL из соображений универсальности и удобства использования. Код версии с MongoDB находится в ветке mongodb.
Замените или настройте значения wakatime.app.key
и spring.datasource.*
в конфигурационном файле src/main/resources/application.yml
. Установка возможна с использованием Maven или Docker.
Скрипт для создания базы данных расположен в файле sql/wakatime_sync.sql
.
Версия проекта с использованием MongoDB доступна в ветке mongodb.
Пример адреса: https://wakatime.wangfeng.pro/.### Уведомления
В системе есть задача, которая запускается ежедневно в 09:00 и отправляет уведомление о времени работы за предыдущий день в DingDing или WeChat согласно настроенным параметрам;
Необходимо указать соответствующие параметры в файле application.yml
:
wakatime.ftqq-key
;access_token
в качестве значения параметра wakatime.dingding-key
;Если вы не хотите использовать уведомления, закомментируйте соответствующие параметры в файле application.yml
или установите их значением пустой строки.### Возможные проблемыmysql-connector-java
драйвер зависит от часового пояса сервера MySQL. Если часовой пояс вашего MySQL отличается от часов вашей программы и часов, указанных в личных настройках WakaTime, то это может привести к некорректному времени в сохранённых данных. Решение заключается в корректировке часов в личных настройках WakaTime и установке правильного часового пояса в базе данных MySQL либо использовании версии 5.x
драйвера mysql-connector-java
.POST /api/v1/sync
или обратиться к тестовым методам проекта. При использовании тестовых методов следует избегать одновременного запуска большого количества потоков для вызова API, так как это может привести к ограничению скорости.## TODOВы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )