Commit graph

3490 commits

Author SHA1 Message Date
rcourtman
30eb59440f Auto-update Helm chart version to 5.1.36
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Helm CI / Lint and Render Chart (push) Waiting to run
2026-07-08 16:08:38 +00:00
rcourtman
aa168a94c9 Auto-update Helm chart documentation 2026-07-08 16:08:36 +00:00
rcourtman
4af4e0bca5 Prepare v5.1.36 release
Some checks failed
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-07-08 16:12:54 +01:00
rcourtman
6c83a7becb Replace v6 RC testing promo with a v6 availability notice
v6 went GA on 2026-07-04 but v5 installs are pinned to the 5.1.x line
by the updater, so they have no in-app signal that v6 exists. Rework
the existing release announcement fabric (dismissible banner plus the
Updates settings card) from RC-testing copy to a factual notice: v6 is
a new major version, upgrading is a manual step, link to the upgrade
guide and changelog on main. New announcement id so users who
dismissed the RC banner see the GA notice once; dismissal still
persists per browser. Updater line-pinning is untouched.
2026-07-08 16:12:47 +01:00
rcourtman
3cf61d5a37 Fix guest disk alert migration identity
Parse guest VM IDs from canonical resource segments and require per-disk suffix matches so alert migration cannot remap one guest's disk alert onto another guest. Refs #1511
2026-06-28 21:41:00 +01:00
rcourtman
ed5dcc03ea Auto-update Helm chart version to 5.1.35
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Helm CI / Lint and Render Chart (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-06-11 09:43:52 +00:00
rcourtman
dc6a661a53 Auto-update Helm chart documentation 2026-06-11 09:43:50 +00:00
rcourtman
cc6175d787 Scope pre-commit golangci-lint to staged packages with bounded concurrency
Lint only the packages containing staged .go files (falling back to ./... when
none are staged) and cap golangci-lint concurrency/timeout via
GOLANGCI_LINT_CONCURRENCY and GOLANGCI_LINT_TIMEOUT to keep the hook from
exhausting resources on large trees.
2026-06-11 10:06:20 +01:00
rcourtman
b47a81173f Release from branch-owned release lines in trigger-release.sh
Each release line is owned by its branch (release/5.1 cuts 5.1.x, pulse/v6-release
cuts v6). Replace the main-only branch check with a detached-HEAD guard and pass
--ref "${CURRENT_BRANCH}" to the create-release.yml dispatch so the workflow
runs against the releasing branch.
2026-06-11 10:06:12 +01:00
rcourtman
d70cf862ec fix(monitoring): keep unreachable PVE instances visible with offline nodes
The pollPVEInstance error path returned without touching node state, so
a host that stopped answering kept showing its last online snapshot
forever (#1441, reported against v5 in #1135), and a host that was
already down when Pulse started never appeared on the dashboard at all
(#1433).

Route the poll error through the same grace policy as the existing
empty-node fallback: nodes seen within the grace window keep their
prior state with degraded connection health, then flip to offline with
cleared uptime and CPU once the window lapses. An instance with no node
state yet gets the synthesized offline entry from removeFailedPVENode
so it still shows on the dashboard.

Backport of the v6 fixes 02955619f and 8372a22c5.
2026-06-11 10:02:52 +01:00
rcourtman
ddc35911ff Prepare v5.1.35 release 2026-06-11 09:44:03 +01:00
rcourtman
6c55f8057c fix(agentupdate): reject redirects to prevent X-API-Token leak (GHSA-v644-29mm-jwx3)
The agent self-updater's HTTP client followed redirects with no
CheckRedirect policy. Go's net/http strips Authorization/Cookie on a
cross-host redirect but forwards custom headers such as X-API-Token, so a
cross-origin 30x from the operator-configured PulseURL (open redirect,
compromised/hijacked server, DNS/BGP hijack, or a malicious provisioning
URL) leaked the agent API token to the redirect target (CWE-200/CWE-522).

Backport of the v6 fix: refuse to follow any redirect rather than
re-sending the token. Covers both the getServerVersion version-check path
and the binary-download path, with regression tests asserting the redirect
target is never hit.

Reported by tonghuaroot.
2026-06-11 09:06:50 +01:00
rcourtman
5affa518a9 Resolve Ceph pool overrides across reporting sources
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Helm CI / Lint and Render Chart (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
Follow-up to the #1341 dual-source fix. In a Proxmox cluster the
Proxmox-API instance name (cluster/connection name) differs from the
host-agent's node hostname, so a pool's two source identities share no
prefix (e.g. `prodcluster-ceph-pool-X` vs `agent:pve5-ceph-pool-X`). The
per-pool override is saved under one identity. The previous fix only
toggled the `agent:` prefix, which bridges a single node but not a
cluster, so when the deduped winner was the API copy the row found no
override and showed the storage default. With the cluster's API Ceph
source intermittently dropping (the same clustered environment as #1319),
the winner oscillated and the threshold appeared to flap between the
custom value (50%) and the default (80%) on the polling cadence.

Carry every source instance for an FSID as `CephCluster.InstanceAliases`
(populated in DedupeCephClusters) and emit the pool ID under each as
`Storage.AliasIDs`. Override resolution (alert evaluation and the
thresholds UI) now tries the primary ID plus every alias, so a per-pool
override resolves regardless of which source currently wins. This mirrors
v6's source-independent override identity. Non-breaking: existing keys
resolve via aliases, no re-entry needed.
2026-06-02 14:44:43 +01:00
rcourtman
183e169380 Auto-update Helm chart version to 5.1.34 2026-06-02 12:11:56 +00:00
rcourtman
a468858189 Auto-update Helm chart documentation 2026-06-02 12:11:54 +00:00
rcourtman
3a63e2ad5d Prepare v5.1.34 release 2026-06-02 11:42:45 +01:00
rcourtman
7204684ca3 Retire orphaned agent-identity Ceph alerts on dedup
Follow-up to the #1341 dual-source fix. When the Proxmox API identity
wins the FSID dedup, proactively clear any usage alert still active under
this agent's own pool IDs so a pre-fix duplicate clears on the next agent
report rather than aging out over the ~24h stale-alert window. Agent-only
clusters (where the agent identity is the winner) are untouched.
2026-06-02 11:31:21 +01:00
rcourtman
c6364dd453 Collapse dual-source Ceph pools to one alert identity
Fixes #1341 (reopened)

When the same Ceph cluster is reported by both the Proxmox API poller
(instance "pve5") and a Pulse host-agent (instance "agent:pve5"), it
landed in state twice under two pool-ID namespaces
("pve5-ceph-pool-X" vs "agent:pve5-ceph-pool-X"). The frontend collapsed
them via an FSID dedup whose winner was chosen by a fluctuating
completeness score, but alert evaluation ran on the raw, un-deduped list
(and ce1607694 added a third check on the raw agent cluster). So:

  - the threshold UI row identity flipped between the two pool IDs as the
    dedup winner oscillated, making a saved per-pool override appear to
    revert between the custom value and the storage default; and
  - both pool IDs were alert-checked under independent lifecycles,
    producing duplicate, flapping active alerts.

Make alert evaluation and the frontend consume the same deterministic
FSID-deduplicated Ceph view (DedupeCephClusters), preferring the
authoritative non-agent identity so a pool has exactly one ID. Route the
agent-report and mock alert paths through GetDedupedCephClusters, and
honor the legacy "agent:"-prefixed override key for the surviving pool so
existing thresholds keep firing without manual re-entry. Retires the
ce1607694 agent-only check path.
2026-06-02 11:28:28 +01:00
rcourtman
bb9d73c737 Backport alert cooldown delivery guard
Refs #1444
2026-06-01 14:35:36 +01:00
rcourtman
0e79bb1b28 Auto-update Helm chart version to 5.1.33
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Helm CI / Lint and Render Chart (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-05-29 11:47:36 +00:00
rcourtman
46a37a2548 Auto-update Helm chart documentation 2026-05-29 11:47:34 +00:00
rcourtman
afbf8788f0 Backport Proxmox guest metric fallback
Centralize the QEMU guest-agent MemAvailable fallback on the 5.1 branch and record the direct guest-agent value in diagnostic snapshots.

Add regression coverage for the issue #1319 saturated Linux memory payload and Windows fsinfo volume payload.

Refs #1319
2026-05-29 12:02:31 +01:00
rcourtman
9a9ec01b84 Enable opt-in v5 RBAC enforcement
Release: v5.1.33
2026-05-29 11:57:15 +01:00
rcourtman
ce1607694e Run ceph pool alerts for agent-sourced clusters
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
Fixes #1341

When a Pulse host-agent reports Ceph data, ApplyHostReport upserts the
cluster into state but only the Proxmox-API polling path ran
cephPoolAlertStorageTargets. Users with agent-reported Ceph (instance
prefix "agent:hostname") saved per-pool overrides under
agent-prefixed IDs that the alert manager never evaluated. The
threshold appeared to save (and showed Custom in the UI), but the
polling cycle was checking a different storage ID, so the alert
silently stayed dormant. Run CheckStorage for each pool right after
the agent upsert so the override key actually drives evaluation.
2026-05-28 14:11:22 +01:00
rcourtman
2c46c6c2db Stop swallowing alert config persistence errors
Refs #1341

UpdateAlertConfig used to log SaveAlertConfig failures and still tell
the client "saved successfully", leaving the in-memory state with the
new override but the on-disk file untouched. On the next config reload
or process restart, the override silently vanished and the user saw
their threshold "revert" with no surfaced error. Return HTTP 500 with
the persistence error so the frontend can show a real save-failed
toast instead of false confidence.
2026-05-28 13:12:55 +01:00
rcourtman
9ac7df976f Surface alert override identities in diagnostics
Refs #1341

buildAlertsDiagnostic previously emitted only boolean flags (legacy
thresholds, missing cooldown/grouping window). Override keys and their
trigger values were absent, so triaging a support case where the user
suspects an override mismatch required asking them to paste
data/alerts.json from inside their container. Add an Overrides slice
that names each persisted key with its thresholds and disabled flags.
Sanitize mode in the frontend redacts the keys to override-N while
keeping thresholds visible, so a public export still shows the alert
shape without leaking instance names that may be hostnames.
2026-05-28 10:45:10 +01:00
rcourtman
a70f1d9676 Cover Ceph pool override path with regression test
Some checks are pending
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
Refs #1341

The 5.1.32 fix in 6f3bea32f only tested the storage default path for
synthetic Ceph pool entries. Reporter on #1341 sets a 50% per-pool
override on a pool at ~61% usage and still doesn't get an alert; lock
the override path against future regressions so this remains a config
question rather than a code regression.
2026-05-28 10:24:35 +01:00
rcourtman
6b5fb6f82a Fix guest table full-width layout expansion
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
Ensure the dashboard guest table expands to 100% of the container width on large screens (especially under the Proxmox overview tab), while retaining the minimum width calculation to prevent horizontal collapses.

Fixes #1480
2026-05-26 07:30:35 +01:00
rcourtman
c01917811a Auto-update Helm chart version to 5.1.32
Some checks failed
Build and Test / Secret Scan (push) Waiting to run
Build and Test / Frontend & Backend (push) Waiting to run
Core E2E Tests / Playwright Core E2E (push) Waiting to run
Helm CI / Lint and Render Chart (push) Has been cancelled
2026-05-25 07:13:46 +00:00
rcourtman
9289b16346 Prepare v5.1.32 release 2026-05-25 07:36:27 +01:00
rcourtman
18944b0350 Fix resolved notifications for state alerts
Refs #1350
2026-05-24 23:27:45 +01:00
rcourtman
15d76f34ea Fix dashboard guest table width in Firefox
Refs #1430
2026-05-24 23:20:15 +01:00
rcourtman
375ff62a96 Persist Docker-agent image identity by default
Refs #1447
2026-05-24 23:14:45 +01:00
rcourtman
da38263ea4 Prefer linked host-agent VM disk inventory
Refs #1438
2026-05-24 23:07:24 +01:00
rcourtman
d8d5016a30 Preserve split agent backend IDs in unified rows
Refs #1421
2026-05-24 22:56:21 +01:00
rcourtman
c10b0dc353 Keep metric bars visually critical when alerts are disabled
Refs #1319
2026-05-24 22:43:46 +01:00
rcourtman
469a8e1bdc Count Ceph monitors from detailed monmap data
Refs #1290
2026-05-24 22:32:58 +01:00
rcourtman
8046b5035d Prefer Proxmox guest-agent privileges
Refs #1466
2026-05-24 22:28:29 +01:00
rcourtman
117ec901da Clarify PBS alert threshold identity
Refs #1448
2026-05-24 22:13:58 +01:00
rcourtman
a8f6dbd8b4 Prefer host-agent temperature data over SSH fallback
Refs #1473
2026-05-24 22:04:36 +01:00
rcourtman
98945e3228 Allow multiline email recipient entry
Refs #1462
2026-05-24 22:01:58 +01:00
rcourtman
f32a3e5235 Coalesce duplicate metric writes
Refs #1442
2026-05-24 21:55:27 +01:00
rcourtman
8600706da3 Fix FreeBSD agent restart handling
Refs #1457
2026-05-24 21:51:11 +01:00
rcourtman
0dca8a0375 Keep snapshot polling independent of backup scans
Refs #1437
2026-05-24 21:41:56 +01:00
rcourtman
6f3bea32ff Fix Ceph pool alert threshold targets
Refs #1341
2026-05-24 21:35:46 +01:00
rcourtman
2dffa40379 Fix v5 user-reported monitoring and auth issues
Refs #1452

Refs #1455

Refs #1467

Refs #1471

Refs #1472

Refs #1477

Refs #1478

Refs #1479
2026-05-24 21:07:55 +01:00
rcourtman
e503863c9e Fix guest metadata migration race
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Helm CI / Lint and Render Chart (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
Refs #1435
2026-05-17 09:43:42 +01:00
rcourtman
87440d9a42 Prepare v5.1.31 release 2026-05-17 09:32:35 +01:00
rcourtman
87ed3398b9 Fix stable installer prerelease fallback
Refs #1435
2026-05-17 09:30:33 +01:00
rcourtman
5a20994b0d Auto-update Helm chart documentation
Some checks failed
Build and Test / Secret Scan (push) Has been cancelled
Helm CI / Lint and Render Chart (push) Has been cancelled
Build and Test / Frontend & Backend (push) Has been cancelled
Core E2E Tests / Playwright Core E2E (push) Has been cancelled
2026-05-03 19:11:34 +00:00