feat: 用量改读 statusline 生产的本地快照(生产者/消费者),实时准确
原先读 statusline 的 /tmp API 兜底缓存;新版 Claude Code 走 stdin、该缓存不再刷新 → 数字过期(14% vs 实际 60%+)。改为消费「打过补丁的 claude-statusline 从 stdin 落盘的权威实时快照」: - USAGE_LOCAL_PATH 默认改指 ~/.claude/usage-snapshot.json - 修复 resets_at 解析:Claude Code stdin 给的是 epoch 数字(非 ISO),_parse_reset_ts 现兼容 epoch/ISO,否则算不出 time_pct、pace 会消失 - 仍不发任何网络请求;快照缺失/损坏 → "--" - 同步更新 CLAUDE.md / README.md 的数据源说明(生产者/消费者) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
16
README.md
16
README.md
@@ -24,7 +24,7 @@ eink-push/
|
||||
├── data.py # 数据层:拉真实数据并映射,失败回退占位 "--"(不回退 mock);天气/趋势缓存
|
||||
├── jm_api.py # jm-devops 后端统计接口客户端(设备密钥 client_secret 授权 + token 缓存)
|
||||
├── weather_api.py # 和风天气(QWeather)客户端(实时天气 + 今日温区)
|
||||
├── usage_local.py # Claude Code 用量:只读本地 statusline 缓存文件(不发网络请求)
|
||||
├── usage_local.py # Claude Code 用量:只读 statusline 生产的本地快照(不发网络请求)
|
||||
├── renderer.py # 渲染层:DashboardRenderer 生成 400×300 三色(黑/白/红)图片
|
||||
├── pusher.py # 推送层:按 .env 设备 MAC 直接推送图片(标准库 urllib)
|
||||
├── run.sh # cron 包装脚本(本机专用,git 忽略)
|
||||
@@ -55,8 +55,8 @@ ZECTRIX_API_KEY=zt_xxx ZECTRIX_DEVICE_ID=AA:BB:CC:DD:EE:FF python3 main.py
|
||||
# jm-devops 后端 / 和风天气
|
||||
JM_BASE_API=... JM_CLIENT_ID=...
|
||||
QWEATHER_HOST=... QWEATHER_KEY=... WEATHER_LOCATION=经度,纬度 WEATHER_TTL=900
|
||||
# Claude Code 用量(只读本地 statusline 缓存,不发请求)
|
||||
USAGE_LOCAL_PATH=/tmp/claude/statusline-usage-cache.json USAGE_WARN=80
|
||||
# Claude Code 用量(只读 statusline 生产的本地快照,不发请求)
|
||||
USAGE_LOCAL_PATH=~/.claude/usage-snapshot.json USAGE_WARN=80
|
||||
```
|
||||
|
||||
## 定时刷新(cron)
|
||||
@@ -77,9 +77,11 @@ USAGE_LOCAL_PATH=/tmp/claude/statusline-usage-cache.json USAGE_WARN=80
|
||||
- `GET /system/statistics/recent-days?days=30` —— 近30天每日数据(趋势图当前隐藏,仍会拉取并缓存)
|
||||
- **天气**:接入真实和风天气(QWeather,`weather_api.py`),定位固定南京·江宁。
|
||||
实时天气取 `now.text`/`now.temp`/`now.icon`,今日温区取 `/3d` 的 `daily[0]`。需配置 `QWEATHER_HOST` + `QWEATHER_KEY`。
|
||||
- **Claude Code 用量**:**只读本地**(`usage_local.py`,不发请求)——读 claude-statusline 落盘的
|
||||
`/tmp/claude/statusline-usage-cache.json`,取 5h/7d 的 `utilization` 与 `resets_at`。
|
||||
注:新版 Claude Code 经 stdin 喂 statusline,该缓存 `utilization` 可能滞后;`resets_at` 为绝对时间,故 pace 时间对比始终准确。
|
||||
- **Claude Code 用量**:**只读本地**(`usage_local.py`,不发请求),**生产者/消费者**模式——
|
||||
生产者是**打过补丁的 claude-statusline**:它把每次 Claude Code 经 stdin 喂来的**权威实时**额度
|
||||
落盘为快照 `~/.claude/usage-snapshot.json`(`five_hour`/`seven_day` 的 `utilization` + `resets_at`);
|
||||
本项目作消费者读取。活跃使用时快照持续刷新、准确;空闲时停在最后一次。**需先安装补丁版 statusline**
|
||||
(见其仓库 `bin/statusline.sh` 的 usage snapshot 段 + `node bin/install.js`)。
|
||||
- **日期 / 时间 / 上次更新**:真实系统时间。
|
||||
|
||||
> `data.py` 负责把响应映射成渲染结构;**任何接口失败都回退占位 `"--"`,不回退 mock**。
|
||||
@@ -92,7 +94,7 @@ USAGE_LOCAL_PATH=/tmp/claude/statusline-usage-cache.json USAGE_WARN=80
|
||||
- **趋势缓存** `.trend_cache.json`:按日期为 key,当天命中即不再调 `recent-days`,每天只拉一次。
|
||||
|
||||
两者拉取失败均**沿用旧缓存**避免天气区整片 `"--"`,仍无缓存才回退占位。想强制重拉删掉对应缓存文件即可(均已 git 忽略)。
|
||||
Claude 用量**不自建缓存**——直接读 statusline 落盘的本地文件,文件缺失/损坏即显示 `"--"`。
|
||||
Claude 用量**不自建缓存**——直接读 statusline 生产的本地快照 `~/.claude/usage-snapshot.json`,文件缺失/损坏即显示 `"--"`。
|
||||
|
||||
## 设计说明
|
||||
|
||||
|
||||
Reference in New Issue
Block a user