Status Page
The Status page provides real-time visibility into your bot's uptime, shard health, and system performance metrics.
Shard Grid
Each shard is displayed as a card showing live health data from the most recent heartbeat event:
| Indicator | Source Field | Description |
|---|---|---|
| Online/Offline | Heartbeat recency | Green if heartbeat received within 2 minutes, red otherwise |
| WebSocket Ping | wsPingMs | Round-trip WebSocket latency to Discord in milliseconds |
| Memory Usage | memoryMb | Process RSS memory usage in megabytes |
| Guild Count | guildCount | Number of cached guilds on this shard |
| Voice Connections | voiceConnections | Active voice connections on this shard |
| CPU Usage | cpuPercent | Process CPU utilization (0--100%) |
Note
Shard cards use color coding to highlight potential issues:
- Green border -- healthy, all metrics within normal range
- Yellow border -- warning, elevated ping or memory
- Red border -- critical, shard offline or extremely high resource usage
Single-Bot Mode
When running a single shard with no clustering (shard 0, no clusterId configured), the page shows a single clean card without the "Cluster 0 > Shard 0" hierarchy header. This provides a simple, uncluttered view for small bots.
Multi-Cluster View
When clusterId is configured (see Multi-cluster), the shard grid is organized into a cluster > shard hierarchy:
Cluster 0
Shard 0 Online 32ms 128MB 1,200 guilds
Shard 1 Online 28ms 135MB 1,150 guilds
Cluster 1
Shard 2 Online 41ms 140MB 1,220 guilds
Shard 3 Offline --- --- ---Each cluster group is collapsible for easier navigation with many shards.
API Usage
The Status page includes an API usage section showing REST API call statistics from the api_routes_snapshot events (emitted every 5 minutes):
| Column | Description |
|---|---|
| Route | Normalized REST API route path |
| Count | Number of calls in the snapshot window |
The top 10 routes by call count are displayed. This helps identify which API endpoints your bot uses most heavily, which can be useful for optimizing rate limit budgets.
Additional REST metrics from the heartbeat:
| Metric | Description |
|---|---|
| API Requests | Total REST API requests in the snapshot window |
| 429 Global | Global rate limit hits |
| 429 Bucket | Bucket-level rate limit hits |
| Invalid Requests | Requests that returned 4xx errors |
History Tabs
Below the live shard grid, history tabs show per-shard performance trends over time:
Ping History
WebSocket ping latency over time. Spikes may indicate Discord API issues or network problems. Sustained high ping suggests the bot's hosting region is far from Discord's gateway servers.
Memory Usage
Process memory usage trend. A steadily increasing line may indicate a memory leak. Sudden drops correspond to process restarts.
CPU Usage
CPU utilization percentage over time. Spikes correlate with heavy command processing or event bursts. Sustained high CPU may indicate the need for more shards or optimization.
Event Loop p95
The 95th percentile event loop delay in milliseconds, measured using Node.js perf_hooks.monitorEventLoopDelay. High values indicate the event loop is being blocked by synchronous operations, which can cause command response delays.
Note
A healthy Node.js process has an event loop p95 under 20ms. Values above 100ms indicate significant blocking that may affect bot responsiveness. Common causes include synchronous file I/O, heavy JSON parsing, or CPU-intensive computations on the main thread.
Offline State
When the bot is offline and no heartbeat data is available:
- Shard cards show a red "Offline" status
- The last-seen online time is displayed (e.g., "Last seen 2 hours ago")
- History charts show a gap where no data was collected
INFO
The Status page auto-refreshes every 30 seconds. No manual refresh is needed to see updated shard health.