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; settime+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)¶
- UptimeRobot → Maintenance → Add maintenance window.
- Name it (e.g.
R940 cold boot 2026-08-16). - Set start time and duration.
- Select Specific monitors and pick affected LastVet monitors.
- Save. Confirm window is Active before starting work.
- 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
autoAddMonitorsunless intentional) - [ ] Post in
#alerts-lastvetthat 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.
Related¶
uptimerobot-alert.md— responding to UptimeRobot down alertsOBSERVABILITY_STACK.md— monitor inventory and API notes