-
Notifications
You must be signed in to change notification settings - Fork 0
Concepts Maintenances
A Maintenance window declares planned, expected downtime for one or more Services. It exists so that scheduled work doesn't get misreported as an outage — alerts are suppressed and uptime history stays accurate during the window, while users still see a clear notice on the status page.
| Field | Type | Description |
|---|---|---|
| Title | string | Required, shown on the status page |
| Description | string? | Optional detail about the planned work |
| StartDateTime | long (unix seconds) | Start of the first occurrence |
| RRule | string | iCalendar RRULE string defining recurrence (e.g. FREQ=WEEKLY;BYDAY=MO) |
| DurationSeconds | int | How long each occurrence lasts |
| Status | MaintenanceStatus |
Active or Cancelled — the maintenance definition's lifecycle |
| IsGlobal | bool | When true, affects all services regardless of explicit associations |
Source: Maintenance.cs
A single Maintenance defines a recurrence pattern once — you don't create a separate record for every Tuesday-night deploy window. The RRule field uses standard iCalendar RRULE syntax, the same format used by calendar apps:
FREQ=WEEKLY;BYDAY=MO # every Monday
FREQ=DAILY;INTERVAL=1 # every day
FREQ=MONTHLY;BYMONTHDAY=1 # first of every month
A background job (MaintenanceSchedulerJob) materializes each upcoming occurrence as a MaintenanceEvent — a concrete start/end pair with its own status:
Scheduled → Ongoing → Completed (or Cancelled)
Source: MaintenanceEvent.cs, MaintenanceEventStatus.cs
The status shown to users is a derived combination of the maintenance definition's Status and its events' temporal state:
| Display status | Meaning |
|---|---|
| Scheduled | No event is ongoing right now, but one is upcoming |
| Active | At least one event is currently ongoing |
| Completed | All events have finished and none remain scheduled |
| Cancelled | The maintenance definition itself was cancelled |
Source: MaintenanceDisplayStatus.cs
While a MaintenanceEvent is Ongoing for a given service (either directly associated or via IsGlobal):
- Checks still run against the service as normal.
- Failing results do not fire alerts — no false-positive pages during expected downtime.
- Results are recorded with a synthetic
MAINTENANCEstatus point in the time series, rather thanDOWN, so historical uptime calculations aren't skewed by planned work.
A maintenance can target specific services via MaintenanceService associations, or set IsGlobal = true to cover every service without listing them individually.
Admin panel → Maintenances
Create a maintenance window, define its recurrence and duration, choose affected services (or mark it global), and cancel it if plans change.
- Prefer a single recurring maintenance over creating one-off windows manually every week — RRULE keeps it low-maintenance (pun intended).
- Set the duration generously enough to cover typical overruns; a maintenance ending early is harmless, but checks failing just after it ends will fire real alerts.
- Use
IsGlobalsparingly — it's meant for full-platform downtime (e.g. a database migration), not routine per-service work.