Commit Graph

3007 Commits

Author SHA1 Message Date
rcourtman
f1ad0ffe06 fix: correct node type check in empty state conditions
The dashboard and storage pages incorrectly filtered nodes by type === 'pve',
but the backend provides nodes with type === 'node'. This caused the 'No Proxmox
VE nodes configured' message to appear even when nodes were present.

- Dashboard.tsx: Simplified check to props.nodes.length === 0
- Storage.tsx: Changed filter to type === 'node'

Fixes #1192
2026-02-05 12:22:01 +00:00
rcourtman
8b4325bc53 Exercise agent version parsing 2026-02-05 12:20:53 +00:00
rcourtman
eaeda68ee5 Cover cluster resources without type filter 2026-02-05 12:20:05 +00:00
rcourtman
56a17ce9a4 Cover backup task node list errors 2026-02-05 12:19:18 +00:00
rcourtman
9391dd103a Add trend and alert color tests 2026-02-05 12:18:36 +00:00
rcourtman
4256d1e63c Cover PDF recommendation defaults 2026-02-05 12:17:44 +00:00
rcourtman
423b868284 Cover underutilization insights 2026-02-05 12:16:57 +00:00
rcourtman
c3b185c587 Cover getHealthyClient edge cases 2026-02-05 12:16:19 +00:00
rcourtman
3ad719dc06 Add CSV missing-value coverage 2026-02-05 12:15:07 +00:00
rcourtman
5ff3a6b913 Cover storage timeout context handling 2026-02-05 12:13:57 +00:00
rcourtman
9a800b3f59 Add client storage and interface coverage 2026-02-05 12:12:02 +00:00
rcourtman
070bc82f65 Test backup task filtering and rate limit retries 2026-02-05 12:10:53 +00:00
rcourtman
37d2e7cbf0 Cover container config and rate limit paths 2026-02-05 12:08:52 +00:00
rcourtman
733a4b065c Add client network and cluster health tests 2026-02-05 11:53:56 +00:00
rcourtman
4b73fb7252 Make failover test deterministic 2026-02-05 11:52:01 +00:00
rcourtman
f67e260c12 Cover client request auth error paths 2026-02-05 11:49:57 +00:00
rcourtman
0d1191cdfe Cover PDF disks, alerts, and metric colors 2026-02-05 11:48:14 +00:00
rcourtman
8b40542a29 Exercise PDF observations and recommendations 2026-02-05 11:47:00 +00:00
rcourtman
1a518321c2 Add csv formatValue coverage 2026-02-05 11:45:22 +00:00
rcourtman
f1fece52ed Add PDF backup and duration coverage 2026-02-05 11:44:28 +00:00
rcourtman
4ec2df5071 Add cluster membership and not-implemented coverage 2026-02-05 11:42:35 +00:00
rcourtman
ed6f15d49e Cover multi-report defaults and metric filtering 2026-02-05 11:41:30 +00:00
rcourtman
2f4bcc83f9 Add cluster client fallback coverage 2026-02-05 11:40:08 +00:00
rcourtman
2e62754efc Extend report engine and cluster client coverage 2026-02-05 11:38:55 +00:00
rcourtman
5fe467c4e5 Add report engine and cluster client coverage 2026-02-05 11:36:54 +00:00
rcourtman
f7f3cd3297 fix(ui): remove duplicate disk display in host drawer and add color-coded usage
- Remove redundant StackedDiskBar from drawer (was showing disks twice)
- Keep vertical disk list with mountpoint, percentage, and used/total sizes
- Add usage-based color coding matching table rows (green/yellow/red)
- Use same rgba colors as StackedDiskBar for visual consistency
2026-02-05 10:46:00 +00:00
rcourtman
b6e4c20e6b fix: preserve email rateLimit when not explicitly provided in request
Backend fix:
- Added presence check in UpdateEmailConfig to detect when rateLimit is
  omitted from JSON (vs explicitly set to 0)
- Preserves existing rateLimit value when field is not present in request
- Added comprehensive integration tests covering all scenarios

Frontend fix:
- Added rateLimit to EmailConfig interface
- Fixed getEmailConfig to read rateLimit from server response
- Fixed updateEmailConfig to include rateLimit when set
- Fixed two places in Alerts.tsx that hardcoded rateLimit: 60

Additional fixes:
- Added Array.isArray guards in DiagnosticsPanel sanitization
- Initialized Nodes/PBS arrays in diagnostics response to prevent null

Closes rate limit persistence bug where updating email settings would
reset the rate limit to default value.
2026-02-05 09:59:05 +00:00
rcourtman
dc66eb544c fix(config): ensure NotifyOnResolve defaults to true for new and legacy configs 2026-02-05 09:59:05 +00:00
rcourtman
93fd5788c9 fix(monitoring): add info logging for skipped recovery notifications 2026-02-05 09:59:05 +00:00
rcourtman
9b84fb7212 Auto-update Helm chart documentation 2026-02-05 00:22:02 +00:00
rcourtman
c949e9c9f9 Auto-update Helm chart version to 5.1.2 v5.1.2 helm-chart-5.1.2 2026-02-04 23:16:55 +00:00
rcourtman
981fc00d4c Auto-update Helm chart documentation 2026-02-04 23:16:54 +00:00
rcourtman
0f961054c6 fix: allow agent tokens to auto-register Proxmox nodes
The security hardening in beae4c86 added a settings:write scope
requirement to /api/auto-register, but agent install tokens only have
host-agent:report scope. This broke Proxmox auto-registration for all
agent-generated tokens. Accept either settings:write or host-agent:report
scope for auto-registration.

Fixes #1191
2026-02-04 22:55:25 +00:00
rcourtman
3d6488d159 fix: add agent:exec to API scope options in token creation UI
Users couldn't manually select agent:exec when creating tokens
via Settings → Security → API Tokens because it wasn't listed
in the scope options.
2026-02-04 22:42:48 +00:00
rcourtman
247cb0baa6 chore: bump version to 5.1.2 2026-02-04 22:34:10 +00:00
rcourtman
f6338f34fa fix: add agent:exec scope to generated agent tokens
Agent tokens created from the Settings UI and the backend install
command handler were missing the agent:exec scope, which was added
as a security requirement in 60f9e6f0. This caused all newly
installed agents to fail registration with "Agent exec token missing
required scope: agent:exec".

Fixes #1191
2026-02-04 22:33:01 +00:00
rcourtman
69d20abc0c Auto-update Helm chart version to 5.1.1 helm-chart-5.1.1 2026-02-04 21:11:14 +00:00
rcourtman
7d3bf20b3e Auto-update Helm chart documentation 2026-02-04 21:11:13 +00:00
rcourtman
5bbc4329bd Remove pprof diagnostics endpoint 2026-02-04 20:44:00 +00:00
rcourtman
a37b59b7e4 Add admin-gated pprof diagnostics endpoint 2026-02-04 20:39:24 +00:00
rcourtman
0635d91581 chore: bump version to 5.1.1 v5.1.1 2026-02-04 20:37:10 +00:00
rcourtman
8bb89c4031 test: add memory regression coverage for AI stores 2026-02-04 19:56:12 +00:00
rcourtman
ee0e89871d fix: reduce metrics memory 86x by reverting buffer and adding LTTB downsampling
The in-memory metrics buffer was changed from 1000 to 86400 points per
metric to support 30-day sparklines, but this pre-allocated ~18 MB per
guest (7 slices × 86400 × 32 bytes). With 50 guests that's 920 MB —
explaining why users needed to double their LXC memory after upgrading
to 5.1.0.

- Revert in-memory buffer to 1000 points / 24h retention
- Remove eager slice pre-allocation (use append growth instead)
- Add LTTB (Largest Triangle Three Buckets) downsampling algorithm
- Chart endpoints now use a two-tier strategy: in-memory for ranges
  ≤ 2h, SQLite persistent store + LTTB for longer ranges
- Reduce frontend ring buffer from 86400 to 2000 points

Related to #1190
2026-02-04 19:49:52 +00:00
rcourtman
d2604a6859 test: add AI memory regression coverage 2026-02-04 19:46:20 +00:00
rcourtman
bcd0dbfc18 Add metrics history memory regression test 2026-02-04 19:35:19 +00:00
rcourtman
049a3e424c Add memory regression tests for agent and scheduler 2026-02-04 19:33:29 +00:00
rcourtman
502766b9b7 fix: proxy agent binary from GitHub instead of redirecting
When the server doesn't have agent binaries locally (common for
LXC/bare-metal installations), it was redirecting to GitHub releases.
The agent's HTTP client followed the redirect, but GitHub doesn't
provide the X-Checksum-Sha256 header that agents require for security
verification, causing every update attempt to fail silently.

Proxy the download through the server instead, computing and attaching
the checksum header so agents can verify and install the update.
2026-02-04 19:31:33 +00:00
rcourtman
64e57f0e0e fix: smooth I/O rates using sliding window like Prometheus rate()
Proxmox reports cumulative byte counters that update unevenly across
polling intervals, causing a steady 100 Mbps download to appear as
spikes up to 450 Mbps in sparkline charts. Replace per-interval rate
calculation with a 4-sample sliding window (30s at 10s polling) that
averages over the full span — the same approach Prometheus rate() uses.
2026-02-04 19:04:17 +00:00
rcourtman
7e55c4dc52 Expand proxy non-admin coverage for permissioned routes 2026-02-04 18:12:30 +00:00
rcourtman
422271d103 Require proxy admin for permissioned endpoints 2026-02-04 18:11:12 +00:00