Incidents and maintenance
Switch the incident timeline and maintenance windows on or off, and understand their models.
Both features are enabled by default and both are a single switch. Turning one off removes its API routes, its effect on the snapshot and, for incidents, the RSS and Atom feeds.
| Disabled feature | Effect |
|---|---|
incidents.enabled: false | /incidents, /incidents/:id, /rss.xml, /atom.xml and every /admin/incidents/* route answer 404. No automatic incidents are opened, and the snapshot carries no active incidents. |
maintenance.enabled: false | /maintenance and /admin/maintenance/* answer 404. Windows no longer suppress alerts, and the snapshot carries no scheduled maintenances. |
The incident model
The four states are a timeline, not a state machine with enforced
transitions. A new incident may not be created as resolved.
critical is what drives the page to major-outage and what triggers a
Slack mentionOnCritical.
An empty array means global — the incident affects everything. That is also how maintenance windows express a full-platform window.
True when the monitoring runtime opened the incident. Only automatic incidents are reconciled and auto-resolved.
Chronological entries, each with id, status, message, createdAt
and an optional severity change.
Creating one
How incidents change the page
overall is computed in this order:
- A maintenance window that is
in-progress→maintenance. - Any active
criticalincident →major-outage. - Any other active incident →
degraded. - Otherwise monitors decide: all failing →
major-outage, some failing →degraded, none →operational.
Active incidents are published in the snapshot and rendered with their full
timeline, each anchored at #incident-<id> so the RSS and Atom entries link
straight to it.
The maintenance model
Status is derived from the clock, not set by hand: reading upcoming
windows refreshes scheduled → in-progress → completed against now
before returning them. scheduledEnd must be after scheduledStart.
Creating one
Alert suppression
While a window is in-progress, the monitors it names are excluded from:
monitor.down,monitor.recoveredandssl.expiringevents, and- automatic incident creation and reconciliation.
They are still checked and their results are still stored, so the uptime grid
stays honest about what actually happened. A window with an empty
affectedMonitors suppresses alerts for every monitor.
The snapshot includes scheduled and in-progress windows. Completed ones
are dropped, which keeps the page and GET /maintenance in
agreement.
Feeds
With incidents.enabled, the catch-all route publishes the newest 50
incidents as both RSS 2.0 and Atom:
Entries are titled <title> (<status>), link to the #incident-<id> anchor
on siteUrl (falling back to the request origin), and carry the incident's
timeline as the description. See
Badges, feeds and metrics.