本文应网友
suka
的要求折腾,但是否符合他得要求就不得而知了,因为老苏不是程序员,没有这方面的需求;
什么是 Wakatime ?
WakaTime
是一个可以统计你在不同语言、项目上写代码时长的工具。 它支持多种IDE
、编辑器。 它只在你敲键盘时统计,因此得到的是写代码的时间。 另外它会根据你打开的文件夹来判断你在哪个项目上。
什么是 Wakapi ?
Wakapi
是一个极简主义、自托管的WakaTime
兼容后端,可帮助您跟踪使用不同编程语言等在不同项目上编码所花费的时间,用于编码统计。
安装
在群晖上以 Docker 方式安装。
建数据库
老苏用了群晖自带的 MariaDB 10
数据库。
在 phpMyAdmin
中创建名为 wakapi
的空数据库。
为便于说明,假设数据库密码为
123456
所以根据上面的设置,最后得到的数据库相关的参数如下:
- 数据库主机:
192.168.0.197
,与群晖主机IP
一致; - 数据库端口:
3307
; - 数据库用户:
wakapi
- 数据库密码:
123456
- 数据库库名:
wakapi
,因为勾选了与用户同名;
镜像下载
官方没有在 docker hub
上发布镜像,而是发表到了 ghcr.io
老苏折腾时,
latest
对应的版本为2.8.1
用 SSH
客户端登录到群晖后,执行下面的命令
# 拉取镜像
docker pull ghcr.io/muety/wakapi:latest
如果没有科学上网,很可能会拉不动,可以试试 docker
代理网站:https://dockerproxy.com/,但是会多几个步骤
# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/muety/wakapi:latest
# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/muety/wakapi:latest ghcr.io/muety/wakapi:latest
# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/muety/wakapi:latest
下载完成后,可以在 映像
中找到
命令行安装
如果你熟悉命令行,可能用 docker cli
更快捷
# 新建文件夹 wakapi
mkdir -p /volume1/docker/wakapi/data
# 进入 wakapi 目录
cd /volume1/docker/wakapi
# 运行容器
docker run -d \
--restart unless-stopped \
--name wakapi \
-p 3047:3000 \
-v $(pwd)/data:/data \
-e WAKAPI_PASSWORD_SALT=6EbmsMZ2keIZR0F0Syg7Y4TMxflr5Dmd \
-e WAKAPI_DB_TYPE=mysql \
-e WAKAPI_DB_HOST=192.168.0.197 \
-e WAKAPI_DB_PORT=3307 \
-e WAKAPI_DB_NAME=wakapi \
-e WAKAPI_DB_USER=wakapi \
-e WAKAPI_DB_PASSWORD=123456 \
-e ENVIRONMENT=prod \
ghcr.io/muety/wakapi:latest
WAKAPI_PASSWORD_SALT
:密码;WAKAPI_DB_TYPE
:数据库类型;WAKAPI_DB_HOST
:数据库主机;WAKAPI_DB_PORT
:数据库端口;WAKAPI_DB_NAME
:数据库库名;WAKAPI_DB_USER
:数据库用户名;WAKAPI_DB_PASSWORD
:数据库密码;ENVIRONMENT
:使用开发设置还是生产设置,设置为prod
表示为生产设置;
更多的环境变量,请参考官方文档:https://github.com/muety/wakapi/blob/master/README.md#-configuration-options
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
version: '3.7'
services:
wakapi:
image: aceberg/rediary
container_name: rediary
restart: always
ports:
- 3047:3000
volumes:
- ./data:/data
environment:
# See README.md and config.default.yml for all config options
WAKAPI_DB_TYPE: "mysql"
WAKAPI_DB_NAME: "wakapi"
WAKAPI_DB_USER: "wakapi"
WAKAPI_DB_PASSWORD: "123456"
WAKAPI_DB_HOST: "192.168.0.197"
WAKAPI_DB_PORT: "5432"
ENVIRONMENT: "prod"
WAKAPI_PASSWORD_SALT: "6EbmsMZ2keIZR0F0Syg7Y4TMxflr5Dmd"
然后执行下面的命令
# 新建文件夹 wakapi
mkdir -p /volume1/docker/wakapi/data
# 进入 wakapi 目录
cd /volume1/docker/wakapi
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
在浏览器中输入 http://群晖IP:3047
就能看到主界面
点右上角的 login
,第一次需要注册账号
注册成功后
再次 login
,登录成功后的主界面
可以看到设置说明,尤其是下面这段代码后面可能会用到
跟客户端数据采集的方式有关,老苏后来用的是通过
Wakatime
后台采集的,所以并没用上;
[settings]
api_url = http://192.168.0.197:3047/api
api_key = 93a3577e-2330-4ae9-a86c-a93fbb741764
其中:
api_url
:是指 API
服务的地址;
api_key
:是指访问 Wakapi
服务的 API Key
,之所以要强调是因为我们还会用到 Wakatime
服务的 API Key
;
注册 Wakatime
打开 https://wakatime.com/signup 注册账号
登录成功后,可以在 Setting
--> Account
--> API key
中找到 Wakatime API Key
如果你找不到,也可以在浏览器中直接访问 https://wakatime.com/api-key
安装插件
为自己的 IDE
安装插件,插件的下载地址:https://wakatime.com/plugins
虽然老苏不写代码,但是这些客户端中,也会用到 Chrome
、Obsidian
、VS Code
和 Word
。
考虑到老苏用的最多的是 Obsidian
,所以就试试 OB
的插件,点击 OB
的图标后,会有详解的教程
在 OB
插件市场中搜索 wakatime
并安装
还需要启用
输入 API key
,这里是 Wakatime API Key
因为 OB
插件没有设置 URL
的地方,所以数据默认是传到 Wakatime
网站的
所有 WakaTime
文本编辑器插件,都会使用 WakaTime cli
,360
可能会阻止,添加信任就可以
当插件正常工作时,Wakatime
网页上会有插件的工作状态
能监测到插件的平台和版本
接下来我们还要通过 Wakapi
的整合功能,读取 Wakatime
的数据
导入数据
有两种方法拿到前端插件采集的数据:
1、第一种:可以通过在客户端侧安装代理来转发数据到 Wakapi
,官方提供了安装设置的说明:https://github.com/muety/wakapi/wiki/Advanced-Setup:-Client-side-proxy
2、从 Wakatime
导入数据到 Wakapi
老苏测试了第二种方法;
回到 Wakapi
的后台,Settings
--> Integrations
点 Connect
,如果设置没问题的话,就可以 Import Data
了
导入数据不可撤销的
一开始是没有数据的
需要时间的积累,第二天WakaTime
的面板
在 Wakapi
的面板
感觉和
WakaTime
并不同步,但我也说不上来,或者只是统计口径不一样?
小结
如果仅限于显示 WakaTime
的数据,显然意义不大,Wakapi
具备和第三方应用,比如 Prometheus
、Grafana
的整合能力,这可能才是这个项目的意义所在吧
参考文档
muety/wakapi: 📊 A minimalist, self-hosted WakaTime-compatible backend for coding statistics
地址:https://github.com/muety/wakapi
Wakapi – Coding Statistics
地址:https://wakapi.dev/
WakaTime
地址:https://github.com/wakatime
WakaTime - Dashboards for developers
地址:https://wakatime.com/