Commit Graph
530 Commits
Author SHA1 Message Date
MacRimi aa4adc34a9 fix(monitor): place the Secure Gateway template on an active storage 2026-10-30 22:58:12 +01:00
MacRimiandGitHub 72908e55aa Merge pull request #562 from DrOwl/feature/disk-controller-mapping
Map storage devices to their PCI storage controller
2026-10-30 21:39:07 +01:00
MacRimiandGitHub 668b557fd5 Merge pull request #561 from DrOwl/feature/zfs-pool-details
Show ZFS pool layout, scrub status and device health in Storage view
2026-10-30 21:38:12 +01:00
MacRimi bd42df3ead fix(monitor): keep the LVM filter when the scan names its devices 2026-10-30 17:32:25 +01:00
MacRimi cf7b8363da fix(monitor): serve the bundled PWA manifest and service worker 2026-10-30 16:59:02 +01:00
DrOwlandClaude Opus 5.5 72491b2445 Show ZFS pool layout, scrub status and device health in Storage view
/api/storage now runs a single `zpool status -j --json-int -P` (OpenZFS
2.3+) for all pools and returns, per pool:
- top-level vdevs with type, raidz/draid parity, class (data, special,
  dedup, log, cache, spare), state and read/write/checksum errors
- member devices with path, resolved base disk, state, error counters,
  slow I/Os, and the spare-N/replacing-N they sit under while swapping
- scrub/resilver status (progress only while running), the pool's
  status/action text and data-error count
- fragmentation, capacity and dedup ratio from `zpool list`

This replaces the per-pool `zpool status` text loop whose result
(zfs_disks) was never used. Member paths (by-id, by-partlabel, wwn) are
resolved to base disks via sysfs rather than an lsblk call per device.
On ZFS without `-j`, pools report details_available: false and the UI
falls back to the existing basic card.

The ZFS pool card shows a layout summary (e.g. "RAIDZ2 | 5 disks |
Scrub finished ...") and opens a details dialog with the vdev tree,
per-device error counts, scrub/resilver progress, and links from each
member disk to its disk details dialog.

Tested against `zpool status -j` output from PVE 9 / OpenZFS 2.4.4:
mirror, raidz2, striped mirrors, single-disk pool, and a file-backed
degraded raidz1 with log, cache and spare devices.

Tests cover the `zpool status -j` -> Storage view shape against real
output from PVE 9 / OpenZFS 2.4.4 hosts (serials and WWNs replaced):
mirror, raidz2, single-disk pool, slow I/Os, and a degraded raidz1 with
log, cache and spare devices; plus a synthetic resilver with a spare
swapping in. Member path -> base disk resolution is tested against a
stubbed sysfs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 11:55:02 +00:00
DrOwlandClaude Opus 5.5 30034e7aa3 Map storage devices to their PCI storage controller
Each disk in /api/hardware now carries a controller_slot, resolved from
the disk's sysfs device path: the deepest PCI address in that path is the
controller (bridges sit above it), normalised to lspci's slot format so it
matches pci_devices[].slot directly. NVMe falls back to the controller's
own sysfs link when the namespace resolves to a subsystem with no PCI
parent; zvols and other virtual devices get None.

Hardware page:
- The disk dialog shows its storage controller (click through to the
  controller), and the PCI device dialog lists the disks attached to it.
- Storage controllers in the PCI Devices list get a badge with the
  number of attached disks.

Storage view:
- /api/storage returns controller_slot on each physical disk plus a
  controllers map (slot -> class, vendor, device, subsystem name,
  driver), built from the cached `lspci -vmm` output so the Storage view
  doesn't need the heavier /api/hardware enumeration.
- "Physical Disks & SMART Status" can group disks under their storage
  controller, with a header showing the controller name, slot, driver
  and disk count. Groups follow PCI slot order; disks with no resolvable
  controller are listed last. USB disks keep their own section.
- The disk details dialog shows the storage controller on the Overview
  tab.
- Grouping is opt-in via a new Storage Display card in Settings, stored
  per browser (localStorage) and synced across open views, following the
  existing nav-tab-order preference pattern. Off by default.

Also:
- Treat "IDE interface" as a storage controller, so SATA controllers left
  in BIOS IDE mode (e.g. Intel 7 Series, ata_piix) appear in pci_devices
  and disks behind them can be mapped.
- lspci prints "Device xxxx" when it has no subsystem name; that
  placeholder is ignored so the chip name is shown instead.
- Add the missing sdevice field to the PCIDevice type.

Tests cover the sysfs path -> controller slot rule against real paths
from two PVE 9 hosts (SAS HBA, AHCI SATA, SATA in BIOS IDE mode, USB
behind a hub, NVMe behind chipset bridges), the non-zero PCI domain case
(Intel VMD), the NVMe multipath fallback, and get_storage_controllers'
lspci parsing including the "Device xxxx" placeholder and driver lookup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 11:47:00 +00:00
VAIO73 ba3fb1197f fix: read completed update results without a live terminal 2026-10-28 17:30:44 +00:00
VAIO73 52cd21dcb1 feat: add guarded host restart and read-only ProxMenux version status 2026-10-28 17:30:44 +00:00
MacRimi 085bb084eb fix(monitor): show quiet rotational disks by their identity after a restart 2026-10-27 17:20:44 +01:00
MacRimi b6500c147e Monitor: forget the App tab of a destroyed guest 2026-10-26 18:02:30 +01:00
MacRimi 0a7a598210 fix: keep PBS logs and maintenance jobs readable
- Draw ZFS ARC only from recorded history, leaving it out on PBS
- Read the maintenance jobs of a local PBS from its API, with their last state
- Show the OK state of PBS jobs in green whatever its case
- Compress rotated logs at once in the Log2RAM and logrotate profiles
- Offer the Log2RAM 1.8 and logrotate 1.2 update to existing installations
2026-10-20 00:53:21 +02:00
VAIO73 361f26bf70 Merge develop into local application icon discovery 2026-10-19 17:30:37 +00:00
MacRimi 423156214a Merge remote-tracking branch 'origin/develop' into HEAD 2026-10-19 17:27:45 +02:00
Jonatan Castro 70d4101243 feat(oci): show update availability and update selected applications 2026-10-19 11:23:45 +02:00
VAIO73 cfb90a094c feat(monitor): discover Docker application endpoints on demand 2026-10-19 08:03:25 +00:00
VAIO73 e63ec2ad7b feat: discover validated icons from local LXC applications 2026-10-18 18:41:29 +00:00
MacRimi 947b5291e9 Remove the notification menu from the VM and LXC backup dialog; backups follow the notification settings 2026-10-18 17:43:41 +02:00
MacRimi ccdc21504a Merge remote-tracking branch 'origin/develop' into HEAD 2026-10-18 11:55:20 +02:00
MacRimi 98ae1f3626 feat(pbs): post-install menu for Proxmox Backup Server
- Open the post-install menu from the PBS menu
- List only the customizable options that apply to PBS
- Offer the PBS no-subscription repository through the native repository API
- Upgrade PBS with the package list shown before applying it
- Remove and restore the subscription notice on the PBS web interface
- Install Figurine on PBS without the Proxmox VE aliases
- Offer the Helper-Scripts PBS post-install and microcode scripts
- Tune firewall bridges after the systemd udev rules in the automated post-install
- Add PBS repository policy tests and syntax checks
- Document the PBS differences on the post-install page
- Use backups in the Spanish PBS update message
2026-10-17 18:13:44 +02:00
VAIO73 e89f2596b2 feat: discover native LXC applications on demand with evidence 2026-10-17 11:27:16 +00:00
MacRimi 08ae134860 Keep guest services off PBS hosts, refuse only known PBS in PVE scripts and follow the menu conventions
- On a PBS host the Monitor no longer starts the node metrics and VM prewarmers, the LXC update scheduler, the managed installs detector or the app update emitter, which read guests and PVE metrics that do not exist there
- pmx_require_pve refuses only a host known to be PBS, so an unreadable package list leaves the PVE scripts working as before
- The PBS menu numbers its options, shows the tables proxmox-backup-manager prints instead of raw JSON, and says Goodbye on exit
- The PBS update asks to press Enter before returning
- Spanish: Datastores de PBS
2026-10-17 10:01:37 +02:00
MacRimi 69b2dc31d0 Merge remote-tracking branch 'origin/develop' into HEAD 2026-10-17 09:47:40 +02:00
MacRimi 628dbe3aa3 Name only physical volumes in a restricted LVM scan and keep its own reads from counting as activity
- An explicit --devices list makes LVM open every device in it, while a plain scan opens only known volumes; the list now names only LVM physical volumes, read from udev by lsblk, so no other disk is touched
- RAID, multipath and encrypted volumes follow the disks they are built on, instead of turning the whole check off
- After each pvs, lvs or vgs run, the disks it read take their counters as the new baseline, so an unused disk can become idle
2026-10-17 00:03:39 +02:00
MacRimi 72b596ff4b Merge remote-tracking branch 'origin/develop' into HEAD 2026-10-16 23:58:03 +02:00
Jonatan c32a9880d9 Merge develop and retain guest retention beside PBS navigation 2026-10-16 23:56:46 +02:00
Jonatan 3a90f218ac Merge develop and preserve generic i18n regression coverage 2026-10-16 23:03:54 +02:00
Jonatan 5197d84328 Merge develop and preserve generic i18n regression coverage 2026-10-16 23:03:50 +02:00
Jonatan 511bfe52ea feat: support PBS hosts and remote PBS monitoring 2026-10-16 21:46:26 +02:00
Jonatan 4ffc883c32 Apply disk exclusions and idle policy to automatic LVM scans 2026-10-16 20:45:17 +02:00
VAIO73 9e6978cf10 fix: guard OCI scheduled updates after stop 2026-10-16 18:27:33 +00:00
Jonatan d487f33700 Allow selecting and deleting guest backup archives in Monitor 2026-10-16 20:23:09 +02:00
VAIO73 9bc83a13ef fix: address scheduled stopped LXC review feedback 2026-10-16 17:21:34 +00:00
VAIO73 59ab7784a7 i18n: localize stopped scheduled update reason 2026-10-16 17:21:34 +00:00
VAIO73 c2ad35ca73 fix: skip scheduled updates for stopped LXC 2026-10-16 17:21:34 +00:00
MacRimi 4e572b8c21 Merge branch 'develop' into feature/zram-memory-profile 2026-10-16 17:27:04 +02:00
VAIO73 8b0ca0d06b fix: accept HA shutdown tasks 2026-10-15 04:33:38 +00:00
VAIO73 3254ca6d05 fix: confirm VM control tasks safely 2026-10-15 04:29:26 +00:00
VAIO73 3e806afe8c fix: wait for VM power tasks before completing controls 2026-10-15 04:29:26 +00:00
VAIO73 18236e06bc fix: require running LXC for package checks 2026-10-15 03:49:58 +00:00
VAIO73 664ef981e5 fix: separate LXC package checks from installation 2026-10-15 03:49:58 +00:00
Gabriel Gonzalez Pineda 51ed84f9b1 feat(post-install): add optional zram profile and metrics 2026-10-15 00:28:52 +01:00
VAIO73 638552e5f8 fix: preserve verified LXC state before a failed start 2026-10-14 17:51:53 +00:00
VAIO73 3489dc0530 fix: preserve update observations for stopped LXC guests 2026-10-14 17:51:53 +00:00
MacRimi c9479c6ac1 set apart host backups of other nodes and of former jobs
- Each host backup carries the node it belongs to, read from its source host or its name (`hostcfg-<node>`, a job of this node or its PBS backup ID); both backup lists also return the node name.
- The backup list offers This node / All nodes when some backup belongs to another node, with This node as the default, a count that follows the choice and a note with the backups not shown.
- Backups whose node cannot be read from their name are listed under All nodes.
- A local backup made on this node by a job that no longer exists is marked as Former job, read from its metadata file; backups without it, manual ones and those of other nodes are not marked.
- New texts in English and Spanish, modelled in the translation steady-state test.
- Tests for the node and the former job read from each backup, and for the cluster node membership notifications.
2026-10-14 18:04:42 +02:00
VAIO73 e83e66caaf fix: revalidate externally changed LXC state 2026-10-13 17:08:42 +00:00
MacRimi ea5831d1bf fix(monitor): an application installed from the OCI menu shows on the Apps page on its own 2026-10-13 16:56:57 +02:00
MacRimi 1ac1f58afa fix(monitor): read the node name without waiting for the Proxmox API 2026-10-12 10:59:26 +02:00
MacRimi 693e6ae481 fix(monitor): the observation history of a disk is permanent
- An observation is never left out for its age and cannot be dismissed:
  the rule that hid it after 30 days without a repetition, and the
  clean-up that marked the ones of a missing device, are removed.
- The ones earlier versions left out are shown again; an error that came
  back while hidden appears with its first date and its full count.
- The audit attributes recorded events to a disk by its serial number.
2026-10-08 17:32:47 +02:00
MacRimi 053b6c81f8 fix(monitor): disk observations follow the disk, and OCI containers keep their address
- The observations of a disk belong to its serial number, not to its
  connector: a replaced disk starts clean, and the badge of the list
  counts what the detail of the disk lists.
- An OCI container is recognised while it is still being installed, so
  an image that carries Docker inside is not offered Docker.
- Links use the IPv4 address of a container and write IPv6 in brackets;
  an answer without an address of its own is read again.
- The Monitor restores, when it starts, the DHCP clients of containers
  that were started from it.
2026-10-08 17:14:36 +02:00