CloudLine
Reference

Bot status codes

The five possible status values for a bot — what each one means, what triggers it, and what your dashboard shows when it's set.

Every bot in CloudLine has a current status. It's decided by the BotMonitor Durable Object on every alarm tick, based on the gap between the last heartbeat and now. Five possible values.

online

The bot is alive and heartbeating on schedule.

Triggered when: at least one heartbeat arrived within the offline threshold window (interval × threshold count).

Dashboard:

  • Status ribbon: green
  • Status dot: green
  • Telemetry tiles: live values

This is what you want to see. A green bot is doing its job.

degraded

The bot is heartbeating, but slow or with quality issues. CloudLine flips to degraded rather than offline because the bot is technically still alive — just not healthy.

Triggered when: heartbeats are still arriving but the most recent gap was longer than the normal interval (e.g. delivery took longer than expected, suggesting a flaky network or a paused process).

Dashboard:

  • Status ribbon: yellow
  • Status dot: yellow

Optional alert: enable notify on degraded in the Alerts tab if you want to be paged. Off by default — degraded is usually noisy and self-resolves.

NOTE

Most users don't enable degraded alerts. The signal is useful in the timeline view (you can see the wobble) but not actionable per-event.

offline

The bot has missed enough consecutive heartbeats to be considered down.

Triggered when: no heartbeat arrived in interval × offlineThreshold seconds.

  • Starter: 60 s × 2 = 120 s (~2 minutes after last heartbeat)
  • Pro (with default threshold of 2): 30 s × 2 = 60 s
  • Business (with default threshold of 2): 10 s × 2 = 20 s
  • Pro/Business can set threshold to 1 (fastest detection) or 3 (more conservative).

Dashboard:

  • Status ribbon: red
  • Status dot: red
  • A new incident is opened in the Incidents table.
  • Alert fires to your configured channels (Discord webhook / email).

When a heartbeat lands again, the incident closes, status flips back to online, and the recovery alert fires.

paused

You manually paused monitoring for this bot from the Settings tab.

Triggered when: the bot's isMonitoring flag is set to false. CloudLine still accepts heartbeats and stores telemetry, but does NOT evaluate offline status or fire alerts.

Dashboard:

  • Status ribbon: grey with "Paused" label
  • Status dot: grey
  • No incidents opened during the pause.

Useful when:

  • You're doing a maintenance window (e.g. extended deploy) and don't want false-positive alerts.
  • The bot is being intentionally taken down for changes.
  • You want to keep the bot configured (alert thresholds, webhook URL) without it being monitored.

Resume from the Settings tab whenever you're ready. The alarm tick re-arms within seconds.

unknown

The bot has never sent a heartbeat, or the BotMonitor doesn't have enough information to decide.

Triggered when: bot was created less than one full check interval ago, OR all recent heartbeat data was lost from D1, OR an internal error prevented status evaluation.

Dashboard:

  • Status ribbon: grey with "Not enough data" label
  • Status dot: grey

This is the initial state for a freshly created bot. Once your first heartbeat lands, it transitions to online. If you see unknown on an existing bot that was previously online, check whether the bot is sending heartbeats — it's the same diagnostic flow as No data showing.

Transitions

FromToTrigger
unknownonlineFirst heartbeat arrives.
onlinedegradedHeartbeat arrives later than expected.
onlineofflineMissed too many heartbeats. Opens an incident.
degradedonlineHeartbeat arrives on schedule.
degradedofflineContinues missing heartbeats. Opens an incident.
offlineonlineHeartbeat arrives. Closes the incident. Fires recovery alert.
pausedonlineYou resume monitoring + first heartbeat lands.
anypausedYou pause monitoring from the Settings tab.

A note on the gateway_ok flag

Bot status is about CloudLine's view of the bot. The SDK additionally reports gateway_ok and gateway_stale_sec on each heartbeat — these track whether the bot's connection to Discord is healthy. A bot can be online (heartbeating fine) AND have gateway_ok = false (Discord gateway is dead) at the same time. This is the zombie state — surfaced separately in the Gateway tile.

In API responses

The status appears as a string in API responses:

{
  "id":       "bot_abc123",
  "name":     "My Music Bot",
  "status":   "online",
  "lastHeartbeatAt": 1735862400000
}

The string values are exactly "online" | "degraded" | "offline" | "paused" | "unknown". Case-sensitive.