Public status pages¶
A status page is a publicly accessible „are our services up?" page — typically status.customer.com. Vesana can generate one or more per tenant.
Concept¶
flowchart LR
OS[Vesana data] --> SP[Status-page generator]
SP --> URL["status.customer.com"]
URL --> KU[End users / staff]
The page is read-only, logic stays in Vesana — only curated statuses are shown. No login, no internal detail.
Create a status page¶
/admin/status-pages → New:
| Field | Meaning |
|---|---|
| Name | „Acme Production Status" |
| Slug | URL path: /status/acme-prod |
| Tenant | source tenant |
| Branding | logo, color, header text |
| Custom domain | optional, e.g. status.acme.com |
| Components | which hosts/services are shown |
| Display groups | hierarchy like „Web", „API", „Email" |
Component selection¶
Per component:
| Field | Meaning |
|---|---|
| Source service | concrete host_service |
| Display name | „API Endpoint Europe" (customer-friendly) |
| Group | „Web", „API" |
| Visible status | OK + hard cycles forwarded, others masked |
Example: an internal CPU check shouldn't appear on the public page — only an aggregated „API reachable" status combining ping + HTTP.
Custom domain¶
- CNAME in DNS to
<slug>.statuspages.vesana.org - Enter custom domain in status page config
- Vesana requests Let's Encrypt cert (if available)
Until validation, the page runs under the slug path.
Branding¶
| Field | Meaning |
|---|---|
| Logo | PNG/SVG, max 200 KB |
| Primary color | hex |
| Header text | optional greeting |
| Custom CSS | Pro/Enterprise: own styles |
Default branding is neutral gray, no Vesana marking — end customer sees nothing of the vendor.
Content¶
The page shows:
- Current status per component (green/yellow/red)
- Incidents in the last 90 days as a list
- Planned maintenance (from downtimes)
- Uptime statistic (90 d as pixel bar)
- RSS feed (
/status/<slug>/feed.xml) - Email subscription for incidents (optional)
Manual incidents¶
Some incidents aren't auto-detected (third-party outage, comms update). Manually:
Status page → Incidents → New with title, description (Markdown), current status (investigating, identified, monitoring, resolved).
Updates can be added — page shows a timeline.
Subscriptions¶
End users can subscribe via email — new incident triggers a mail. Management at /status/<slug>/subscribe.
Data lives in the same tenant, so isn't isolated from internal tenant.
RSS¶
https://status.acme.com/feed.xml for machine consumption (e.g. internal dashboard aggregating multiple status pages).
Privacy¶
Nothing on the status page contains:
- Internal hostnames
- IP addresses
- Measurement values (only OK/WARN/CRIT)
- Names of other tenants
If a component is accidentally too detailed, override the display name.
Permissions¶
| Permission | Effect |
|---|---|
status_page.view |
view (internally) |
status_page.edit |
edit |
status_page.publish |
add / activate custom domain |
Next¶
- Custom dashboards — internal counterpart to public page
- Downtimes — planned maintenance shows up automatically