Skip to content

Checkmate

An OpenClaw agent skill for managing Checkmate — an open-source uptime monitoring tool with a proper REST API.

We evaluated several monitoring tools for agent-friendly workflows:

ToolAPIVerdict
Uptime KumaSocket.IO only❌ No REST API — too expensive for agents
KenerREST (partial)❌ Fragile — monitor types poorly documented, crash-prone
CheckmateFull REST + OpenAPI✅ Clean API, JWT auth, easy automation

Checkmate won because it has a proper REST API with OpenAPI spec, JWT bearer auth, and comprehensive endpoints for monitors, notifications, incidents, and status pages.

  • Create monitors — HTTP, ping, pagespeed, hardware, Docker, port checks
  • Manage notifications — email, Slack, Discord, Telegram, webhook integrations
  • Track incidents — automatic incident detection and resolution
  • Status pages — public status page management via API
  • Maintenance windows — schedule planned downtime

Authentication via JWT bearer token (replace $BASE with your Checkmate instance URL):

Terminal window
TOKEN=$(curl -s $BASE/auth/login \
-X POST -H "Content-Type: application/json" \
-d '{"email":"...","password":"..."}' | jq -r '.data.token')
MethodPathDescription
POST/monitorsCreate a monitor
GET/monitors/teamList all monitors
GET/monitors/uptime/details/{id}Uptime details
POST/notificationsAdd notification channel
POST/status-pageCreate status page
POST/maintenance-windowSchedule maintenance
{
"name": "My Service",
"description": "Production API",
"type": "http",
"url": "https://api.example.com",
"interval": 60000
}

Interval range: 30000–3600000 milliseconds.

Operational gotcha: monitor interval units

Section titled “Operational gotcha: monitor interval units”

Critical: in Checkmate runtime/DB documents, monitor interval is effectively treated as milliseconds.

  • ✅ Minute cadence in DB/runtime: 60000
  • ❌ Bad value: 60 (seconds-like) can behave like near-1-second checks

When many monitors have very low interval values, the scheduler can hammer CPU, network, and MongoDB with excessive check churn.

  1. Check container pressure
    Terminal window
    docker stats --no-stream checkmate-server checkmate-mongo
  2. Inspect interval distribution (look for unusually low values)
    db.monitors.aggregate([
    { $group: { _id: "$interval", count: { $sum: 1 } } },
    { $sort: { _id: 1 } }
    ])
  3. Validate recent check cadence
    • Sample recent checks/incidents and confirm they are roughly minute-spaced for normal monitors.
    • If many entries are seconds apart, intervals are likely mis-scaled.
  1. Backup monitor documents first
    Terminal window
    mongodump --db checkmate --collection monitors --archive=./monitors-backup-$(date +%F-%H%M%S).gz --gzip
  2. Normalize low intervals to 60000 ms
    db.monitors.updateMany(
    { interval: { $lt: 1000 } },
    { $set: { interval: 60000 } }
    )
  3. Restart Checkmate server so scheduler state is refreshed.
  4. Verify post-fix cadence
    • Monitor updates should return to ~1-minute intervals.
    • docker stats should show reduced sustained load.
  • Add retention/TTL policies for historical checks to cap collection growth.
  • Set CPU/memory limits on Checkmate and Mongo containers.
  • Reduce frequency for expensive monitor types (especially pagespeed).