跳转至

通知

通知用在批次出事的时刻:通常是一个 sweep 跑完,或者某个任务崩了。 设计目标是 一个 sweep 一条,不是每个 epoch 一条 —— 这样可以 长期开着也不淹邮箱。

通道

通道 配置 延迟
Email(SMTP) deploy/.env 里的 ARGUS_SMTP_* 秒级
飞书 / Lark ARGUS_FEISHU_WEBHOOK 环境变量 秒级
Web push 浏览器授权,每个设备单独 opt-in 秒级

如果 SMTP 没配,邮件规则会被静默跳过 —— 不会报错 —— 派发器会把 本来要发的内容 写到 stdout,方便排查。

规则

每个用户在 Settings → Notifications 里管自己的规则。

一条规则就是这些谓词的简单 AND:

  • 事件类型 —— batch_donebatch_failedjob_failedresource_snapshot(带限速,详见下文)
  • 项目 —— 字符串匹配
  • 标签 —— 在 tags 数组里做子串匹配
  • 阈值 —— 对 resource_snapshot,例如「gpu_util_pct < 5 连续超过 N 分钟」(即 idle GPU 规则)
  • 通道 —— 选一个或多个

默认规则集

新账号默认带 3 条 关闭 状态的规则:

  1. 我的批次跑完时通知我(成功或失败都通知)。
  2. 我的任务失败时通知我。
  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 条 / 小时的限速,防止链路抖动导致 洪水。超限的会进队列,合并成一条摘要消息发出去。多收件人列表上的 外部地址按地址共享同一个限额。