建好MySQL数据库后后,按序号顺序依次执行sql
目录下的sql脚本
参数 | 含义 | 默认值 |
---|---|---|
SERVER_PORT | 服务端口号 | 3040 |
WAKATIME_APP_KEY | wakatime app key | |
WAKATIME_PROXY_URL | wakatime接口访问代理地址,例如:socks5://127.0.0.1:1080 请根据实际情况配置 | false,表示不开启代理 |
WAKATIME_FTQQ_KEY | Server酱 SCKEY,见http://sc.ftqq.com,为空表示不发生此类消息通知 | |
WAKATIME_DINGDING_KEY | 钉钉机器人token,为空表示不发生此类消息通知 | |
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 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文件
version: "3"
services:
wakatime-sync:
image: wf2311/wakatime-sync:1.0
container_name: wakatime-sync
environment:
- 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
volumes:
- ~/Share/logs/wakatime-sync/:/application/logs
ports:
- "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
可能会要求使用者进行一些验证,详见:
curl -X POST http://<your-domain>:<your-port>/api/v1/sync \
-d day=<sync-days-num> \
-d apiKey=<your-wakatime-api-key>
WakaTime 是一款可以记录你的编码时间的工具,目前支持绝大部分主流的 IDE 以及 Chrome 浏览器。
WakaTime 提供了丰富多样的图表可以多维度地查看自己的编码时间情况。不过作为免费用户,最多只能查看自己最近14天的数据;如果要查看全部的数据,需要 $9/月的订阅费用。
还好 WakaTime 提供了 API 接口,通过接口可以获取到编码时间统计情况的原始数据(作为免费用户还是有只能查看最近14天数据的限制)。
本项目通过 WakaTime 提供的 API 接口,可以把自己的 WakaTime 数据保存在的数据库中,然后利用图表插件展示出来,目前已完成三种类型的图表展示:
后端:JDK1.8、SpringBoot、Jodd-HTTP、Thymeleaf;
数据库:MySQL 5.7;
前端:Moment.js、ElementUI、AntV-G2 、Echarts;
项目逻辑比较简单,就是每天会定时通过 WakaTime 的 API 抓取并保存前一天的数据,再通过图标插件展示出来。之后还会完善接口缓存、同步通知等功能;
同时使用了 AntV-G2 和 Echarts 的原因是因为持续时间图可以用 AntV-G2 实现,但日历图用 AntV-G2 实现过于复杂,就采用了用 Echarts 实现日历图;
另外本项目最初是的数据库是 MongoDB ,但是考虑到通用性和易用性后来又换成了 MySQL。MongoDB 版本的代码也实现了相关的同步展示逻辑,代码在 mongodb 分支中。
替换或设置好src/main/resources/application.yml
配置文件中的wakatime.app.key
和spring.datasource.*
相关数据库配置,采用 maven 打包的方式安装即可,支持 Docker 方式安装。
数据库建库脚本位于sql/wakatime_sync.sql
中。
数据库使用 MongoDB 的版本位于分支 mongdb 中。
示例地址:https://wakatime.wangfeng.pro/。
系统中有一个定时任务,会在每天早上09:00会根据配置信息想钉钉或微信发送上一天的编码时间信息;
需要在application.yml
配置对应的参数:
wakatime.ftqq-key
的值;wakatime.dingding-key
的值;如果不想使用对应的消息通知,请将application.yml
中对应的参数注释掉或将值置为空
mysql-connector-java
驱动使用的是MySQL服务端的时区,如果你使用的MySQL的时区和你程序中的时区以及你在 WakaTime 个人设置中的时区不一致,就会导致保存的相关数据中时间不准,解决办法就是首先调整好 WakaTime 个人设置里的时区,再调整 MySQL 数据库的时区,或者是使用 5.X
版本的mysql-connector-java
驱动。POST /api/v1/sync
或参见项目中的测试方法。使用测试方法进行时不能同时使用太多的线程去同时调用 API 接口,会被限流。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型