通知¶
通知用在批次出事的时刻:通常是一个 sweep 跑完,或者某个任务崩了。 设计目标是 一个 sweep 一条,不是每个 epoch 一条 —— 这样可以 长期开着也不淹邮箱。
通道¶
| 通道 | 配置 | 延迟 |
|---|---|---|
| Email(SMTP) | deploy/.env 里的 ARGUS_SMTP_* |
秒级 |
| 飞书 / Lark | ARGUS_FEISHU_WEBHOOK 环境变量 |
秒级 |
| Web push | 浏览器授权,每个设备单独 opt-in | 秒级 |
如果 SMTP 没配,邮件规则会被静默跳过 —— 不会报错 —— 派发器会把 本来要发的内容 写到 stdout,方便排查。
规则¶
每个用户在 Settings → Notifications 里管自己的规则。
一条规则就是这些谓词的简单 AND:
- 事件类型 ——
batch_done、batch_failed、job_failed、resource_snapshot(带限速,详见下文) - 项目 —— 字符串匹配
- 标签 —— 在
tags数组里做子串匹配 - 阈值 —— 对
resource_snapshot,例如「gpu_util_pct < 5连续超过 N 分钟」(即 idle GPU 规则) - 通道 —— 选一个或多个
默认规则集¶
新账号默认带 3 条 关闭 状态的规则:
- 我的批次跑完时通知我(成功或失败都通知)。
- 我的任务失败时通知我。
- 有批次还在跑,但某台主机的 GPU 已经空载 30 分钟时通知我。
一键即可启用。
静音¶
每条规则支持单独静音窗:1 小时 / 8 小时 / 24 小时 / 自定义。 静音期内规则照样匹配,只是不发通知。这正是「跑一晚 benchmark」时 该用的工具 —— 静音 8 小时,邮箱不被刷屏,第二天的总结仍然到。
邮箱验证¶
邮件通道要求收件地址完成验证。新加邮箱时自动发验证链接,24 小时内 有效。Settings → Profile 上的 重新发送验证 按钮有 1 次/分钟 的冷却,免得收件箱波动变成出站邮件死循环。
退订¶
每封邮件都附带一个用一次性 HMAC token 签名的 Unsubscribe 链接;
点进去关掉的是 该通道,不是整个账号 —— 其他规则继续生效。
用户级通知偏好(#108)¶
Settings → Notifications 在规则列表旁边新增了一个小偏好面板:
- 批次完成时给我发邮件 —— 盖过内置的 batch-done 规则。每次 改主意时不必逐条规则改。
- 任务失败时给我发邮件 —— 同上,对应 job-failed 规则。
- 每日摘要 —— 把所有通知合成一封早邮件,而不是逐事件触发。 默认关闭。
偏好写到 user_notification_prefs 表,派发器在评估规则之前
先看它。全局退订邮件的用户,其他通道的规则照样触发 —— 这个
开关是按通道而不是按用户的。
项目多收件人(#116)¶
项目详情页的 Recipients 标签让通知支持多收件人:
- 项目 owner 永远是收件人。
- 任何注册用户按邮箱加进来,都会收到 owner 收的同一批
batch_done/batch_failed/job_failed。 - 可以加 外部地址(没有 Argus 账号的人)—— 邮件按字面发到 这个地址。外部收件人只能从邮件底部的链接退订,他们不能登入 这个项目。
- 每个收件人的静音开关让用户不删自己也能临时退出。
收件人列表归 owner 管。只有项目 owner 和管理员能加或删行。 外部地址受同样的 30 条 / 小时限速约束,按地址计。
限速¶
派发器对每个用户每个通道做 30 条 / 小时的限速,防止链路抖动导致 洪水。超限的会进队列,合并成一条摘要消息发出去。多收件人列表上的 外部地址按地址共享同一个限额。