Commit Graph

815 Commits

Author SHA1 Message Date
Pulse Monitor effa640fda feat: improve VM disk stats handling and documentation
- 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.
2025-09-01 10:16:02 +00:00
Pulse Monitor 96fa8e839a fix: improve node disk stats reliability when GetNodeStatus fails (addresses #402)
- 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
2025-08-31 22:43:32 +00:00
Pulse Monitor 762277e361 chore: bump version to v4.12.1 2025-08-31 21:29:25 +00:00
Pulse Monitor be88faa9e0 fix: improve install script reliability in unprivileged containers (addresses #386)
- 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.
2025-08-31 20:34:09 +00:00
Pulse Monitor d0f20fc8cb docs: improve Telegram webhook documentation formatting
- Add proper JSON code block formatting for the template
- Keep all improvements from PR #401 by @rschoell
- Ensure consistent formatting throughout the document
2025-08-31 20:23:02 +00:00
Pulse Monitor 428b40d6d2 docs: update Telegram webhook configuration instructions (addresses #305)
- 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
2025-08-31 20:22:37 +00:00
rcourtman 5f9614c203 Merge pull request #401 from rschoell/patch-1
Update WEBHOOKS.md
2025-08-31 21:22:26 +01:00
surfer2100 6cef3b9fdf Update WEBHOOKS.md
Relevant to #305
2025-08-31 21:26:58 +02:00
Pulse Monitor 6966cc3d3b fix: storage tab showing empty due to incorrect filtering of cluster storage
- 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
2025-08-31 19:01:36 +00:00
Pulse Monitor 634e0dd372 feat: implement parallel node polling for improved performance at scale (addresses #398)
- 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
2025-08-31 18:54:15 +00:00
Pulse Monitor e36e3cd380 fix: remove unused index parameter in Settings component 2025-08-31 18:15:18 +00:00
Pulse Monitor 1899e28e3a chore: bump version to v4.12.0 2025-08-31 18:13:10 +00:00
Pulse Monitor 345eca3750 fix: update sanitize function to handle new diagnostic fields
- 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
2025-08-31 18:09:03 +00:00
Pulse Monitor 9a3c18245b improve: enhanced diagnostics export with comprehensive storage and backup information
- 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
2025-08-31 18:06:28 +00:00
Pulse Monitor 248394d77e fix: tag indicators now only show for guests that actually have tags
- 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
2025-08-31 18:01:47 +00:00
Pulse Monitor 520b85c49c fix: prevent mock mode from wiping production node configuration
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.
2025-08-31 16:48:52 +00:00
Pulse Monitor 12fbc12639 fix: properly handle alert IDs with special characters in acknowledge/clear endpoints (addresses #380)
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.
2025-08-31 16:24:08 +00:00
Pulse Monitor 50c2506d9e fix: alert acknowledgement URL parsing (addresses #380)
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.
2025-08-31 16:16:36 +00:00
Pulse Monitor 532cde005e fix: ntfy webhook now sends plain text instead of JSON
- 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)
2025-08-31 16:07:42 +00:00
Pulse Monitor 71bc34504a feat: add ntfy.sh webhook support (addresses discussion #228)
- 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
2025-08-31 15:51:29 +00:00
Pulse Monitor aadb43cf0c fix: improve node connection status tracking (addresses #385)
- 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.
2025-08-31 15:26:32 +00:00
Pulse Monitor 900f8bb432 fix: improve VM disk usage detection from guest agent (addresses #367)
- 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
2025-08-31 15:12:15 +00:00
Pulse Monitor e6253cfa3d fix: enable alert checking for mock mode data (addresses #399)
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.
2025-08-31 15:03:09 +00:00
Pulse Monitor ad98491bf4 fix: add missing base64 import for password change handler 2025-08-31 08:50:48 +00:00
Pulse Monitor 52d91855ae chore: bump version to v4.11.0 2025-08-31 08:49:32 +00:00
Pulse Monitor 617b912d07 fix: prevent false positive alerts for powered-off VMs (addresses #397)
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.
2025-08-31 08:44:18 +00:00
Pulse Monitor 401839620c improve: handle storage timeout errors more gracefully (addresses #389)
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.
2025-08-31 08:40:22 +00:00
Pulse Monitor 2004042c27 fix: password change functionality now properly validates current password (addresses #396)
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
2025-08-31 08:36:00 +00:00
Pulse Monitor bb505238c7 improve: enhance storage polling robustness and logging (addresses #385)
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
2025-08-31 08:31:31 +00:00
Pulse Monitor 54fc48b8d1 fix: clear custom payload when switching webhook types (addresses #378)
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.
2025-08-31 08:21:30 +00:00
Pulse Monitor cf03e6f742 fix: broadcast state updates after alert acknowledgment (addresses #380)
- 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
2025-08-31 06:58:10 +00:00
Pulse Monitor 120ae2bcbe fix: detect HTTPS protocol when behind reverse proxy for setup scripts
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
2025-08-30 22:48:53 +00:00
Pulse Monitor 4a5086b378 improve: clarify CIDR notation requirement in installer IP prompt
addresses #392 - make it clear that static IP should include CIDR notation
2025-08-30 22:44:29 +00:00
Pulse Monitor 1156414f70 fix: enforce admin privileges for proxy auth users on write operations
addresses GHSA-wmgw-3g78-89xf - proxy authenticated non-admin users now properly receive 403 Forbidden when attempting write operations

- Added RequireAdmin middleware to check proxy auth admin role
- Applied admin checks to node add/update/delete operations
- Applied admin checks to system settings updates
- Applied admin checks to export/import operations
- Applied admin checks to API token regeneration
- Applied admin checks to password changes
- Non-admin proxy auth users now have proper read-only access as documented
2025-08-30 22:30:59 +00:00
Pulse Monitor 940a253dc8 fix: acknowledge alert button not updating count (addresses #380)
- 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
2025-08-30 17:12:33 +00:00
Pulse Monitor 76595e8865 fix: duplicate auto-update prompt when answering No (addresses #391)
- 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
2025-08-30 17:00:43 +00:00
Pulse Monitor 6e2348a6ae feat: add optional VLAN support to installer (addresses #392)
- Added optional VLAN ID prompt in both Quick and Advanced modes
- Regular users can just press Enter to skip VLAN configuration
- Validates VLAN ID range (1-4094)
- Adds tag parameter to network config when VLAN is specified
- Defaults to no VLAN, ensuring regular users aren't affected
2025-08-30 16:37:38 +00:00
Pulse Monitor 8a13e1e893 fix: restore port prompt in Quick installation mode
The Quick installation mode was no longer asking for the port number,
just using the default 7655. This regression was introduced when
the duplicate main function was removed.

Restored the port prompt to Quick mode so users can specify a custom
port if needed, matching the original behavior.
2025-08-30 16:29:50 +00:00
Pulse Monitor 0376076825 fix: remove duplicate main function in install script (fixes #391)
The install script had a duplicate mainmain() function that was causing
the installation to run twice. This resulted in:
- Double prompts for auto-updates configuration
- Confusing installation output with duplicate headers
- The script appearing to reinstall after initial installation

Removed the duplicate function (lines 2025-2467) and fixed the script
to run only once as intended.

Tested on fresh Debian 12 LXC container - confirmed single installation
with working web UI on port 7655.
2025-08-30 16:07:28 +00:00
Pulse Monitor 1ae976e4d4 fix: handle unbound container variable in install script (fixes #390)
The install script was failing with "container: unbound variable" error
when run with set -u. Fixed by using ${container:-} to provide a default
empty value when the variable is not set.
2025-08-30 13:56:19 +00:00
Pulse Monitor dc88ab56b4 chore: bump version to v4.10.2 2025-08-30 12:39:41 +00:00
Pulse Monitor 1393726cbe fix: add offline node checks to prevent 595 auth errors (addresses #379)
- Added offline node status checks before attempting to access node resources
- Fixed pollStorageWithNodes to skip offline nodes
- Fixed GetNodeStatus calls to skip offline nodes
- Fixed storage metric collection to skip offline nodes
- Added test offline node (pve3) to mock data generator

This prevents the 595 "authentication failed" errors that occur when
trying to access resources on offline cluster nodes through other nodes.
2025-08-30 12:36:29 +00:00
Pulse Monitor 0a86333374 feat: improve screenshots and mobile UI responsiveness
- Update screenshot tool to use MacBook Air resolution (2560x1600)
- Remove empty side borders from screenshots
- Use mock data for all screenshots for privacy
- Fix mobile alert buttons overflowing viewport
- Exempt localhost from API rate limiting for better dev experience
- Update documentation to showcase all features with screenshots
- Reorganize README visual tour into feature sections
2025-08-30 12:25:53 +00:00
Pulse Monitor 88cf835d75 fix: remove vertical translate animation to prevent border misalignment
- removed hover:-translate-y-px that was causing the outline to appear misplaced
- kept shadow effect on hover for visual feedback
- changed from shadow-md to shadow-sm for subtler hover effect
2025-08-30 11:40:12 +00:00
Pulse Monitor e72f9f9d62 improve visual feedback for selected node in summary table
- added subtle blue outline (1px with 50% opacity) to selected row
- dimmed unselected rows to 50% opacity when a node is selected
- hovering brings dimmed rows to 80% opacity for better interaction
- added padding to table container to prevent border clipping
2025-08-30 11:38:29 +00:00
Pulse Monitor 38e49f77ac fix: improve handling of offline nodes and 595 errors
addresses #379 - better handling of offline nodes in clusters
- Skip polling VMs/containers from offline nodes to avoid 595 errors
- Improved error message for 595 to distinguish between auth failures and offline node access

addresses #389 - improved error messaging
- Better detection of whether 595 is an auth issue or offline node issue
- Clearer error messages to help users diagnose the actual problem

The 595 error can occur when:
1. Authentication actually fails (wrong credentials)
2. Trying to access resources on an offline node through another node in the cluster
2025-08-30 11:27:35 +00:00
Pulse Monitor c57c296cba fix: address LXC container parsing and timeout issues
addresses #388 - LXC containers not showing due to VMID type mismatch
- Changed Container.VMID from int to FlexInt to handle string VMIDs from older Proxmox versions
- Updated all code that references Container.VMID to cast to int where needed

addresses #389 - connection timeout errors with Proxmox nodes
- Increased default CONNECTION_TIMEOUT from 10s to 30s to handle slower networks
- This should resolve "context deadline exceeded" errors when polling nodes

addresses #379 - authentication errors may have been related to timeouts
2025-08-30 11:21:58 +00:00
Pulse Monitor 998c201dfd docs: simplify project name from 'Pulse for Proxmox' to 'Pulse'
The context already makes it clear this is for Proxmox monitoring
2025-08-30 11:15:47 +00:00
Pulse Monitor be8392fad3 feat: improve documentation with high-quality screenshots and mock alert history
- Add high-quality screenshots with 3x device scale factor for crisp text
- Implement mock alert history generator spanning 90 days
- Update documentation with detailed screenshot descriptions
- Add visual tour section to README with key screenshots
- Fix mock mode to properly separate from production data
- Clean up screenshot script to use actual mock data instead of DOM injection
- Enhance FAQ and webhooks docs with relevant screenshots
2025-08-30 11:13:41 +00:00
Pulse Monitor 7efcfa8d1f feat: install jq in containers for better JSON handling
- Containers created by the script now get jq installed
- Makes auto-update config more reliable
- Keeps JSON properly formatted
- Falls back gracefully if jq can't be installed
- Only affects fresh installs in containers, not existing systems
2025-08-30 08:03:05 +00:00