一个用于实时监控和可视化 ACM Claude 积分使用量的 Web 应用程序。
实时监控 ACM Claude 积分使用量,支持多时间范围查看和趋势分析
- 实时监控: 通过 SSE (Server-Sent Events) 实时展示积分使用量变化曲线
- 积分余额显示: 实时展示当前剩余积分数量,支持自动刷新
- 积分重置功能: 支持手动重置每日积分,以及多种自动重置触发条件(时间触发、阈值触发)
- 用户身份认证: 基于访问密钥的身份验证系统,保护数据安全
- 智能自动重置: 支持时间触发和阈值触发的自动重置,可同时配置多个触发条件
- 可视化图表: 使用 ECharts 生成美观的折线图展示积分使用趋势
- 多时间范围: 支持查看最近 1小时、2小时、3小时、6小时、12小时、24小时的使用情况
- 多模型对比: 支持同时展示不同 Claude 模型的积分使用情况
- 智能Cookie验证: 通过数据获取接口隐式验证,无需额外验证请求
- 配置管理: 支持自定义数据获取间隔和Cookie配置
- 单文件部署: 前端静态文件内嵌到后端二进制文件中,部署简单
顶部控制栏:
- 🟢/🔴 SSE连接状态图标:显示实时数据连接状态
- 绿色:已连接,正常接收实时数据
- 红色:连接断开,无法接收实时数据
- 🔄 刷新图标:立即获取最新积分趋势数据和剩余积分余额
▶️ 监控开关:启动/停止实时数据监控,控制定时数据获取- 🔁 重置开关:启用自动重置,支持配置多种自动重置的触发条件
- ⚙️ 设置图标:打开配置面板,管理Cookie、监控间隔和自动重置等设置
积分余额区域:
- 剩余积分数字:显示当前可用积分数量,实时更新,点击后执行手动重置当日积分操作
- 更新时间戳:最后一次数据更新的时间
- 状态指示器:通过光晕颜色显示重置状态
- 绿色光晕:当日未重置,可执行手动重置
- 紫色光晕:当日未重置,已启用自动重置
- 红色光晕:当日已重置
图表控制面板:
- 时间范围选择器:选择数据展示时间范围(1小时、2小时、3小时、6小时、12小时、24小时)
- 模型筛选开关:选择要显示的Claude模型类型(支持多模型同时显示)
- 图表缩放控制:鼠标滚轮缩放,拖拽平移查看详细数据
趋势图表区域:
- 折线图:实时展示积分使用趋势,不同颜色代表不同模型
- 数据点提示:鼠标悬停显示具体时间点的积分使用量
- 时间轴:自动调整时间刻度,便于查看数据变化
基础配置:
- Cookie设置:粘贴从ACM Claude Dashboard获取的完整Cookie字符串
- 监控间隔:选择数据获取频率(30秒-1小时可选)
- Cookie验证:自动验证Cookie有效性,失效时会提示更新
自动重置配置:
- 启用开关:开启/关闭自动重置功能
- 时间设置:配置每日自动重置的具体时间(HH:MM格式)
- 状态显示:显示自动重置功能的当前状态和下次执行时间
身份认证:
- 访问密钥:首次访问时输入启动时生成的访问密钥
- 会话状态:显示当前登录状态和剩余有效时间
- 登出功能:手动清除会话,重新要求身份验证
- Bun - 现代 JavaScript 运行时和包管理器
- Vite - 现代前端构建工具
- React 19 + TypeScript - UI 框架
- TailwindCSS 4 - 原子化 CSS 框架
- ECharts - 数据可视化图表库
- Lucide React - 现代图标库
- Go 1.23 - 后端编程语言
- Fiber v2 - 高性能 Web 框架
- BadgerDB - 嵌入式 NoSQL 数据库
- Resty - HTTP 客户端库
- Gocron - 定时任务调度器
- Go Embed - 静态文件嵌入
cccmu/
├── server/ # 后端代码
│ ├── client/ # API 客户端
│ ├── database/ # 数据库操作
│ ├── handlers/ # HTTP 处理器
│ ├── models/ # 数据模型
│ ├── services/ # 业务服务
│ ├── web/ # 静态文件嵌入
│ └── main.go # 程序入口
├── web/ # 前端代码
│ ├── src/
│ │ ├── components/ # React 组件
│ │ ├── pages/ # 页面组件
│ │ ├── api/ # API 客户端
│ │ └── types/ # TypeScript 类型定义
│ ├── dist/ # 前端构建输出
│ └── package.json
├── docs/ # 项目文档
├── Makefile # 构建脚本
└── README.md
最简单的部署方式,适合快速体验和临时使用:
# 拉取最新镜像并运行
docker run -d --name cccmu -p 8080:8080 ghcr.io/leafney/cccmu:latest
或使用 Docker Compose:
# docker-compose.yml (最简配置)
services:
cccmu:
image: ghcr.io/leafney/cccmu:latest
ports:
- "8080:8080"
restart: unless-stopped
# 启动容器
docker-compose up -d
注意:以上方式容器删除后数据会丢失,适合临时使用。
如需保留配置和历史数据,建议使用数据持久化方式:
# 拉取最新镜像
docker pull ghcr.io/leafney/cccmu:latest
# 创建数据目录并设置权限
mkdir -p ./data && chmod 777 ./data
# 运行容器(基础方式)
docker run -d \
--name cccmu \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
ghcr.io/leafney/cccmu:latest
# 运行容器(使用环境变量配置)
docker run -d \
--name cccmu \
-p 9090:9090 \
-e PORT=9090 \
-e LOG_ENABLED=true \
-e SESSION_EXPIRE=48h \
-v $(pwd)/data:/app/data \
ghcr.io/leafney/cccmu:latest
Docker Compose 环境变量配置:
# docker-compose.yml
services:
cccmu:
image: ghcr.io/leafney/cccmu:latest
container_name: cccmu
ports:
- "8080:8080"
restart: unless-stopped
volumes:
# 数据持久化目录映射
- ./data:/app/data
environment:
- PORT=8080 # 内部服务端口默认8080,通过该参数更改
- LOG_ENABLED=false # 生产环境建议关闭
- SESSION_EXPIRE=168h # 7天过期时间
# 创建数据目录并设置权限(首次部署时)
mkdir -p ./data && chmod 777 ./data
# 启动容器
docker compose up -d
访问 http://localhost:8080 开始使用。
重要提示:使用数据持久化部署时,需要确保数据目录具有正确的权限,否则容器可能无法写入数据文件。
从 Releases 页面下载对应平台的二进制文件:
# Linux/macOS
chmod +x cccmu-linux-amd64
./cccmu-linux-amd64
# Windows
cccmu-windows-amd64.exe
- Docker 镜像:
linux/amd64
(x86_64)linux/arm64
(ARM64)
- 二进制文件:
- Windows:
amd64
(x86_64) - macOS:
amd64
(Intel),arm64
(Apple Silicon M1/M2) - Linux:
amd64
(x86_64),arm64
(ARM64)
- Windows:
📖 详细部署指南: 查看 DEPLOY.md 了解完整的部署选项、配置参数和高级用法。
- Go: >= 1.23
- Bun: >= 1.0
- Node.js: >= 18 (可选,Bun 可替代)
# 安装项目依赖
make install
# 启动前端开发服务器
make dev-frontend
# 启动后端开发服务器
make dev-backend
# 同时启动前后端开发环境
make dev
# 完整构建项目
make build
构建完成后会生成 cccmu
可执行文件,包含完整的前后端应用。
# 使用默认端口 8080 运行
./cccmu
# 使用自定义端口运行
./cccmu -p 9090
# 启用详细日志输出(用于调试)
./cccmu -l
# 同时指定端口和启用日志
./cccmu -p 9090 -l
# 设置Session过期时间为24小时
./cccmu -e 24
# 设置Session过期时间为48小时(支持时间单位)
./cccmu -e 48h
# 查看帮助信息
./cccmu -h
# 查看版本信息
./cccmu -v
默认访问地址: http://localhost:8080
参数 | 缩写 | 描述 | 示例 |
---|---|---|---|
--port |
-p |
指定服务器端口号 | ./cccmu -p 9090 或 ./cccmu --port 9090 |
--log |
-l |
启用详细日志输出(用于调试和维护) | ./cccmu -l 或 ./cccmu --log |
--expire |
-e |
设置Session过期时间(默认168小时=7天) | ./cccmu -e 24 或 ./cccmu -e 48h |
--version |
-v |
显示版本信息并退出 | ./cccmu -v 或 ./cccmu --version |
--help |
-h |
显示帮助信息 | ./cccmu -h 或 ./cccmu --help |
日志控制说明:
- 默认模式:静默运行,仅显示必要的启动和错误信息
- 调试模式:使用
-l
或--log
参数启用详细日志,包括:- API 请求和响应详情
- 积分计算过程
- 数据处理状态
- 定时任务执行情况
- 性能影响:未启用日志时,调试输出被完全禁用,不影响运行性能
Session过期时间说明:
- 默认设置:168小时(7天)
- 数值格式:支持纯数字(按小时计算)或带时间单位的格式
- 支持单位:
h
- 小时(如24h
)m
- 分钟(如30m
)s
- 秒(如3600s
)
- 应用范围:控制用户身份认证的会话有效期,到期后需重新登录
- 安全考虑:较短的过期时间提高安全性,较长的过期时间提高使用便利性
配置优先级(按优先级从高到低排序):
- 命令行参数(最高优先级)
- 环境变量(中等优先级)
- 默认值(最低优先级)
支持的环境变量:
环境变量 | 对应命令行参数 | 描述 | 示例值 |
---|---|---|---|
PORT |
--port/-p |
服务器端口号 | 8080 , :3000 |
LOG_ENABLED |
--log/-l |
启用详细日志输出 | true , false , yes , no , 1 , 0 |
SESSION_EXPIRE |
--expire/-e |
Session过期时间 | 168h , 24 , 48h , 30m |
配置示例:
# 方式1:使用命令行参数
./cccmu -p 9090 -l -e 24
# 方式2:使用环境变量
export PORT=9090
export LOG_ENABLED=true
export SESSION_EXPIRE=24h
./cccmu
# 方式3:混合使用(命令行参数优先)
export PORT=8080
export LOG_ENABLED=false
./cccmu -p 9090 -l # 最终: 端口9090, 日志开启, 过期时间使用默认值
# 方式4:一次性设置环境变量
PORT=9090 LOG_ENABLED=true SESSION_EXPIRE=48h ./cccmu
使用 -v
参数可以查看应用的详细版本信息:
./cccmu -v
输出示例:
Version: v1.0.0
GitCommit: c3726fb
BuildTime: 2025-09-12 15:30:45
GoVersion: go1.23.1
版本信息说明:
- Version: 应用版本号(Git标签或commit短哈希)
- GitCommit: Git提交的短哈希值
- BuildTime: 构建时间(本地时间)
- GoVersion: 编译时使用的Go语言版本
应用启动时会自动生成访问密钥,用于保护数据安全:
🔑 当前访问密钥: 1b0fd7cfeaff7bce7990152d99512c92
⏰ Session过期时间: 168h0m0s
访问方式:
- 首次访问需要输入访问密钥进行身份验证
- 验证成功后会保存会话状态,默认有效期 7 天
- 访问密钥在应用启动时生成,删除密钥文件
data/auth
后,重启应用会生成新密钥
Docker 部署时的密钥管理:
通过数据目录映射,密钥文件在容器重启后保持不变。如需管理访问密钥,可以使用以下命令:
# 创建数据目录并设置权限(首次部署时)
mkdir -p ./data && chmod 777 ./data
# 查看容器中的访问密钥
docker exec cccmu /bin/sh -c "cat /app/data/auth"
# 直接查看宿主机上的密钥文件
cat ./data/auth
# 查看容器启动日志中的密钥信息
docker logs cccmu | grep "访问密钥"
# 删除密钥文件以重新生成新密钥
rm ./data/auth
docker restart cccmu
密钥文件说明:
- 密钥文件位置:容器内
/app/data/auth
,宿主机./data/auth
- 文件格式:纯文本,包含32位随机字符串
- 生成时机:应用首次启动或密钥文件不存在时自动生成
- 重新生成:删除密钥文件后重启容器即可生成新密钥
- 数据持久化:通过 volumes 映射,密钥和数据库在容器重启后保持不变
- 权限要求:使用数据持久化时,需要设置宿主机数据目录权限为
777
,确保容器能够正常读写
安全特性:
- 基于 Session 的身份验证机制
- 自动密钥轮换(应用重启时)
- 可配置的会话过期时间
- 本地数据库存储,确保数据隐私
支持配置多种自动重置触发条件,满足不同使用场景的需求:
触发条件类型(满足任一条件即执行重置):
-
时间触发:每日定时重置
- 设置每日重置的具体时间(如 18:30)
- 到达指定时间自动执行重置操作
-
阈值触发:积分余额低于设定值时重置
- 设置积分阈值(如积分低于10时触发)
- 支持限制检查时间范围(如仅在工作时间检查)
- 动态任务管理,仅在时间范围内创建检查任务,优化性能
- 智能提前停止,重置完成后立即终止检查任务,释放资源
核心特性:
- 多条件支持:可同时启用时间触发和阈值触发
- 或逻辑关系:多个条件之间为"或"的关系,任一条件满足即触发
- 每日限制:无论哪种条件触发,每天最多只执行一次重置
- 智能调度:任务协调机制避免与监控任务冲突
- 配置预览:实时显示所有启用条件的详细信息
使用说明:
-
基础配置:
- 在设置面板中启用"自动重置"功能
- 根据需要启用时间触发或阈值触发(或两者都启用)
-
时间触发设置:
- 启用"重置时间"开关
- 设置重置时间(格式:HH:MM,如 18:30)
-
阈值触发设置:
- 启用"积分低于阈值时触发"开关
- 设置积分阈值(如 10)
- 可选:启用"限制检查时间范围"并设置开始/结束时间
-
配置预览:
- 系统会显示所有启用条件的详细信息
- 明确说明多条件之间的"或"关系
- 显示阈值检查的时间范围(如有设置)
配置示例:
配置预览:自动重置将在以下条件下触发(满足任一条件即执行)
• 时间触发:每日 08:39 自动重置积分
• 阈值触发:当积分余额低于 10 时自动重置(仅在 07:42-07:44 检查)
* 无论哪种条件触发,每天最多只会自动重置一次
技术实现:
- 独立调度器:阈值检查使用专用调度器,与主监控任务分离
- 动态任务管理:仅在指定时间范围内创建阈值检查任务,范围外自动删除
- 智能预检查:任务创建和执行前都会检查重置标记,已重置则跳过,避免不必要的资源消耗
- 任务协调机制:阈值检查时临时暂停监控任务,避免重复API调用
- 智能提前停止:检测到重置完成后立即停止阈值检查任务,释放资源让正常监控恢复
- Cron定时任务:时间触发基于标准Cron表达式实现
- 智能防重复:基于数据库标记确保每日最多执行一次
- 错误恢复:重置失败时记录日志,不影响系统稳定性
- 访问 ACM Claude Dashboard
- 在浏览器开发者工具中复制完整的 Cookie 字符串
- 在应用设置页面中粘贴 Cookie 信息
支持配置以下时间间隔:
- 30 秒
- 1 分钟(默认)
- 5 分钟
- 10 分钟
- 30 分钟
- 1 小时
智能隐式验证:
- 通过积分数据获取和余额查询接口自动验证Cookie有效性
- 当API返回401状态码时自动检测Cookie失效
- 验证失败时会通过前端提示用户更新Cookie
- 无需额外的验证请求,减少API调用频次
支持以下时间范围:
- 最近 1 小时(默认)
- 最近 2 小时
- 最近 3 小时
- 最近 6 小时
- 最近 12 小时
- 最近 24 小时
{
"id": 11048661,
"type": "USAGE",
"endpoint": "v1/messages",
"statusCode": 200,
"creditsUsed": 9,
"createdAt": "2025-08-25T13:39:44.230Z",
"model": "claude-sonnet-4-20250514"
}
{
"remaining": 7542,
"updatedAt": "2025-09-01T10:30:45.123Z"
}
- Cookie 信息本地存储在 BadgerDB 中,确保数据安全
- 隐式Cookie验证:通过数据获取接口自动验证Cookie有效性,减少API调用
- 自动失败处理:Cookie失效时前端会提示用户更新,保护系统稳定性
- 智能错误处理:401状态码自动识别Cookie过期,及时反馈给用户
- 访问密钥保护:所有数据访问都需要有效的访问密钥
- Session管理:基于会话的身份验证,支持自动过期和清理
- 本地存储:所有敏感数据仅存储在本地,不传输到外部服务器
- 密钥轮换:应用重启时自动生成新的访问密钥,提高安全性
- 容器安全:容器隔离确保安全性,简化权限管理
- 防重复执行:智能检测当日是否已执行重置,无论哪种条件触发都遵循每日限制
- 任务隔离:阈值检查使用独立调度器,与主监控任务完全分离
- 动态资源管理:仅在必要时间范围内创建检查任务,避免资源浪费
- 任务协调机制:阈值检查时临时暂停监控任务,防止API调用冲突
- 智能任务停止:重置完成后阈值检查任务立即停止,正常监控自动恢复,确保积分数据持续更新
- 多条件容错:多个触发条件独立运行,单一条件失败不影响其他条件
- 错误恢复:重置失败时会记录详细日志,系统自动恢复正常状态
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature
) - 提交更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 开启 Pull Request
如果您遇到任何问题或有功能建议,请在 GitHub Issues 中提出。