状态系统
Disband的状态页面是自托管的。它不依赖于第三方状态服务,因此当主网络主机API或静态资产交付出现问题时,它仍然可以准确报告。
- 公共页面:disband.dev/status
- RSS 订阅:disband.dev/status/feed.xml
- 所有者管理员:disband.dev/status/admin
公共页面显示的内容
该页面按服务分组监控。对于每个监控器,它显示:
- 来自最新检查的当前状态;
- 该检查的HTTP状态和响应时间;
- 一个90天的正常运行时间条,每天一个部分;
- 上次支票运行的时间。
在显示器下方是事件、计划维护和公告。每个事件都打开一个包含完整更新时间线的详细页面。该源以RSS 2.0格式发布最新的25个事件、维护窗口和已发布的公告。
支票
一个名为status-probe的Supabase Edge函数在pg_cron下每分钟运行一次。它并行探测每个启用的显示器,并在每次检查中记录一行。
每个显示器都有:
| 设定 | 含义 |
|---|---|
| 名称 | 公共标签,例如网站。 |
| 组 | 它出现的部分,例如Disband。 |
| URL | 要请求的绝对http或https URL。 |
| 方法 | GET 或 HEAD。默认值为 GET。 |
| 预期状态 | 被视为健康的确切HTTP状态。默认值为200。 |
| 关键词 | 必须出现在响应正文中可选文本。 |
| 超时 | 1-30秒。默认值为10秒。 |
| 头信息 | 可选请求头信息,存储在服务器端。 |
| 启用 | 探头是否完全请求它。 |
| 公共 | 它是否有助于公共快照。 |
只有当状态代码匹配并且存在可选关键字时,监控器才健康。会跟随重定向。超时、网络错误、状态错误或缺少关键字将记录为检查失败,并附有原因。
探测器与网络应用独立运行。网络主机出现故障不会阻止检查记录。
历史记录和正常运行时间
每个支票都存储在status_checks中。一个数据库触发器将每个支票折叠到status_daily中,因此90天的条形图是一个廉价的读取,而不是对数百万行进行聚合。
- 原始支票保留90天。
- 每日滚动保留180天。
- 公共页面显示了最近90天的内容。
- 每天的段落是当天的成功检查的百分比。
一个空白——没有检查的日子——显示为没有数据,而不是停机时间。
自动事件
当显示器连续三次检查失败时,探测器会自动打开事件。事件是重大事件,与该显示器相关联,并以自动更新开始调查,其中包含最后一个错误。
当下次检查成功时,事件将转为已解决,并记录一个更新记录了停机时间的大致长度。事件将保留在页面和提要中,并保留完整的历史记录。
如果服务正在闪烁但没有连续三次出现故障,则不会打开自动事件。在自动事件处于打开状态时,所有者仍然可以为自动事件添加手动更新。
手动事件、维护和公告
所有者可以发布三种类型的条目:
| 类型 | 用于 |
|---|---|
incident |
一个意外的问题。 |
maintenance |
计划工作,可选带有开始和结束时间。 |
announcement |
一般服务通知,不是停机。 |
事件可以影响一个、多个或多个显示器。其影响是none、minor、major或critical之一。
更新状态是:
investigatingidentifiedmonitoringresolvedscheduledin_progresscompletedpublished
每次更新都会在事件时间线中添加一个带有时间戳的条目,并设置事件的当前状态。标记更新resolved或completed也会设置已解决时间。发布带有其他状态的更晚更新会重新打开它。
总体状态
横幅的决定顺序如下:
- 一个活跃的维护窗口显示“维护中进行中”,或者 启动前计划维护。
- 活跃的重大故障或重大事件会显示为“重大停机”。
- 一个活跃的小故障显示为“部分损坏”。
- 显示器故障时,显示屏会显示“部分损坏”或“重大停机”,具体情况取决于 公共监控器正在故障。
- 没有故障且至少有一个结果,它显示为所有系统正常运行。
- 在第一批支票到达之前,它会显示正在等待第一批支票。
已解决的事件不会影响横幅。
隐居
公共读取路径是一个数据库函数,而不是直接访问表格。它返回监控名称、组、状态、延迟、正常运行时间和事件。它故意省略了:
- 监控URLs;
- 请求头;
- 探针错误文本;
- 内部检查ID;
- 事件更新背后的身份。
基本表格启用了行级安全性,没有公共策略。只有服务角色和探测功能才能直接读取它们。
组织
/status/admin仅限已登录的平台所有者使用。它不是空间角色,不能授予其他成员。未经身份验证的请求将收到401;其他已登录的帐户将收到403。
管理员屏幕可以:
- 创建、编辑、启用、禁用、发布或删除监控器;
- 查看每个显示器的URL、头和最后结果;
- 发布事件后,维护窗口和公告;
- 添加时间线更新,并更改事件的影响或受影响的服务;
- 删除一个显示器及其历史记录。
管理员API
屏幕使用以下仅限所有者使用的路线:
| 方法 | 端点 |
|---|---|
GET, POST |
/api/status-admin/monitors |
PATCH, DELETE |
/api/status-admin/monitors/{id} |
GET, POST |
/api/status-admin/incidents |
PATCH, DELETE |
/api/status-admin/incidents/{id} |
POST |
/api/status-admin/incidents/{id}/updates |
它们接受所有者的Supabase访问令牌为Authorization: Bearer <token>。它们是管理员屏幕的实现细节,而不是公共API;形状可能会发生变化。
操作说明
- 探测器使用存储在Supabase Vault中的秘密进行身份验证
status_probe_key。秘密是在数据库内比较的,而不是 返回函数。 pg_cron任务名为status-probe。它从Vault中读取秘密 每次运行,所以旋转秘密不需要编辑工作。- Edge功能在JWT验证关闭的情况下部署,因为它 而是用Vault秘密进行身份验证。
- 如果探测器本身停止运行,页面将显示过期 最后检查次数。这是检查cron任务和Edge的信号 功能日志。
Disband