louislam/uptime-kuma · warning · Error
Status Page is not found
Error message
Status Page is not found
What it means
Thrown by the deleteStatusPage handler in its else branch: when the resolved statusPageID does not correspond to an existing page (the lookup used to authorize deletion failed). It is the terminal branch after the delete flow confirms there is nothing to delete.
Source
Thrown at server/socket-handlers/status-page-socket-handler.js:511
server.entryPage = "dashboard";
await Settings.set("entryPage", server.entryPage, "general");
}
// No need to delete records from `status_page_cname`, because it has cascade foreign key.
// But for incident & group, it is hard to add cascade foreign key during migration, so they have to be deleted manually.
// Delete incident
await R.exec("DELETE FROM incident WHERE status_page_id = ? ", [statusPageID]);
// Delete group
await R.exec("DELETE FROM `group` WHERE status_page_id = ? ", [statusPageID]);
// Delete status_page
await R.exec("DELETE FROM status_page WHERE id = ? ", [statusPageID]);
apicache.clear();
} else {
throw new Error("Status Page is not found");
}
callback({
ok: true,
});
} catch (error) {
callback({
ok: false,
msg: error.message,
});
}
});
};
/**
* Check slug a-z, 0-9, - only
* Regex from: https://stackoverflow.com/questions/22454258/js-regex-string-validation-for-slug
* @param {string} slug Slug to testView on GitHub (pinned to 6b5ea01557)
Solutions
- Refresh the status page list before allowing delete; hide delete for pages no longer present.
- Treat the error as already-deleted and update the UI accordingly.
- Confirm the slug/id passed is from the current page list.
Defensive patterns
Strategy: validation
Validate before calling
const exists = statusPages.some(p => Number(p.id) === Number(statusPageID));
if (!exists) throw new Error("Status Page is not found");
socket.emit("deleteStatusPage", statusPageID, cb); Type guard
function statusPageExists(id, list) {
return Array.isArray(list) && list.some(p => Number(p.id) === Number(id));
} Try / catch
try { await emitAsync("deleteStatusPage", id, cb); }
catch (e) { if (/is not found/.test(e.message)) removeFromUI(id); else throw e; } Prevention
- Hide delete for pages not in the current list.
- Drop stale ids after deletion elsewhere.
- Treat not-found on delete as success in the UI.
When it happens
Trigger: Client emits 'deleteStatusPage' with a slug/id that no longer resolves to a status_page row; the handler reaches the else branch and rejects the deletion.
Common situations: Page already deleted in another session; stale delete button; race between two clients deleting the same page; slug typo.
Related errors
AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12).
Data as JSON: /api/errors/986483a50af740e2.
Report an issue: GitHub.