Skip to content

Runbook: UptimeRobot maintenance windows

Use maintenance windows before planned downtime (R940 reboot, Caddy reload, vzdump, PBS jobs) so UptimeRobot does not fire false down alerts to #alerts-lastvet and alerts@last1.enterprises.

Behavior during a maintenance window

Effect Detail
Monitoring Checks continue; UptimeRobot still records state
Alerts Suppressed for monitors assigned to the window while it is active
Status page Monitors show as under maintenance (not counted as an incident outage)
After window ends Normal alerting resumes; unresolved down states can alert immediately

Do not rely on maintenance windows for Alertmanager/Prometheus alerts. Those are separate (R940 internal stack).

Scope: per-monitor

Maintenance windows apply only to monitors explicitly assigned (monitorIds in v3, mwindows on v2 editMonitor).

Typical LastVet scopes:

Event Monitors to include
Full R940 outage All five monitors (including staging for ops alerts)
API-only deploy LastVet API + LastVet API staging (internal)
Marketing/portal deploy (Cloudflare Pages) LastVet Homepage, My LastVet, LastVet Provider Portal

Current monitor IDs are listed in OBSERVABILITY_STACK.md Phase 5 section and .uptimerobot-phase5/expand-state.env (local, gitignored).

API options

v3 (preferred)

Operation Endpoint
List GET /v3/maintenance-windows
Create POST /v3/maintenance-windows
Update PATCH /v3/maintenance-windows/{id}
Delete DELETE /v3/maintenance-windows/{id}

Create body (example: weekly Sunday 02:00 Pacific, 90 minutes, prod API only):

{
  "name": "Weekly R940 backup window",
  "interval": "weekly",
  "date": "2026-08-17",
  "time": "02:00:00",
  "duration": 90,
  "days": [7],
  "monitorIds": [803753633],
  "autoAddMonitors": false
}

interval values: once, daily, weekly, monthly.

  • Weekly: days = ISO weekday numbers (1=Monday … 7=Sunday per UptimeRobot v3 schema).
  • Monthly: days = day-of-month array; -1 = last day of month.
  • Daily: omit days; set time + duration.
  • Once: set date, time, duration.

Auth: Authorization: Bearer $LASTVET_UPTIMEROBOT_API_KEY (from BWS). Never commit the key.

v2 (legacy, still works)

Operation Endpoint
List POST /v2/getMWindows
Create POST /v2/newMWindow
Edit POST /v2/editMWindow
Delete POST /v2/deleteMWindow
Assign to monitor POST /v2/editMonitor with mwindows=123-456

v2 type: 1 = once (unix start_time), 2 = daily (HH:MM start_time), 3 = weekly, 4 = monthly (requires value).

Manual procedure (dashboard)

  1. UptimeRobot → MaintenanceAdd maintenance window.
  2. Name it (e.g. R940 cold boot 2026-08-16).
  3. Set start time and duration.
  4. Select Specific monitors and pick affected LastVet monitors.
  5. Save. Confirm window is Active before starting work.
  6. After work completes, end early or wait for auto-expiry; verify monitors return Up.

Pre-flight checklist

  • [ ] Window covers expected duration plus 15 min buffer
  • [ ] Correct monitors selected (not autoAddMonitors unless intentional)
  • [ ] Post in #alerts-lastvet that maintenance is scheduled (human context; alerts should stay quiet)
  • [ ] Optional: pin a Maintenance announcement on the LastVet Status PSP (id 1255678) for veteran-facing transparency

Future automation (not built yet)

See Muster uptimerobot-maintenance-window-automation: cron or CI hook that calls v3 POST /v3/maintenance-windows before vzdump/PBS jobs and deletes or pauses the window after completion.