Skip to content

Uptime monitoring

What you’ll build: a dashboard that shows whether each service is healthy and puts any incident at the top the instant a check fails — a status page for your own stack, fed by a script you control.

pulsedeck.app / dashboards / uptime
SCREENSHOT

Finished uptime dashboard: an alert feed of incidents beside a grid of service statuses.

Drop an image into public/shots/ and pass src.

  • PulseDeck running (Quickstart).
  • A registered source and its pd_… API key.
  • Anything that can run a check and make an HTTP request (a cron job, n8n, a small script).

Use one category for monitoring and one stream for this set of services:

  • Category: monitoring
  • Stream: uptime

After each round of checks, your agent posts one report with three blocks: a status grid (current health), an alert when something is down, and a timeline of what changed. Post on every run, with the timestamp as the Idempotency-Key.

Terminal window
curl -X POST http://localhost:3001/api/v1/reports \
-H "Authorization: Bearer pd_xxxxx" \
-H "Idempotency-Key: uptime-2026-06-23T14:05:00Z" \
-H "Content-Type: application/json" \
-d @uptime.json
{
"version": "1.0",
"source": { "id": "src_…" },
"category": { "slug": "monitoring" },
"stream": { "slug": "uptime" },
"report": {
"title": "Uptime check — 14:05",
"severity": "critical",
"occurred_at": "2026-06-23T14:05:00Z",
"tags": ["uptime"]
},
"blocks": [
{
"id": "services", "type": "status",
"items": [
{ "key": "api", "label": "API", "status": "down" },
{ "key": "web", "label": "Web", "status": "healthy" },
{ "key": "db", "label": "Database", "status": "healthy" }
]
},
{
"id": "incident", "type": "alert",
"title": "API is unreachable", "severity": "critical",
"message": "Health check timed out after 3 attempts."
},
{
"id": "history", "type": "timeline",
"events": [
{ "time": "2026-06-23T14:04:00Z", "label": "API latency rising", "status": "degraded" },
{ "time": "2026-06-23T14:05:00Z", "label": "API down", "status": "down" }
]
}
]
}

Set the report severity from the worst service state (critical if anything is down, warning if degraded, else info) so the dashboard’s alert feed only lights up when it should.

Create a dashboard (Dashboards → New) and add two widgets:

  • An alert_feed scoped to the monitoring category — any warning/critical report jumps to the top.
  • A stream_feed on uptime — the latest full checks, so the status grid is always one click away.
{
"version": 1,
"widgets": [
{ "id": "a", "type": "alert_feed", "span": "half", "row": 0,
"config": { "categoryId": "cat_monitoring", "limit": 10 } },
{ "id": "f", "type": "stream_feed", "span": "half", "row": 0,
"config": { "streamId": "str_uptime", "limit": 10 } }
]
}
pulsedeck.app / dashboards / uptime / edit
SCREENSHOT

The dashboard builder with an alert_feed and stream_feed widget placed side by side.

Drop an image into public/shots/ and pass src.

  • Per-client status pages — give each client its own workspace and an uptime stream; the same agent posts to each.
  • Group by category — split monitoring into api, infra, third-party categories and point an alert feed at each.
  • History — because reports are immutable, the stream is a full audit trail of every check you ever ran.