用于统计编码时长的Wakapi

本文应网友 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 客户端登录到群晖后,执行下面的命令

1
2
# 拉取镜像
docker pull ghcr.io/muety/wakapi:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

1
2
3
4
5
6
7
8
# 如果拉不动的话加个代理
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 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 新建文件夹 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 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.7'

services:
wakapi:
image: ghcr.io/muety/wakapi:latest
container_name: wakapi
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: "3307"
ENVIRONMENT: "prod"
WAKAPI_PASSWORD_SALT: "6EbmsMZ2keIZR0F0Syg7Y4TMxflr5Dmd"

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 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 后台采集的,所以并没用上;

1
2
3
[settings]
api_url = http://192.168.0.197:3047/api
api_key93a3577e-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

虽然老苏不写代码,但是这些客户端中,也会用到 ChromeObsidianVS CodeWord

考虑到老苏用的最多的是 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 具备和第三方应用,比如 PrometheusGrafana 的整合能力,这可能才是这个项目的意义所在吧

参考文档

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/