Appearance
Status page
FlowRunner ships a public status page at /status — a shareable, at-a-glance view of whether the platform is up, with 90 days of uptime history per service. It needs no third-party status provider; the data comes from FlowRunner monitoring itself.
What it shows
- A live overall banner — “All systems operational”, “Some systems degraded”, or “Service disruption”. This is checked live on every page load, so the headline is always current.
- Per-service rows — for each tracked service: its current state, latest response latency, a 90-day uptime bar chart, and the window uptime percentage.
Two services are tracked today:
| Service | Covers |
|---|---|
| API | Flow endpoints, the editor, and form submissions. |
| Database | Project storage, responses, and run history (a live MongoDB ping). |
The page is unauthenticated and safe to link publicly — it exposes only up/down/latency, never any project data or secrets.
How it works
FlowRunner records a heartbeat on each scheduler tick. The tick already runs once a minute; on each one it runs the same health check as /api/health and rolls the result — pass/fail plus latency — into a per-day, per-service counter (the status_days collection). The /status page reads those daily rollups to draw the bars and computes current state from a fresh live check.
Enabling it
There is nothing extra to wire up. The heartbeat rides the scheduler tick, so as soon as you have the tick running — see Scheduled triggers wiring — the status page starts collecting history. If the tick isn't running yet, /status still renders and shows the live current state; the history bars simply read “No data yet” until the first heartbeats land.
Rollups self-expire after ~100 days via a TTL index, so the collection stays small on its own.
The honest caveat
Because the heartbeat runs inside the app, a total outage stops the heartbeat entirely — that shows on the bars as a gap (“no data”), not as a red “down” bar. The live banner still reports the outage correctly whenever someone loads the page, but for gap-free external uptime accounting, point an independent uptime monitor at /api/health as well:
bash
curl -isS https://<your-host>/api/healthThat external check sees the app from the outside, so it records downtime even when FlowRunner can't record it itself. The two together — internal heartbeat for history and latency, external monitor for true outage detection — give the fullest picture.