
Timeglass 如何判断你在干活文件监控、超时自动暂停与 MBU 计费原理剖析【免费下载链接】glassAutomated time tracking for Git repositories. [DEPRECATED]项目地址: https://gitcode.com/gh_mirrors/gla/glassTimeglass 是一款面向 Git 仓库的全自动工时追踪工具Automated time tracking for Git repositories用 Go 编写100% 运行在你的本地工作站——不需要联网、不需要注册账号。它通过 git hooks 和文件监控来判断你是否在干活仓库一有文件变动计时器自动启动一段时间没有活动自动暂停你实际花费的时间还会自动写进下一次git commit。下面带你完整剖析它的文件监控、超时自动暂停与 MBU 计费三大核心原理。三大核心机制一图读懂机制触发条件行为 文件监控仓库内任意文件发生增删改计时器自动启动 / 唤醒Unpause⏸️ 超时自动暂停连续一段时间无文件活动计时器自动暂停Pause MBU 计费每过一个计费周期且计时器未暂停累计时间 最小计费单元三者都由后台守护进程 glass-daemon/timer.go 中的Timer驱动状态则持久化在 ledger 账本里。文件监控原理谁动了我的仓库Timeglass 的核心思路非常朴素你在改文件就是你在干活。计时器启动时会创建一个递归Recursive目录监控器监听整个项目目录监控器以约 50ms 的延迟Latency批量收集文件事件避免把一次保存拆成几十个碎片事件每次文件活动都会产生一个唤醒事件wakeup投递给计时器的控制循环如果此时计时器处于暂停状态事件会把它自动唤醒如果已在运行则只记录仍有活动。也就是说你敲代码、保存文件、切换分支计时器要么自动开始、要么继续保持运行全程无需手动 start/stop。监控器的创建与启动逻辑见 glass-daemon/timer.go 中的Start()方法事件处理循环中对应的就是ev : -wakeup分支。 注意项目放在网络卷如 NFS上时文件监控支持可能不稳定README 的 Known Issues 中有相关说明详见 README.md。超时自动暂停多久没动静算停工判断你在干活的另一半逻辑是没有动静就暂停。计时器的控制循环里挂着一个超时计时器time.After(Timeout)一旦超时时间内没有任何文件事件到来计时器就会自动进入暂停状态。关键规则是——Timeout 4 × MBU默认 4 个最小计费单元即 4 分钟。这个规则写死在 glass-daemon/timer.go 中t.timerData.Timeout 4 * t.timerData.MBU。所以只要你把 MBU 调大超时阈值也会按比例放大两个参数始终保持联动。暂停后的世界是半休眠的时间累计被冻结不再增加文件监控器仍然在岗随时等待下一次活动你回来继续敲键盘的瞬间计时器被唤醒从断点继续累计。整个过程对用户完全透明——你端起咖啡离开计时自动停坐下继续写代码计时自动走。MBU 计费原理最小计费单元MBUMinimal Billable Unit最小计费单元是 Timeglass 计时的分辨率。默认值为1 分钟计时器并不是精确到毫秒地累加而是每过一个 MBU 周期、且计时器未暂停时就把时间戳推进一个 MBU。这个滴答逻辑同样在 glass-daemon/timer.go 的第二个 goroutine 中每 1 个 MBU 周期醒来一次未暂停则Time MBU暂停则跳过每次变动都会通知账本保存。为什么用离散步进而不是精确计时因为工时追踪的场景里精确到秒没有意义反而按分钟计费这种模式更接近真实的工时申报方式也天然过滤掉了零碎的瞬时活动。累计的时间会被Keeper组件定期写入 ledger.json 账本文件见 glass-daemon/keeper.go即使守护进程重启计时状态也能完整恢复不会丢数据。时间如何变成提交记录累计的工时最终要落到 Git 上。Timeglass 通过 git hooks 做两件事提交信息模板把耗时按commit_message模板追加到提交信息默认格式为[spent 1m10s]git-notes 元数据把时间数据存进独立的 notes 分支如time-spent可随auto_push自动推送到远端仓库。这样每次git log --show-notestime-spent都能看到每个提交对应的真实工时工时数据和代码改动一一对应。查询方法见 docs/query.md。如何自定义 MBU 与计时参数所有参数都通过timeglass.json配置文件控制项目根目录放一份即对该仓库生效也可以放到系统级目录对所有项目生效。配置加载逻辑系统级 项目级两级合并见 config/config.go完整选项说明见 docs/config.md。仓库根目录自带了一份示例配置 timeglass.json配置项示例值说明mbu1m10s最小计费单元接受1h5m2s这类可读格式commit_message[spent {{.}}]提交信息中的工时模板auto_pushtrue是否随 push 自动同步 notes 数据修改 MBU 后超时暂停阈值4 × MBU会自动跟着变化一个参数即可整体调节敏感度。一键安装与启用自动计时启用流程极简只需两步安装并启动后台服务执行glass install它会安装并拉起 glass-daemon 后台守护进程见 command/install.go在项目仓库中初始化进入你的 Git 仓库执行glass init写入 hooks、创建计时器并拉取已有时间数据每个 clone 需要执行一次。之后一切自动发生用glass status查看计时器是运行中还是暂停中正常写代码、git commit时间会自动登记到提交里。手动安装方式与从源码编译的说明见 docs/manual_installation.md。小结Timeglass 的设计智慧Timeglass 用三个简单但精巧的机制解决了工时统计中最难的一环——人总会忘记开表文件监控回答你现在在干活吗——有文件活动就有产出⏸️超时自动暂停回答你还醒着吗——4 个 MBU 无活动即视为离岗MBU 计费回答怎么算账——按最小计费单元离散累计天然贴合工时申报习惯。三者由 glass-daemon/ 下的守护进程统一驱动状态落盘、重启可恢复全程本地运行、零隐私风险。对于需要向客户或团队申报工时的开发者来说这是一套装上就忘的自动化方案。【免费下载链接】glassAutomated time tracking for Git repositories. [DEPRECATED]项目地址: https://gitcode.com/gh_mirrors/gla/glass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考