Commit Graph

1390 Commits

Author SHA1 Message Date
rcourtman d74a6cc5cb fix: Build multi-arch docker-agent binaries in Docker image
When Pulse runs in Docker, ARM users couldn't download the docker-agent
because only the host architecture binary was built. The Dockerfile now
builds amd64, arm64, and armv7 binaries and includes them at /opt/pulse/bin/
so the download endpoint can serve all architectures.
2025-10-12 20:01:10 +00:00
rcourtman adac6e9c76 fix: Update modal now properly detects when update completes
The update progress modal was stuck showing 'initializing' even after the
backend restarted and websocket reconnected. Users could see the connection
status badge reconnecting behind the modal, but the modal never cleared.

Now the modal:
- Watches websocket connection status during update
- Detects when backend disconnects and reconnects
- Verifies health after reconnection
- Automatically reloads the page when update is complete
- Shows clearer messaging about restart progress
2025-10-12 18:25:38 +00:00
rcourtman d3ca954d0e fix: Prevent caching of Docker agent install script and binaries
Add no-cache headers to both the install script and agent binary download endpoints to prevent browsers and curl from serving stale cached versions. This ensures users always get the latest install script with URL normalization fixes for trailing slash issues.

Fixes #528
2025-10-12 18:04:57 +00:00
rcourtman d8638abea4 Fix node config API to preserve fields on partial updates
The PUT /api/config/nodes/{id} endpoint was corrupting node configurations
when making partial updates (e.g., updating just monitorPhysicalDisks):

- Authentication fields (tokenName, tokenValue, password) were being cleared
  when updating unrelated settings
- Name field was being blanked when not included in request
- Monitor* boolean fields were defaulting to false

Changes:
- Only update name field if explicitly provided in request
- Only switch authentication method when auth fields are explicitly provided
- Preserve existing auth credentials on non-auth updates
- Applied fix to all node types (PVE, PBS, PMG)

Also enables physical disk monitoring by default (opt-out instead of opt-in)
and preserves disk data between polling intervals.
2025-10-12 17:50:55 +00:00
rcourtman 8373e0af2f chore: bump version to v4.23.0 2025-10-12 16:35:48 +00:00
rcourtman a9377e20d6 Improve NVMe temperature handling 2025-10-12 16:06:55 +00:00
rcourtman e387648ef8 Use guest meminfo available for VM memory usage 2025-10-12 11:03:56 +00:00
rcourtman 29d98ad010 Fix docker agent installer for BusyBox wget (#255) 2025-10-12 10:57:19 +00:00
rcourtman f97237cae7 Improve dashboard responsiveness and temperature handling 2025-10-12 10:34:06 +00:00
rcourtman 8701d8bb30 feat: capture Proxmox memory snapshots in diagnostics 2025-10-12 10:25:43 +00:00
rcourtman 67488b64a7 Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
rcourtman 8ac6641950 chore: bump version to v4.22.0 2025-10-11 22:45:06 +00:00
rcourtman 29e8b560be Handle GitHub update check rate limits 2025-10-11 22:41:32 +00:00
rcourtman abe3d22a5d Revert "chore: bump version to v4.22.0"
This reverts commit 44fa8b6b51274664e2c0a7cf49a0494d54f215bc.
2025-10-11 22:37:05 +00:00
rcourtman 7a1a1d4233 docs: refresh monitoring guides and troubleshooting 2025-10-11 22:32:26 +00:00
rcourtman 255924aef9 fix: Remove unused PMG_COLUMN_GROUPS variable 2025-10-11 22:28:41 +00:00
rcourtman 28e9cf46fd fix: Add missing PMG alert types and fix TypeScript errors 2025-10-11 22:27:38 +00:00
rcourtman 6038067a23 chore: bump version to v4.22.0 2025-10-11 22:22:52 +00:00
rcourtman df70775066 docs: Update API docs and feature descriptions for Ceph, Docker, and updates 2025-10-11 22:21:51 +00:00
rcourtman b8d70147f9 Clarify alert timeline context 2025-10-11 22:00:14 +00:00
rcourtman 0571524500 fix: toggle backups date filter and tooltip 2025-10-11 21:42:14 +00:00
rcourtman 32ecb67fc2 Allow fractional network thresholds in alert editor
Refs #535
2025-10-11 21:19:34 +00:00
rcourtman 72aa60107d Enhance Docker page with simplified sidebar and focused metrics
Simplified host sidebar to show only essential monitoring info (name, status, alerts, container count). Moved detailed metrics (CPU, memory, uptime) to host detail view when selected to eliminate duplication. Added alert highlighting with visual indicators for hosts with container alerts. Fixed double 'v' prefix in agent version display.
2025-10-11 20:44:28 +00:00
rcourtman d1be28ec48 Adjust layout width to balance between v4.21.0 and current design 2025-10-11 20:30:56 +00:00
rcourtman b44e89a56d Enhance backup chart with improved date filtering and selection highlighting
Improved the backup history chart UI by reorganizing the time range controls and date filter display. Selected dates now have enhanced visual highlighting with border strokes and brightness adjustments for better visibility.
2025-10-11 20:26:22 +00:00
rcourtman 052a6dd03f Replace collapsible sidebars with hover-based expansion
Removed chevron toggle buttons from Settings and Alerts navigation sidebars. Sidebars now expand automatically on hover and collapse on mouse leave, providing a cleaner interface and more intuitive interaction pattern.
2025-10-11 20:26:15 +00:00
rcourtman a4c3f1605c Add icon library and collapsible sidebars to navigation menus
Integrate lucide-solid icon library to enhance visual navigation in Alerts
and Settings pages. Sidebars now display icons alongside labels and can
collapse to icon-only view for more screen space. Icons provide better
visual scanning and the collapsible design improves usability on smaller
displays while maintaining quick access to all sections.
2025-10-11 20:12:32 +00:00
rcourtman 44460b4596 Remove .dev-aliases from repository (environment-specific file) 2025-10-11 19:42:47 +00:00
rcourtman 7ff9966037 Disable auto-start in dev environment for Claude Code management 2025-10-11 19:40:50 +00:00
rcourtman 4ad53f27fe Implement data isolation between mock and production modes
Adds automatic data directory separation to prevent mock data from contaminating production alerts and configuration:

- hot-dev.sh: Explicitly sets PULSE_DATA_DIR based on PULSE_MOCK_MODE
  - Production: /etc/pulse (real, persistent data)
  - Mock: /opt/pulse/tmp/mock-data (isolated, throwaway data)
- clean-mock-alerts.sh: New utility to remove mock contamination from production alerts
- Auto-creates mock data directory when switching to mock mode

This prevents issues where mock alerts appear in production alert history after switching between modes.
2025-10-11 19:09:15 +00:00
rcourtman 54f68c00a5 Restore wider layout and add intelligent column scaling
Restores v4.22.0-rc.6 wider page layout (110rem/1760px max-width) and implements responsive column widths for dashboard table. Name column and progress bars scale wider on xl screens while small columns (Type, VMID, I/O metrics) stay compact. This better utilizes screen space without creating wasteful empty gaps.
2025-10-11 18:55:13 +00:00
rcourtman 26e52b531e Add success icon and fix mock/production data separation
Add green checkmark icon to "No active alerts" empty state for better visual feedback. Separate mock and production data directories to prevent contamination. Mock mode now uses /opt/pulse/tmp/mock-data while production uses /etc/pulse. Update toggle script to dynamically set data directory based on mode.
2025-10-11 18:43:13 +00:00
rcourtman a08c1ca79d Debug and enhance reset to defaults feature
Add debug logging to track prop changes and hasCustomGlobalDefaults checks in ResourceTable. Fix quick tips documentation to use 0 instead of -1 for disabling alerts. Add factory defaults and reset support for PBS Servers section. Reorder PBS section to appear before Guests section.
2025-10-11 18:31:57 +00:00
rcourtman 6430838361 Fix: Use actual v4.21.0 condensed layout values
Corrected to match v4.21.0 exactly:
- Width: 95% (not 98%)
- Max-width: 80rem/1280px (not 120rem/1920px)
- No horizontal padding on shell
- Fixed 0.75rem (12px) panel padding

This restores the more condensed, narrower layout from v4.21.0.
2025-10-11 18:03:40 +00:00
rcourtman 1efff8ed27 Return to more condensed layout like v4.21.0
Adjusted container width and padding to reduce whitespace:
- Increased max-width from 110rem (1760px) to 120rem (1920px)
- Reduced shell horizontal padding from 20-52px to 8-16px
- Reduced panel padding from 12-24px to 8-12px

Maintains responsive behavior while matching the condensed feel of v4.21.0.
2025-10-11 18:01:18 +00:00
rcourtman 10eaa9c66d Add trash bin and Custom badge for Global Defaults row
When global defaults differ from factory defaults:
- Show blue "Custom" badge next to "Global Defaults" label
- Show red trash bin icon in Actions column
- Clicking trash bin resets to factory defaults
- Matches existing pattern used for individual resource rows
2025-10-11 17:57:27 +00:00
rcourtman 5ca1ba234e Add threshold discoverability and reset to defaults
- Add tooltips to threshold inputs explaining -1 disables alerts
- Add help banner at top of thresholds page with usage tips
- Add FAQ entry documenting how to disable specific metrics
- Add reset to defaults button for each threshold table
- Define factory default constants for all resource types
- Reset button restores defaults and marks form as unsaved
2025-10-11 17:53:16 +00:00
rcourtman afc51a106f Fix threshold sub-tab routing by allowing nested paths
The Alerts page was redirecting any path that didn't exactly match the expected tab path. This prevented threshold sub-tabs (/alerts/thresholds/proxmox, /docker, /mail-gateway) from working.

Modified the path validation logic to allow sub-paths under /alerts/thresholds/ to pass through without triggering redirects.
2025-10-11 17:36:25 +00:00
rcourtman 6309a9ca2f Add URL routing to threshold sub-tabs
Implement proper URL-based navigation for threshold sub-tabs (Proxmox, Docker, Mail Gateway). This enables bookmarking specific tabs and provides browser history integration.

Changes:
- Add route-based tab state management with useLocation
- Implement tab navigation using useNavigate
- Auto-redirect /alerts/thresholds to /alerts/thresholds/proxmox
- Add cursor-pointer CSS to improve UX
2025-10-11 17:32:23 +00:00
rcourtman f783fef716 Fix frontend performance issues by caching system settings
Backend was loading system settings from disk on every HTTP request
causing massive log spam and UI responsiveness issues. System settings
are now cached at startup and reloaded only when updated.

Also fixed tab cursor showing text cursor instead of pointer cursor.

Changes:
- Cache system settings in Router struct with mutex protection
- Load settings once at startup instead of on every request
- Add reloadSystemSettings() method to refresh cache when settings change
- Hook up cache reload in config handlers after successful save
- Add cursor-pointer to tab CSS classes for proper hover cursor
2025-10-11 17:22:22 +00:00
rcourtman 9c21d86212 Add multi-target Docker agent support and update installer 2025-10-11 16:34:33 +00:00
rcourtman 66aaf060d8 Improve update modal restart handling 2025-10-11 14:56:49 +00:00
rcourtman 6e6d2dec6c Add quiet hours category suppression 2025-10-11 13:23:27 +00:00
rcourtman 11e80bbcbb chore: bump version to v4.22.0-rc.6 2025-10-11 12:44:33 +00:00
rcourtman 168777d5ad Ship docker agent installer in container image 2025-10-11 12:38:28 +00:00
rcourtman 853a1e7914 refactor: consolidate PMG thresholds into single table with differentiated tooltips
Replaced 4 separate PMG threshold tables with a single unified table containing all 16 columns. Each PMG instance now appears once instead of four times, with a single global defaults row.

Changes:
- Consolidated Queue/Deferred, Hold/Oldest, Spam/Virus, and Growth tables into one
- Removed index() === 0 workaround for offline alerts column
- Added 16 PMG tooltips with clear warn vs crit differentiation
- Warning tooltips emphasize early detection and monitoring
- Critical tooltips emphasize urgency and required action

This improves UX by eliminating duplicate instance rows and making threshold severity levels immediately clear to operators.
2025-10-11 12:28:09 +00:00
rcourtman 539dc9495b fix: show offline alerts toggle only once per PMG instance
Each of the 4 PMG threshold tables was showing its own offline alerts column, resulting in 4 duplicate toggles per instance. Now only the first table displays the offline alerts column since the setting is per-instance, not per-threshold-group.
2025-10-11 11:52:09 +00:00
rcourtman c827b7cc59 Add PMG threshold configuration UI
Adds dedicated PMG sub-tab under Alerts → Configuration with comprehensive
threshold management for all 7 PMG alert types:
- Queue depth monitoring (total, deferred, hold)
- Message age tracking (oldest message warnings)
- Quarantine monitoring (spam/virus absolute thresholds)
- Quarantine growth detection (percentage and minimum thresholds)

ThresholdsTable.tsx changes:
- Add PMG tab to threshold table with 16 editable threshold columns
- Implement PMG column groups for organized display (4 groups of 4 columns)
- Add PMG global defaults with normalization and mapping
- Support per-instance threshold overrides
- Include connectivity toggle support

Alerts.tsx changes:
- Add PMGTab component with 4 organized sections using SettingsPanel
- Create pmgThresholds signal with default values matching backend
- Wire PMG threshold loading from backend config
- Include pmgDefaults in config save payload
- Add PMG to AlertTab type and tab navigation
- Render PMGTab following same pattern as other configuration tabs

Backend alert logic (already implemented in alerts.go) monitors:
- Offline detection (3-poll confirmation)
- Queue depths with per-node outlier detection
- Oldest message age tracking
- Quarantine backlog with growth rate detection
- Spam/virus rate anomaly detection with 24h baseline
2025-10-11 11:48:13 +00:00
rcourtman 1ffcfbeaf6 Guard storage backups from failed polls 2025-10-11 10:00:05 +00:00
rcourtman 74bc5d5229 Merge branch 'pr/532' 2025-10-11 09:13:41 +00:00