[PATCH datacenter-manager/proxmox{,-backup,-yew-comp} v2 00/25] metric collection for the PDM host

Lukas Wagner
2026-03-19T09:46:56Z

This series add metric collection physical PDM hosts.

The patches for `proxmox` introduce three new crates:
- proxmox-disks: broken out from proxmox-backup, needed to read disk stats
- proxmox-parallel-handler: also broken out from proxmox-backup,
needed as a dependency for proxmox-disks. Since the scope was manageable,
this series improves the existing code a bit by adding a dedicated error type,
some documentation and basic unit tests
- proxmox-procfs: as a new home for any procfs related modules. this patch series adds
a `pressure` module for reading pressure stall information for the host and cgroups.
The general idea is that we should move other procfs helpers from proxmox-sys into
this new crate, but to avoid scope explosion this is not done as a part of this
series

The patches for proxmox-backup just switch over to the new moved implementations of proxmox-disks
and proxmox-parallel-handler.

The patches for proxmox-yew-comp slight adapt the existing NodeStatusPanel to allow the application
to inject child components into the same panel.

The proxmox-datacenter-manager patches do some initial refactoring (naming), and then add the needed
collection loop, API types and UI elements.

Changes since v1:
- rebased
- fixed failing unit test
- fixed mistake in Cargo.toml
- dropped patch for proxmox-sys, Fabian fixed the issue
using another approach

proxmox:

Lukas Wagner (11):
parallel-handler: import code from Proxmox Backup Server
parallel-handler: introduce custom error type
parallel-handler: add documentation
parallel-handler: add simple unit-test suite
disks: import from Proxmox Backup Server
disks: fix typo in `initialize_gpt_disk`
disks: add parts of gather_disk_stats from PBS
disks: gate api macro behind 'api-types' feature
disks: clippy: collapse if-let chains where possible
procfs: add helpers for querying pressure stall information
time: use u64 parse helper from nom

Cargo.toml | 10 +
proxmox-disks/Cargo.toml | 34 +
proxmox-disks/debian/changelog | 5 +
proxmox-disks/debian/control | 94 ++
proxmox-disks/debian/copyright | 18 +
proxmox-disks/debian/debcargo.toml | 7 +
proxmox-disks/src/lib.rs | 1434 +++++++++++++++++
proxmox-disks/src/lvm.rs | 60 +
proxmox-disks/src/parse_helpers.rs | 52 +
proxmox-disks/src/smart.rs | 228 +++
proxmox-disks/src/zfs.rs | 205 +++
proxmox-disks/src/zpool_list.rs | 294 ++++
proxmox-disks/src/zpool_status.rs | 496 ++++++
proxmox-parallel-handler/Cargo.toml | 16 +
proxmox-parallel-handler/debian/changelog | 5 +
proxmox-parallel-handler/debian/control | 36 +
proxmox-parallel-handler/debian/copyright | 18 +
proxmox-parallel-handler/debian/debcargo.toml | 7 +
proxmox-parallel-handler/src/lib.rs | 344 ++++
proxmox-procfs/Cargo.toml | 18 +
proxmox-procfs/debian/changelog | 5 +
proxmox-procfs/debian/control | 50 +
proxmox-procfs/debian/copyright | 18 +
proxmox-procfs/debian/debcargo.toml | 7 +
proxmox-procfs/src/lib.rs | 1 +
proxmox-procfs/src/pressure.rs | 332 ++++
proxmox-time/src/parse_helpers.rs | 5 -
proxmox-time/src/time_span.rs | 4 +-
28 files changed, 3796 insertions(+), 7 deletions(-)
create mode 100644 proxmox-disks/Cargo.toml
create mode 100644 proxmox-disks/debian/changelog
create mode 100644 proxmox-disks/debian/control
create mode 100644 proxmox-disks/debian/copyright
create mode 100644 proxmox-disks/debian/debcargo.toml
create mode 100644 proxmox-disks/src/lib.rs
create mode 100644 proxmox-disks/src/lvm.rs
create mode 100644 proxmox-disks/src/parse_helpers.rs
create mode 100644 proxmox-disks/src/smart.rs
create mode 100644 proxmox-disks/src/zfs.rs
create mode 100644 proxmox-disks/src/zpool_list.rs
create mode 100644 proxmox-disks/src/zpool_status.rs
create mode 100644 proxmox-parallel-handler/Cargo.toml
create mode 100644 proxmox-parallel-handler/debian/changelog
create mode 100644 proxmox-parallel-handler/debian/control
create mode 100644 proxmox-parallel-handler/debian/copyright
create mode 100644 proxmox-parallel-handler/debian/debcargo.toml
create mode 100644 proxmox-parallel-handler/src/lib.rs
create mode 100644 proxmox-procfs/Cargo.toml
create mode 100644 proxmox-procfs/debian/changelog
create mode 100644 proxmox-procfs/debian/control
create mode 100644 proxmox-procfs/debian/copyright
create mode 100644 proxmox-procfs/debian/debcargo.toml
create mode 100644 proxmox-procfs/src/lib.rs
create mode 100644 proxmox-procfs/src/pressure.rs

proxmox-backup:

Lukas Wagner (3):
tools: move ParallelHandler to new proxmox-parallel-handler crate
tools: replace disks module with proxmox-disks
metric collection: use blockdev_stat_for_path from proxmox_disks

Cargo.toml | 6 +
src/api2/admin/datastore.rs | 10 +-
src/api2/config/datastore.rs | 2 +-
src/api2/node/disks/directory.rs | 10 +-
src/api2/node/disks/mod.rs | 20 +-
src/api2/node/disks/zfs.rs | 14 +-
src/api2/tape/restore.rs | 25 +-
src/backup/verify.rs | 3 +-
src/bin/proxmox_backup_manager/disk.rs | 9 +-
src/server/metric_collection/mod.rs | 50 +-
src/server/pull.rs | 5 +-
src/tape/pool_writer/new_chunks_iterator.rs | 3 +-
src/tools/disks/lvm.rs | 60 -
src/tools/disks/mod.rs | 1394 -------------------
src/tools/disks/smart.rs | 227 ---
src/tools/disks/zfs.rs | 205 ---
src/tools/mod.rs | 3 -
src/tools/parallel_handler.rs | 160 ---
18 files changed, 62 insertions(+), 2144 deletions(-)
delete mode 100644 src/tools/disks/lvm.rs
delete mode 100644 src/tools/disks/mod.rs
delete mode 100644 src/tools/disks/smart.rs
delete mode 100644 src/tools/disks/zfs.rs
delete mode 100644 src/tools/parallel_handler.rs

proxmox-yew-comp:

Lukas Wagner (3):
node status panel: add `children` property
RRDGrid: fix size observer by attaching node reference to rendered
container
RRDGrid: add padding and increase gap between elements

src/node_status_panel.rs | 16 ++++++++++++++++
src/rrd_grid.rs | 5 +++--
2 files changed, 19 insertions(+), 2 deletions(-)

proxmox-datacenter-manager:

Lukas Wagner (8):
metric collection: clarify naming for remote metric collection
metric collection: fix minor typo in error message
metric collection: collect PDM host metrics in a new collection task
api: fix /nodes/localhost/rrddata endpoint
pdm: node rrd data: rename 'total-time' to
'metric-collection-total-time'
pdm-api-types: add PDM host metric fields
ui: node status: add RRD graphs for PDM host metrics
ui: lxc/qemu/node: use RRD value render helpers

Cargo.toml | 2 +
cli/client/src/metric_collection.rs | 4 +-
debian/control | 1 +
lib/pdm-api-types/src/metric_collection.rs | 2 +-
lib/pdm-api-types/src/rrddata.rs | 74 ++++-
lib/pdm-client/src/lib.rs | 8 +-
server/Cargo.toml | 2 +
server/src/api/metric_collection.rs | 10 +-
server/src/api/nodes/mod.rs | 2 +-
server/src/api/nodes/rrddata.rs | 73 +++-
server/src/api/remotes.rs | 2 +-
server/src/api/rrd_common.rs | 2 +-
.../local_collection_task.rs | 199 +++++++++++
server/src/metric_collection/mod.rs | 40 ++-
...tion_task.rs => remote_collection_task.rs} | 8 +-
server/src/metric_collection/rrd_task.rs | 187 ++++++++++-
server/src/metric_collection/state.rs | 2 +-
ui/src/administration/node_status.rs | 312 +++++++++++++++++-
ui/src/pbs/node/overview.rs | 29 +-
ui/src/pve/lxc/overview.rs | 34 +-
ui/src/pve/node/overview.rs | 29 +-
ui/src/pve/qemu/overview.rs | 34 +-
ui/src/renderer.rs | 49 +++
23 files changed, 954 insertions(+), 151 deletions(-)
create mode 100644 server/src/metric_collection/local_collection_task.rs
rename server/src/metric_collection/{collection_task.rs => remote_collection_task.rs} (99%)

Summary over all repositories:
71 files changed, 4831 insertions(+), 2304 deletions(-)

--
Generated by murpp 0.10.0