【免费下载链接】boopA tiny, self-hosted notification inbox for developers. Something happened in one of your apps; Boop tells you on your phone.项目地址https://gitcode.com/gh_mirrors/boop2/boop点击查看免费下载Boop 是一个自托管的开发者通知收件箱notification inbox你的应用把部署完成支付成功线上报错这类事件 POST 给它它就把推送送到你的手机。当同一个错误一晚上重复触发 47 次时手机狂响是灾难彻底不看又可能错过真正的故障。Boop 用fingerprint 指纹分组silences 静默规则这套组合拳解决它前者把重复事件折叠成一行后者让匹配的事件只存不推历史记录一条不少。两个机制到底怎么分工先看 Boop 的整体架构事件从你的应用进入服务端后经过存储、静默判断最后由 APNs 推送到手机很多人会混淆这两者先用一张表说清楚维度指纹分组fingerprint grouping静默规则silences解决什么问题收件箱列表太乱、重复刷屏手机推送轰炸生效层面仅显示列表折叠为一行推送层不再发送 push数据是否保留✅ 每次发生都完整存储✅ 每次发生都完整存储标记为silenced能否只推一次❌ 不能它不拦推送✅ 能后续匹配事件全部不推在哪里开启收件箱勾选Group repeats事件页或Settings → Silences建规则一句话总结分组让你看得清静默让你不被吵两者搭配才是高频错误只推一次、历史一条不漏的完整答案。一、给事件分配稳定 fingerprint一切的前提fingerprint 是事件上的一个可选字段≤200 字符代表同一件事又发生了。官方文档 integration-llms.md 的定义很直白它是稳定的分组键stable grouping key用于the same thing happening again。发送事件时带上它即可这是 Boop 唯一的发送端点POST /api/v1/events{title: KeyError, body: key :can_palette? not found, level: error, source: error_tracker, fingerprint: uini-keyerror}✅好的 fingerprint 长什么样异常类型 出错位置 关键上下文例如uini-keyerror、cron-db-backup-timeout。❌常见反模式把时间戳、请求 ID、用户 ID 拼进 fingerprint——那样每次都会生成新指纹分组完全失效。⚠️ 注意fingerprint不是去重。integration-llms.md 明确写了 Every occurrence is still stored and pushed; it is not deduplication. 每次发生都会入库并推送只是显示上可以折叠。二、在收件箱中开启指纹分组一眼看全重复事件服务端收到事件后同一项目内共享 fingerprint 的事件会在列表 API 中被折叠GET /api/v1/events?groupedtrue只返回每个指纹的最新一次并附带group: {count, first_seen, last_seen}汇总。分组 SQL 的核心逻辑在 events.go汇总结构定义在 GroupInfo为加速查询0003_actions_groups.sql 专门建了(project_id, fingerprint, created_at)索引。Web 端收件箱勾选Group repeats开关后重复错误折叠成一行例如KeyError×47· First seen 09:31 · Last seen 10:42点击该行进入分组页/groups/:project/:fingerprint列出该指纹下的每一次发生、可无限加载实现见 Inbox.svelte 和 Group.svelte。iOS 端InboxView.swift 的过滤菜单里同样有Group repeats开关偏好会记住跨启动持久化分组行带×47计数徽章点开是独立推送的分组详情页GroupView.swift。两个容易踩的边界过滤条件在组内生效按levelerror过滤时展示的是该指纹最近一次error计数也只数 error指纹不跨项目合并uini-keyerror在 A 项目和 B 项目是两行见 CHANGELOG.md。三、配置静默规则让匹配的事件只存不推静默规则silence是一条匹配字段 值的规则命中的事件照常入库、照常出现在收件箱只是不再发 push。silences.go 的注释说得很清楚Silenced events are still stored and shown; they just never reach a phone.可匹配的 3 个字段定义见 Fields字段匹配方式典型用途fingerprint精确匹配静音某个已知报错最精准title忽略大小写标题格式不稳定的来源source精确匹配一键静音某条流水线 / 整个服务作用范围规则可以绑定某个项目也可以留空project_id表示全局生效。匹配逻辑在 Match项目专属规则优先于全局规则同级取最早创建的一条。两个创建入口 事件详情页点Silence events like thisEventDetail.svelte——在正在看的事件上顺手建规则可以选按 fingerprint / title / source 匹配、以及限定本项目或全局⚙️Settings → SilencesSettings.svelte——集中管理所有规则页面还直接显示当前有多少事件被静默。生效链路事件创建成功后服务端调用 applySilence 检查规则命中则把事件标记silenced并跳过入队推送api.go未命中才交给推送器delivery.go扇出到所有已配对手机。四、复盘被静默的事件不错过任何一次发生静默≠消失Boop 给了完整的复盘与补救路径只看被静默的收件箱过滤器切到Silenced onlyInbox.svelteAPI 侧对应GET /api/v1/events?silencedtrue单条补救被静默事件的详情页显示是哪条规则拦住了它并提供Remove rule删规则和Unsilence and push now立即补推这一条走 unsilence 端点清标记 马上推送删除规则不影响历史DELETE /api/v1/silences/:id之后之前被静默的事件保留silenced标记方便追溯silences.go。五、实战配方高频错误只推一次事件一个不漏 把上面串起来推荐的日常姿势发送端给每类问题一个稳定 fingerprint错误类异常类型位置定时任务任务名失败原因首次发生正常收到 push因为还没有静默规则这是只推一次的那一次确认是已知噪音在事件页建一条 fingerprint 静默规则 → 之后重复发生只进收件箱、不再响铃日常巡检打开分组视图一行×47 · First seen 09:31 · Last seen 10:42掌握全貌发现计数异常暴涨就进去翻 Occurrences问题修复/上线后Settings → Silences 删除对应规则恢复完整推送给 AI 用MCP 端点提供get_event_group工具mcp.go可以直接问 AI agent 这个指纹下都有哪些发生。场景该用什么同一报错每晚刷 50 次fingerprint 静默整条测试流水线很吵source 静默想知道某错误一天发生几次指纹分组不静默既想安静又想能复盘分组 静默 Silenced only 过滤相关文件速查官方文档与 API 表README.md事件/客户端字段规范含 fingerprint 定义integration-llms.md静默规则存储与匹配server/internal/silences/silences.go事件校验、过滤与分组 SQLserver/internal/events/events.go静默判定与推送入口server/internal/api/api.go推送分发server/internal/delivery/delivery.goWeb 收件箱 / 分组页 / 设置server/web/src/pages/iOS 收件箱与分组ios/Boop/Screens/InboxView.swift、ios/Boop/Screens/GroupView.swift功能引入记录CHANGELOG.mdBoop 的思路很克制它不替你判断该不该推而是把分组的眼睛和静默的手都交给你——高频错误从此只响一次而每一次发生都安静躺在收件箱里等你复盘。赞分享【免费下载链接】boopA tiny, self-hosted notification inbox for developers. Something happened in one of your apps; Boop tells you on your phone.项目地址https://gitcode.com/gh_mirrors/boop2/boop点击查看免费下载相关推荐Go 错误处理「只处理一次」原则Uber Go Style Guide 实战解读Go 错误处理「只处理一次」原则Uber Go Style Guide 实战解读 本文聚焦于 Uber Go Style Guide 中 Handle Err文档教程代码质量Lintpractical-aspnetcore 实战使用 WebApplication.UseFileServer() 一行代码托管静态文件与默认首页practical aspnetcore 实战使用 WebApplication.UseFileServer 一行代码托管静态文件与默认首页 导读 本文聚焦示例工程推荐开源项目Forsaken-Mail——自托管一次性邮箱服务推荐开源项目Forsaken Mail——自托管一次性邮箱服务 1、项目介绍 在网络安全日益重要的今天保护你的电子邮件地址免受垃圾邮件和恶意活动的侵扰变得至上一篇资源稀缺信号与约束内构建let-fate-decide 中 Five of Pentacles五角星五的工程技术解读下一篇如何通过3个创新方法解锁Wand-Enhancer游戏修改器高级功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考