4.8 KiB
Unified Resource Model
Pulse v6 introduces a unified resource model that normalizes all monitored infrastructure — Proxmox VE, Proxmox Backup Server, Proxmox Mail Gateway, Docker, host agents, Kubernetes, and TrueNAS — into a single, consistent data structure.
Why Unified Resources?
In earlier versions, each platform had its own data model, API endpoints, and frontend pages. This created:
- Duplicate UI code for each platform
- Inconsistent filtering and search
- No cross-platform comparison
- Separate alert logic per platform
The unified model eliminates this by representing every resource as a single Resource struct with a common set of fields plus optional platform-specific extensions.
Core Concepts
Resource
Every monitored entity is a Resource with:
| Field | Description |
|---|---|
id |
Globally unique identifier |
name |
Display name |
type |
host, vm, container, storage, pool, dataset, disk, service, cluster, pod, deployment |
status |
online, warning, critical, offline, unknown |
sources |
Array of contributing data sources (e.g., ["pve", "agent"]) |
sourceStatus |
Per-source health status |
metrics |
CPU, memory, disk, network (when available) |
| Platform extensions | .kubernetes, .truenas, .docker, etc. |
Sources
A single resource can be reported by multiple sources. For example, a Proxmox node might have data from both the PVE API and a host agent:
sources: ["pve", "agent"]
sourceStatus:
pve: { status: "online", lastSeen: "..." }
agent: { status: "online", lastSeen: "..." }
The aggregate status is computed from all contributing sources.
Data Sources
| Source | What it feeds |
|---|---|
pve |
Proxmox VE API — nodes, VMs, containers, storage |
pbs |
Proxmox Backup Server — datastores, backups, sync jobs |
pmg |
Proxmox Mail Gateway — mail stats, cluster health |
agent |
Unified agent — host metrics, temperatures, S.M.A.R.T. |
docker |
Docker/Podman — containers, images, networks |
kubernetes |
Kubernetes — clusters, nodes, pods, deployments |
truenas |
TrueNAS — system info, ZFS pools, datasets, snapshots, replication |
Unified Navigation
The v6 UI organises pages by task instead of platform:
| Page | What it shows |
|---|---|
| Dashboard | Overview panels aggregating all sources |
| Infrastructure | All hosts: Proxmox nodes, Docker hosts, K8s nodes, TrueNAS systems, agent-only hosts |
| Workloads | All workloads: VMs, LXC containers, Docker containers, Kubernetes pods |
| Storage | All storage: Proxmox storage, PBS datastores, ZFS pools/datasets, Ceph |
| Recovery | All backup/snapshot artifacts: PBS backups, PVE local dumps, ZFS snapshots, replication |
| Alerts | Unified alert view across all platforms |
Every page supports source filtering — click a source badge to see only resources from that platform.
Legacy Route Compatibility
Legacy URLs redirect automatically with toast notifications:
| Legacy Route | Redirects To |
|---|---|
/proxmox/overview |
/infrastructure |
/hosts |
/infrastructure?source=agent |
/docker |
/workloads?source=docker |
/kubernetes |
/infrastructure?source=kubernetes |
/services, /mail |
/infrastructure?source=pmg |
See Migration Guide for the full mapping.
API
Primary Endpoint
GET /api/resources
Returns all unified resources. Supports query parameters:
| Parameter | Description |
|---|---|
type |
Filter by resource type (host, vm, container, etc.) |
source |
Filter by data source (pve, docker, kubernetes, etc.) |
status |
Filter by status (online, warning, critical, offline) |
search |
Full-text search across name, ID, tags |
Resource Details
Individual resource details are available via the unified state WebSocket connection, which pushes real-time updates to the frontend.
Frontend Architecture
The frontend uses SolidJS reactive selectors to derive views from the unified store:
useResources()— access the full unified resource listuseInfrastructureResources()— hosts filtered for the Infrastructure pageuseWorkloadResources()— VMs/containers/pods for the Workloads pageuseStorageResources()— storage pools/datasets for the Storage pageuseRecoveryResources()— backup/snapshot data for the Recovery page
These selectors read from a single SolidJS store that is updated in real-time via WebSocket.
See Also
- Architecture — system architecture overview
- Migration Guide — upgrading from platform-specific navigation
- API Reference — full API documentation
- TrueNAS Integration — TrueNAS-specific details