- Add dynamic metric fluctuations for VMs and containers in mock data
- Fix alert acknowledgment to dim instead of hide alerts
- Implement unacknowledge functionality with backend persistence
- Simplify alert UI to single-click toggle (remove selection system)
- Add proper hysteresis for alert resolution when metrics drop
- Fix SVG icon boundaries in alert displays
- Add webhook disable toggles for testing without notifications
- Fix frontend directory duplication issue (addresses frontend-modern recreation)
- Improve alert sorting to show most recent first
- Make mock system generate realistic metric changes for proper alert lifecycle
- removes redundant Node column from storage table
- when grouped by storage, shows node name in gray next to storage name
- when grouped by node, node name already shown in group header
- addresses confusion when multiple nodes have same storage names
- Fix button overflow on Settings page by making layouts responsive
- Add responsive text sizing and button compacting for mobile
- Make Guest URLs input fields wider (300px min) with horizontal scroll
- Improve tab navigation scrolling on mobile devices
- Better utilize screen space on small devices
- Increased default HTTP client timeout from 30s to 60s
- Added CreateHTTPClientWithTimeout function to properly set custom timeouts
- Updated Proxmox and PBS clients to use configured timeout values
- Increased default connection timeout from 45s to 60s in config
This prevents "context deadline exceeded" errors when connecting to slow or overloaded Proxmox/PBS nodes.
The ProxmoxVE Helper Script is no longer the recommended installation method.
Users should use the official install.sh script instead, which supports
creating LXC containers directly on Proxmox hosts.
For existing users confused about updating (like in discussion #407), they
can use 'pct enter' from the Proxmox host to access their container as root.
- Add backup/restore mechanism for old binary during updates
- Add explicit error checking for binary copy operations
- Add version verification after installation to detect issues
- Force retry if version mismatch detected after update
- Ensure old binary is properly replaced, not just overwritten
This should resolve issues where updates appear to complete but the old version continues to run, particularly when the binary replacement fails silently.
- added color-coded emoji indicators (🔴/🟡/🟢) for alert levels
- enriched message formatting with better structure and emojis
- improved titles to show resource name and alert type clearly
- ntfy now has dynamic headers for priority and tags based on alert level
- both services now match the detail level of Discord and Telegram
- improved Gotify template to include resource name and node in message body
- changed title to show resource name instead of generic "Pulse Alert"
- added ntfy service option to frontend webhook configuration UI
- ntfy template was already in backend but missing from frontend selection
The "Auto-Update" setting was misleading users into thinking Pulse would automatically install updates. Changed the UI text to clarify that:
- The setting only controls automatic checking for updates
- Installation is always manual based on deployment type (ProxmoxVE users type 'update', Docker users pull new image, etc.)
- This is by design for security reasons as documented in CLAUDE.md
- Changed button type from 'button' to 'submit' so it actually submits the form
- This was the root cause - the button looked clickable but had no onClick handler
- Now the form properly submits when clicking Change Password
- Fixed condition for showing authentication section to include configured state
- Added proper event handling with preventDefault and stopPropagation
- Increased z-index of modal to ensure it appears above other elements
- Added debug logging to help diagnose issues
- Button now works when authentication is configured but not fully loaded
- Add DiskStatusReason field to track why disk stats are unavailable
- Show helpful tooltips in UI explaining specific issues:
- Proxmox 9 API token limitation (401 on guest agent endpoints)
- Guest agent not installed/running
- Special filesystems only (Live ISOs)
- Permission issues
- Add comprehensive troubleshooting guide (docs/VM_DISK_STATS_TROUBLESHOOTING.md)
- Document that API tokens cannot access guest agent data on PVE 9
- Tested and confirmed: only password/cookie auth works for guest agent on PVE 9
- Update README with quick reference to VM disk stats issue
This addresses issues #348, #367, and #71 by clearly explaining the root cause
(Proxmox API limitation) and providing actionable guidance to users.
- Ensure disk metrics from /nodes endpoint are preserved when GetNodeStatus fails
- Add better fallback logic to prevent showing 0% or '-' for disk usage
- Improve logging to distinguish between rootfs and /nodes endpoint metrics
- Handle cases where neither rootfs nor valid node disk data is available
This fixes the regression introduced in v4.12.1 where disk stats would show as
'-' when GetNodeStatus failed due to network issues or rate limiting
- Add timeout command wrapper around all curl calls to prevent hanging
- Add multiple fallback mechanisms for GitHub API failures
- Use fallback to known stable version if all methods fail
- Add proper timeouts to prevent indefinite waiting
- Improve error handling to proceed when version verification fails
The script now handles network issues, rate limiting, and container
restrictions more gracefully, ensuring installation completes even
in restricted environments.
- Add proper JSON code block formatting for the template
- Keep all improvements from PR #401 by @rschoell
- Ensure consistent formatting throughout the document
- Remove chat_id from URL (should be in JSON payload)
- Add requirement to select 'Telegram Bot' service type
- Include custom payload template example
- Clarify that chat_id goes in the JSON body, not URL params
- Removed incorrect check that was skipping storage with Enabled==0 at cluster level
- Storage can be enabled at node level even if cluster config shows Enabled==0
- Now properly displays all storage and sets enabled/active flags for UI display
- Added goroutine-based parallel fetching for VMs, containers, and storage across nodes
- Each node is now polled concurrently instead of sequentially
- Added detailed performance logging showing duration and success/failure counts
- Should significantly improve performance for deployments with 10+ nodes
- Maintains backwards compatibility with existing error handling and retry logic
- Sanitize storage data (names, nodes)
- Sanitize backup information (PVE tasks, storage backups, PBS backups)
- Sanitize active alerts (node names, IP addresses in details)
- Ensure all sensitive information is properly redacted for GitHub sharing
- Added detailed storage information including type, status, content, and usage
- Added backup counts for PVE backup tasks, storage backups, and PBS backups
- Included sample backup data (first 10 entries) for debugging
- Added connection health status for all nodes
- Included performance metrics and API call statistics
- Added active alerts to help diagnose issues
- Shows whether each storage has backups associated with it
- Added ToFrontend() method to StateSnapshot for proper data conversion
- Modified /api/state endpoint to use frontend-formatted data
- Enhanced WebSocket store to handle tag data transformation consistently
- Ensures tags are properly converted between backend strings and frontend arrays
Mock mode was inadvertently clearing real node configuration when toggling.
Added protection to prevent SaveNodesConfig from modifying nodes.enc when
in mock mode. Mock and production data are now completely separated.
Alert IDs like 'pve1:qemu/101-cpu' contain slashes which were breaking the URL path parsing.
Fixed by finding the /acknowledge or /clear suffix and extracting everything before it,
rather than trying to split by slashes.
The acknowledge and clear alert endpoints were incorrectly parsing the alert ID from the URL path, causing 404 errors. Fixed the path extraction logic to properly handle the /api/alerts/{id}/acknowledge pattern.
- Modified generatePayloadFromTemplate to skip JSON validation for ntfy
- ntfy uses plain text body format, not JSON
- Messages now successfully delivered to ntfy topics
- Headers for title/priority/tags need dynamic templating support (future enhancement)
- Added ntfy webhook template with proper payload format
- Updated frontend to include ntfy in service selection
- Supports both ntfy.sh cloud and self-hosted instances
- Uses priority levels, tags, and click actions for rich notifications
- nodes now properly show as disconnected when client creation fails
- all configured nodes are checked, not just ones with active clients
- connection health is tracked from the actual monitoring state
- added detailed logging when client creation fails to help diagnose issues
- storage and backup tabs should now properly reflect connection status
previously, if a node failed to create a client during initialization (due to auth issues, network problems, etc), it wouldn't be tracked at all, causing inconsistent UI state. now all configured nodes are properly tracked and their connection status is accurately reflected.
- Always attempt to get filesystem info from guest agent when cluster/resources or node APIs return 0 disk usage
- The Proxmox API often returns 0 for disk field even when guest agent has real data available
- More aggressively query guest agent for running VMs with 0 disk usage
- Improved logging to show when disk data is successfully retrieved from guest agent
Mock mode was bypassing alert checking entirely, causing alerts not to trigger even when thresholds were exceeded. Added checkMockAlerts() function that processes mock VMs, containers, nodes and storage through the alert manager.
Fixed an issue where powered-off VMs were triggering CPU/RAM alerts.
Changes made:
1. Alert manager now skips ANY non-running VM (not just "stopped")
- Handles all states: stopped, paused, suspended, etc.
- Only checks thresholds for VMs with status="running"
2. Zero out metrics for non-running VMs/containers
- Proxmox may report stale metrics for stopped VMs
- Now explicitly sets CPU, memory, disk, network to 0 for non-running guests
3. Added debug logging to track VM states and metric handling
This ensures alerts only fire for actively running VMs and containers.
Storage operations on slow nodes were timing out after 30 seconds.
Made several improvements to handle this better:
- Increased default CONNECTION_TIMEOUT from 30s to 45s
- Added retry logic for storage queries that timeout
- Changed error logs to warnings for recoverable storage issues
- Storage polling now continues with other nodes if one fails
Users experiencing timeouts can also set CONNECTION_TIMEOUT env variable
to a higher value (e.g., CONNECTION_TIMEOUT=60s) if needed.
The change password feature was not working because the backend wasn't
actually verifying the current password before allowing changes. Fixed both
frontend and backend issues:
- Frontend now uses the correct username from localStorage
- Backend now properly validates the current password before allowing change
- Added proper security checks to prevent unauthorized password changes
Storage polling now continues even if cluster-level storage config fails,
falling back to node-level storage data. Added comprehensive logging to
help diagnose storage/backup visibility issues.
Changes:
- Continue storage polling when cluster storage API fails
- Add detailed debug logging for storage operations
- Downgrade error to warning when API calls fail but can recover
- Better visibility into storage polling process
When switching from generic webhook to discord or other service types,
the custom payload template was persisting and being sent incorrectly.
Now clears the payload template when switching to non-generic services.
- Add WebSocket hub reference to AlertHandlers
- Broadcast state after acknowledge, clear, and bulk operations
- Ensures UI acknowledgment counts update immediately without refresh
- Fixes issue where acknowledgment would disappear after 2 seconds
addresses #394 - setup script now correctly uses https:// in generated commands
when Pulse is running behind an HTTPS reverse proxy like Traefik by checking
the X-Forwarded-Proto header
- Fixed reactivity issue with alertStats computation in SolidJS
- Properly access store values to ensure count updates when alerts are acknowledged
- Changed from Object.values() to mapping over keys for proper store reactivity
- Set ENABLE_AUTO_UPDATES global variable when user responds in select_install_mode
- Only ask about auto-updates once during installation
- Fixed issue where answering No to auto-updates would prompt again later