Commit Graph

505 Commits

Author SHA1 Message Date
rcourtman bd7d196c11 Mark failed PBS poll as failure and lock down with regression tests
The PBS poller's version-failure exit at monitor_pbs_pmg.go did not
set pollErr before returning, so even after fixing the defer-arg
capture in bf6261adc the deferred recordTaskResult still saw nil and
recorded the poll as a success. PMG's analogous path already sets
pollErr correctly. Mirror that here so the per-instance pollStatusMap,
the connections aggregator, and the circuit breaker all see PBS auth
and version failures as failures.

Add assertions to the existing PBS and PMG auth-failure tests that
the per-instance pollStatusMap entry has a zero LastSuccess and a
non-zero ConsecutiveFailures. The original tests covered downstream
state but not the recorder, which is why two distinct cases of this
class of bug went unnoticed.
2026-05-08 19:53:03 +01:00
rcourtman bf6261adc6 Record poll error in PVE/PBS/PMG poll-result trackers
The deferred recordTaskResult call was passing pollErr as a function
argument, so it captured the value at defer-time (always nil) instead
of the value at execution time. Result: the per-instance pollStatusMap
treated every poll as a success — LastSuccess was set to "now" on
every cycle, ConsecutiveFailures stayed at zero, and the circuit
breaker never opened, even when the staleness tracker (which used a
proper closure) recorded the same poll as a failure.

The connections aggregator derives state from PollStatus.LastSuccess,
so the Connections UI reported broken PVE/PBS/PMG instances as
"active / verified / healthy" while no data was ingested. Wrap the
recordTaskResult call in a defer closure so it reads the live pollErr
at execution time, matching the pollMetrics and stalenessTracker
defers immediately above.
2026-05-08 18:14:20 +01:00
rcourtman cb759e4113 Pin dual-source platform identity guardrails
Add three monitoring broadcast guardrail tests covering platform
identity for resources that have both an API/appliance facet and a
linked Pulse host agent:

- Proxmox VE node + agent (Pi case) stays on platformType=proxmox-pve
- TrueNAS appliance + agent stays on platformType=truenas
- Single-source Unraid agent host stays on platformType=agent

These pin the contract that the API/appliance facet wins over the
agent facet during platform type derivation, and that single-source
agent hosts do not promote OSName strings to platform identifiers.
2026-05-08 16:45:58 +01:00
rcourtman cb772737e7 Fix platform identity source contracts 2026-05-08 14:54:08 +01:00
rcourtman 31d07e74ce Fix Unraid storage health explanations 2026-05-08 12:18:09 +01:00
rcourtman d6ca8b12e6 Add agentless availability targets
Refs #1460
2026-05-06 10:35:34 +01:00
rcourtman 868239a648 Stabilize TrueNAS poller enable-disable proof 2026-05-05 16:50:10 +01:00
rcourtman 1a3e5ec27d Fix tenant monitor broadcast nil hub panic 2026-05-05 16:25:00 +01:00
rcourtman d7225a45a0 Fix Proxmox guest memory fallbacks
Also fixes Ceph pool threshold resource identity.

Refs #1341
2026-05-05 14:59:29 +01:00
rcourtman 35b2deebfb Harden Proxmox guest snapshot polling
Refs #1437
2026-05-05 14:51:28 +01:00
rcourtman 30180727ad Harden Proxmox setup token ACLs 2026-05-05 14:19:50 +01:00
rcourtman 81b31e4d3b Remove monitored-system volume caps
Retire runtime/API/UI monitored-system volume enforcement now that infrastructure monitoring is no longer capped.

Keep only legacy metadata scrubbing and purchase-start compatibility for old max_monitored_systems references.

Rename the remaining preview surface to monitored-system impact and make previews explanatory rather than save-blocking.

Update subsystem contracts and RA7 evidence for the caps-retired invariant.
2026-05-05 12:59:59 +01:00
rcourtman db97478566 Reduce metrics rollup write amplification
Refs #1124
2026-05-03 21:43:20 +01:00
rcourtman 158d65ccdb Fix mock metrics store bucket assertions 2026-05-03 16:35:46 +01:00
rcourtman fe597554c3 Fix backup orphan inventory readiness
Refs #1352
2026-05-01 20:28:12 +01:00
rcourtman 09231a9ef7 Fix Docker agent reconnect token binding
Refs #1447

Use the canonical Docker host identity for token bindings after a matched reconnect, preserve previous/current identity aliases for recreated containers, and keep rejecting token reuse by genuinely different Docker hosts.

Record the RC3 release-gate evidence for the Docker-in-LXC reconnect path.
2026-05-01 20:28:11 +01:00
rcourtman 7a1352f122 Preserve snapshots for guests missed by poll
Fixes #1437
2026-04-30 14:38:40 +01:00
rcourtman 82ba940524 Merge linked host disks into guest overviews
Fixes #1438
2026-04-30 14:37:43 +01:00
rcourtman af7d727d45 Gate RAID rebuild alerts on mdstat operation
Parse the /proc/mdstat operation keyword for mdadm arrays and propagate it through host reports, models, unified resources, monitoring views, alert metadata, and AI storage summaries.

Treat recovery and reshape as rebuild signals while silencing routine check and resync maintenance, with fallback rebuild detection only when no mdstat operation is available.

Tests cover mdstat operation parsing plus recovery, check, and resync alert behavior.

Fixes #1446
2026-04-30 14:31:14 +01:00
rcourtman 0c8628c23e Warm Workloads route and chart caches 2026-04-29 18:02:30 +01:00
rcourtman 386099aeee Surface ZFS pool membership on physical disks 2026-04-23 20:38:33 +01:00
rcourtman 0a4584535e Preserve agent rows across monitor reloads 2026-04-22 20:48:16 +01:00
rcourtman 242c4b432d Restore linked host-agent disk inventory for guest VMs
Refs #1438
2026-04-22 09:22:46 +01:00
rcourtman f796efceac Fix QNAP host/docker monitored-system split
Refs #1421
2026-04-21 22:11:13 +01:00
rcourtman fd5c14b049 Close RC-era issue gaps blocking v6 GA
Refs #1430

Refs #1436

Refs #1435

Refs #1409

Refs #1429

Refs #1432
2026-04-21 14:46:23 +01:00
rcourtman 9c3d96cab2 Add unified connections API (list + probe) with Disabled flag
Introduces GET /api/connections and POST /api/connections/probe as the
backend half of the one-ledger / one-editor connection redesign.

- GET /api/connections aggregates PVE/PBS/PMG/VMware/TrueNAS/agent rows
  into a unified Connection shape with derived state (active, paused,
  unauthorized, unreachable, stale, pending) computed from in-memory
  scheduler health plus agent Host.LastSeen. No new persisted state.
- POST /api/connections/probe fingerprints a host across the five
  supported products in parallel (2s dial + 1s read, 3s total, max 5
  concurrent). Admin-gated (RequireAdmin + ScopeSettingsWrite) to block
  unauthenticated SSRF against internal hosts.
- Disabled bool on PVEInstance/PBSInstance/PMGInstance (zero-value =
  enabled, preserves existing nodes.json); pollers skip disabled
  instances at client init, reconnect, and per-node iteration.
- NodeConfigRequest/Response gain Enabled; write path translates
  *bool -> Disabled so omitted field leaves state untouched.
- ConnectionsAPI frontend client (list/probe) typed off the Go shape.

Contracts updated: api-contracts, monitoring, agent-lifecycle,
performance-and-scalability, storage-recovery. Proofs added:
contract_test.go JSON snapshot for Connection and ProbeResponse,
monitoring guardrails for the Disabled-skip behavior, and a vitest
mock-client test for ConnectionsAPI.

Frontend editor / drawer / table rewrite lands in a separate block.
2026-04-19 11:42:53 +01:00
rcourtman 847d09d17b Unify settings infrastructure ledger 2026-04-18 14:54:53 +01:00
rcourtman e6b0d47bd6 Gate Docker mutations on authz-plugin posture 2026-04-18 10:45:25 +01:00
rcourtman 7e5971a3ee Allow local mergerfs mounts in disk metrics
Stop treating every fuse.* filesystem as a remote mount in the shared disk filter so local user-space filesystems such as mergerfs remain visible to host disk stats and alerts while explicit remote fuse types like sshfs still stay filtered.

Refs #1419
2026-04-15 20:11:25 +01:00
rcourtman 523a64565b Keep shared Proxmox storage coherent
Refs #1416
2026-04-15 16:55:13 +01:00
rcourtman 0fa1cf5fc1 Normalize legacy Unraid raw statuses
Refs #1400
2026-04-15 16:46:20 +01:00
rcourtman d573d3a85f Preserve standalone host continuity across restart
Refs #1402
2026-04-15 16:23:42 +01:00
rcourtman d03056f656 Port v5 NAS vendor identity and RAID normalization 2026-04-15 12:54:15 +01:00
rcourtman b73dab2b64 Port v5 alert lifecycle and linked agent overrides 2026-04-15 12:18:57 +01:00
rcourtman d20b144a51 Fix TrueNAS poll interval RC proof 2026-04-12 10:14:39 +01:00
rcourtman 8afd6e4ea1 Tighten monitoring RC test budgets 2026-04-12 09:41:29 +01:00
rcourtman 51b494b137 Stabilize RC backend test contracts 2026-04-12 09:02:56 +01:00
rcourtman 269f6ac8a5 Stabilize publish-path mock fixture proofs 2026-04-12 00:55:44 +01:00
rcourtman f6f41eaab6 Constrain mock sampler test seed windows 2026-04-11 23:51:04 +01:00
rcourtman b38d0ac37e Stabilize RC release backend race proofs 2026-04-11 23:18:44 +01:00
rcourtman 05fa111ca1 Stabilize backend race tests for v6 RC publish 2026-04-11 22:46:34 +01:00
rcourtman 1e28a03b57 Stabilize rc1 mock mode and metrics history 2026-04-11 16:47:37 +01:00
rcourtman 347a013e79 Stabilize RC release proof contracts 2026-04-11 14:51:10 +01:00
rcourtman b64782c083 Align mock state resources with canonical contract 2026-04-11 13:40:01 +01:00
rcourtman efb218958a Fix Kubernetes demo chart history coverage 2026-04-10 23:40:13 +01:00
rcourtman 4ca488101e Optimize compact storage summary chart path 2026-04-10 19:09:12 +01:00
rcourtman 4692d88a0d Speed up demo mock chart loading 2026-04-10 14:26:55 +01:00
rcourtman b846d66fd0 Gate release mock fixtures behind demo entitlement 2026-04-10 12:33:57 +01:00
rcourtman b4199a4b96 Fix remaining RC backend proof drift 2026-04-09 23:06:49 +01:00
rcourtman a6ba806af9 Stabilize remaining RC dry-run proofs 2026-04-09 22:43:09 +01:00