Qwen Code 用量统计工具。通过监听 Qwen Code 的 status line JSON 数据,自动计算增量并存储到 SQLite,支持按天/周/月/5小时导出 Markdown 用量报表。
qwen-usage/
├── cmd/
│ └── qwen-usage/
│ └── main.go # CLI 入口
├── internal/
│ ├── config/
│ ├── config.go # 配置管理
│ └── config_test.go # 配置测试
│ ├── database/
│ ├── db.go # 数据库接口
│ ├── sqlite.go # SQLite 实现
│ ├── models.go # 数据模型
│ └── database_test.go # 数据库测试
│ ├── server/
│ └── server.go # HTTP 服务
│ ├── commands/
│ └── commands.go # 命令实现
│ └── logger/
│ ├── logger.go # 日志系统
│ └── logger_test.go # 日志测试
├── pkg/
│ └── platform/
│ ├── platform.go # 跨平台兼容处理
│ └── platform_test.go # 平台测试
├── test/
│ └── mocks/
│ ├── mock_db.go # Mock 数据库
│ ├── mock_http.go # Mock HTTP 客户端
│ └ mock_test.go # Mock 测试
├── bin/ # 编译输出
├── go.mod
├── go.sum
├── Makefile # 构建脚本
└── README.md
┌─────────────┐ HTTP(超时100ms) ┌─────────────────┐
│ qwen-usage │ ─────────────────► │ qwen-usage │
│ record │ 成功/失败都返回 │ server │
│ (CLI客户端) │ ◄───────────────── │ (后台守护进程) │
└─────────────┘ 立即输出状态行 └────────┬────────┘
│ │
│ server不可用时 ▼
│ 直接写入 SQLite ┌─────────────┐
└──────────────────────────────►│ SQLite │
└─────────────┘
- Server:后台 HTTP 服务,维护内存缓存累计值(
sync.Mutex保护),计算增量后写入 SQLite - CLI Client:轻量客户端,server 不可用时自动降级直接写入 SQLite + 输出状态行
- 会话管理:
start自动探测并启动 server,stop减少计数,归零时 server 优雅退出 - 直接访问:
export/clear命令直接操作 SQLite,不依赖 server
# 克隆仓库
cd qwen-usage
# 使用 Makefile 构建
make build # 当前平台
make build-linux # Linux (WSL 兼容)
make build-windows # Windows
make build-all # 所有平台
# 或直接使用 go build
go build -o bin/qwen-usage ./cmd/qwen-usage- Go 1.23+
- 使用
modernc.org/sqlite(纯 Go 实现,无需安装 sqlite3 系统库,跨平台兼容)
本项目完全兼容 WSL Ubuntu 22:
- 使用纯 Go SQLite 驱动(
modernc.org/sqlite),无需 CGO - 跨平台路径处理(
filepath.Join) - 自动检测操作系统并显示正确的命令提示
- 支持 Linux 信号处理(SIGINT/SIGTERM)
# 在 WSL 中构建
make build-linux
# 安装到 PATH
cp bin/qwen-usage ~/.local/bin/配置文件:~/.qwen/usage/config.json
首次运行自动生成默认配置:
{
"server_addr": "127.0.0.1:9527",
"db_path": "~/.qwen/usage/usage.db",
"client_timeout_ms": 100,
"server_write_timeout_ms": 50
}start 命令会自动探测 server 是否就绪,未就绪则在后台启动,然后增加会话计数:
qwen-usage start # 自动探测/启动 server,计数 +1
qwen-usage stop # 计数 -1,归零时 server 自动退出多会话场景:每个 Qwen Code 会话启动时调用 start,结束时调用 stop,计数归零后 server 自动关闭。
如需手动管理 server:
qwen-usage server # 前台运行
qwen-usage server & # Linux/macOS 后台运行
qwen-usage kill # 强制关闭在 ~/.qwen/settings.json 中添加:
{
"ui": {
"statusLine": {
"type": "command",
"command": "input=$(cat); /path/to/qwen-usage record <<< \"$input\""
}
},
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "/path/to/qwen-usage start",
"name": "qwen-usage-start",
"description": "Start qwen-usage server for token tracking"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "/path/to/qwen-usage stop",
"name": "qwen-usage-stop",
"description": "Stop qwen-usage server when session ends"
}
]
}
]
}
}
start会自动探测并启动 server,无需额外的启动脚本。
# 按时间段汇总统计
./qwen-usage export # 导出今天
./qwen-usage export -period 5h # 导出最近5小时
./qwen-usage export -period week # 导出本周
./qwen-usage export -period month # 导出本月
./qwen-usage export -json # JSON 格式
# 显示最近记录列表
./qwen-usage export -n 20 # 最近20条记录
./qwen-usage export -n 50 -json # 最近50条记录(JSON格式)报表内容:
- 按模型统计:请求数、延迟(Avg/P90/P95)、各类 token、缓存命中率、吞吐量
- 汇总:总调用、总 token、平均延迟
- 上下文窗口历史最值:最大上下文窗口容量、最大输入/输出 token 数
延迟百分位使用 SQL 窗口函数在数据库层计算,避免全量加载延迟数据到内存。
# 运行所有测试
make test
# 运行测试并生成覆盖率报告
make test-coverage
# 运行特定模块测试
go test -v ./internal/database
go test -v ./test/mocks用于增量计算,记录每个 (session_id, model_name) 的累计 API 请求、延迟、各类 token 数。
每次 API 调用的增量数据,包含延迟、各类 token 数、记录时间。按时间索引。
单行聚合表,记录历史中出现的最大上下文窗口参数:
| 字段 | 说明 |
|---|---|
max_context_window_size |
最大上下文窗口容量 |
max_total_input_tokens |
最大输入 token 数 |
max_total_output_tokens |
最大输出 token 数 |
每次 record 收到有效 context_window_size > 0 的数据时,使用 MAX() 语义原子更新。该表不记录逐条快照,仅保留历史最值。
# 开发环境设置
make dev-setup
# 代码格式化
make fmt
# 代码检查
make vet
make lint# 会话管理(自动)
qwen-usage start # 自动探测/启动 server,增加会话计数
qwen-usage stop # 减少会话计数,归零时 server 自动退出
qwen-usage server # 手动启动 server(前台)
qwen-usage kill # 强制关闭 server
# 数据记录
qwen-usage record # 记录用量(server 不可用时自动写入本地 DB)
# 数据导出
qwen-usage export # 导出今天报表
qwen-usage export -period 5h # 导出最近5小时
qwen-usage export -period week # 导出最近一周
qwen-usage export -period month # 导出最近一个月
qwen-usage export -n 20 # 显示最近20条记录
qwen-usage export -n 50 -json # 最近50条记录(JSON格式)
qwen-usage export -json # JSON 格式输出
# 数据清理
qwen-usage clear # 清理31天前数据
qwen-usage clear -days 7 # 清理7天前数据
# 帮助
qwen-usage -h # 显示全局帮助
qwen-usage export -h # 显示 export 子命令帮助
qwen-usage server --help # 显示 server 子命令帮助
qwen-usage <command> -h # 显示任意子命令帮助
# 其他
qwen-usage version # 显示版本每个子命令都支持 -h 或 --help 参数查看详细帮助:
qwen-usage server -h # 服务启动帮助
qwen-usage start -h # 会话计数增加帮助
qwen-usage stop -h # 会话计数减少帮助
qwen-usage kill -h # 强制关闭帮助
qwen-usage record -h # 用量记录帮助
qwen-usage export -h # 报表导出帮助
qwen-usage clear -h # 数据清理帮助Apache-2.0 license