Skip to content

Custom dashboards

While the main dashboard has a fixed layout, custom dashboards let you assemble your own views — mixed widgets, your own variables, versioning, public links.

Create a dashboard

/custom-dashboardsNew:

Field Meaning
Tenant required — every dashboard belongs to exactly one tenant
Name display name
Description optional

The first time a tenant is opened, a default dashboard called "Overview" is created automatically (four single-value tiles: Hosts Total, OK, Warning, Critical). It can't be deleted, but can be rebuilt like any other dashboard.

Place widgets

Drag-and-drop grid. Per widget:

  1. + Widget
  2. Choose a widget type (see Widget reference)
  3. Set the data source and options
  4. Resize via the resize handle

Variables

Variables are placeholders like $host, $tenant, letting several widgets react to the same selection at once.

Variable types

Type Values
query dynamic from the DB: hosts, checks, tenants, tags
custom list of manually maintained values

Using variables in widgets

In any widget option that expects an ID list (host_ids, service_ids, tenant_ids, …), insert the variable.

URL persistence

Variable values land in URL params:

/custom-dashboards/<id>?var-host=web01,web02&from=now-24h

That makes "share the current view" trivial: copy the browser URL.

Time range

One global time range per dashboard (default from the dashboard config, overridable via the from/to URL params): now-15mnow-30d, or a fixed range. Applies to all time-based widgets.

Versioning

Every config change automatically creates a new version (dashboard_versions) — with author and timestamp. The last 50 versions are kept; older ones are dropped on the next save.

In the dashboard header → the history icon: list of recent versions. Restore resets the config to the chosen version — which itself creates a new version (nothing is lost, everything is reversible).

Home dashboard

Every user can set a custom dashboard as their own home page: the house icon in the dashboard header. From then on, login (or clicking the "Vesana" logo) goes straight there instead of the main dashboard.

  • Stored in user_preferences.home_dashboard_id (no foreign-key binding — if that dashboard is later deleted, the home page automatically falls back to the main dashboard, no broken state).
  • Removable again via the same icon.
  • Purely per-user — doesn't affect anyone else.

A dashboard is normally only visible to logged-in users of its tenant. On top of that, you can generate a public, tokenized link — read-only, no login required:

Dashboard header → Share:

Field Meaning
Validity 1–3650 days (default 30), or no expiry
Password optional — adds extra protection to the link
Fixed variables certain variables can be pinned to a fixed value so the visitor can't change them

The link has the form /public/d/<token>. With password protection, the page asks for the password once and then remembers a time-limited session in the browser. Layout and widgets are fixed; time range and (unpinned) variables remain adjustable by the visitor. All data queries on the public page are server-side scoped to the dashboard's tenant — a visitor can't query another tenant's data via the public API.

The link can be revoked instantly via Remove share (the token is deleted; a new share generates a new token).

Permission

Permission Effect
dashboards.create create new dashboards
dashboards.edit edit, share, restore versions
dashboards.delete delete (except a tenant's default dashboard)

Viewing isn't gated by its own permission — every logged-in user sees the dashboards within their tenant scope.

Example

A dashboard called "Datacenter Health":

┌─────────────────────────────────────────────────────────────┐
│ Variable: Tenant=$tenant, Host=$host, Time=now-24h           │
├─────────────────────────────────────────────────────────────┤
│ [Status overview]  [Current problems]  [Host grid]           │
├─────────────────────────────────────────────────────────────┤
│ [Top 10 problems by time (bar chart)]                        │
├─────────────────────────────────────────────────────────────┤
│ [CPU per host (heatmap)]   [Disk per host (bar chart)]        │
├─────────────────────────────────────────────────────────────┤
│ [Capacity predictions]                                        │
└─────────────────────────────────────────────────────────────┘

Next