Commit Graph

855 Commits

Author SHA1 Message Date
Pulse Monitor fcb71daaea fix: properly identify VMID 0 PBS backups as Host type instead of LXC (addresses #359)
PMG host configuration backups (VMID=0) are now correctly shown as "Host" type
in the backup list instead of being incorrectly labeled as "LXC" containers.
Also added mock data for testing VMID 0 host backups.
2025-09-04 13:36:40 +00:00
Pulse Monitor dae05e5975 fix: alert acknowledgment routing path mismatch (addresses #380)
The acknowledge/unacknowledge/clear endpoints were returning 404 due to incorrect path trimming in HandleAlerts. The router was registered with /api/alerts/ but the handler was trimming /api/alerts, causing path parsing to be off by one character.
2025-09-04 13:06:15 +00:00
Pulse Monitor de0b7d8012 fix: ensure PBS backup monitoring is enabled for all PBS instances (addresses #411)
- Added migration to automatically enable MonitorBackups for PBS instances
- This fixes the issue where PBS backups weren't showing for some users
- The migration runs on startup and persists the changes
- All new PBS instances already have MonitorBackups enabled by default
2025-09-04 12:56:38 +00:00
Pulse Monitor 761c7b144f docs: add PULSE_PUBLIC_URL documentation
- Added to CONFIGURATION.md environment variables section
- Added to WEBHOOKS.md for Gotify and ntfy services
- Added to DOCKER.md environment variables reference and compose example
- Explains how to configure the full Pulse URL for webhook notification links
2025-09-04 12:15:55 +00:00
Pulse Monitor ef8b7c9694 fix: provide full Pulse URL in Gotify/ntfy webhook notifications (addresses #415)
- Added PULSE_PUBLIC_URL config option to specify the full URL to access Pulse
- Updated notification manager to use publicURL when constructing webhook payloads
- Modified prepareWebhookData to construct full URLs instead of just paths
- Fixed test webhooks to use configured publicURL instead of hardcoded values
- Gotify and ntfy notifications now include clickable links that work properly
2025-09-04 12:07:23 +00:00
Pulse Monitor e7d041c4a7 improve: skip Windows System Reserved partitions in disk usage calculation (addresses #414)
- Windows System Reserved partitions now excluded from disk usage
- Added better handling for filesystems with zero total bytes
- Improved debug logging for skipped filesystems
- Prevents incorrect disk usage display for Windows VMs
2025-09-04 10:59:59 +00:00
Pulse Monitor f64469fe09 fix: improve cluster node health tracking for storage operations (addresses #405)
- Added storage permission errors (403) to exception list
- Permission denied errors no longer mark nodes as unhealthy
- Storage polling can now continue even with permission issues
- Prevents cascading failures when storage permissions are missing
- Nodes remain healthy for VM/container operations even if storage fails
2025-09-04 10:50:22 +00:00
Pulse Monitor cbfe1ecd4c docs: remove time references from password recovery sections 2025-09-04 10:34:16 +00:00
Pulse Monitor 3912f1db3e docs: simplify password recovery stance - just start fresh
- Removed all complex recovery mechanisms from documentation
- Clear stance: forgotten password = start fresh (takes 2 minutes)
- No recovery mechanisms = no security vulnerabilities
- Pulse's simplicity is a feature, not a bug
- Updated both TROUBLESHOOTING.md and SECURITY.md
- Addresses GitHub discussion #413 with security-first approach
2025-09-04 10:31:42 +00:00
Pulse Monitor ac136afbd4 docs: improve password recovery documentation with secure methods
- Removed overly convenient password reset script (security concern)
- Documented existing secure recovery token system
- Added proper security warnings and considerations
- Three-tier recovery approach: tokens (secure), recovery mode (localhost), manual (last resort)
- Emphasizes security best practices and password manager usage
- Addresses GitHub discussion #413 with security-conscious approach
2025-09-04 10:16:30 +00:00
Pulse Monitor e394b086f1 feat: add password reset script and comprehensive documentation
- Created /opt/pulse/scripts/reset-password.sh for easy password recovery
- Script supports: reset password, set new username/password, disable auth, check status
- Added comprehensive password reset section to troubleshooting docs
- Covers all deployment types: native, Docker, ProxmoxVE LXC
- Addresses GitHub discussion #413 about password recovery
2025-09-04 10:06:54 +00:00
Pulse Monitor 151228ce28 fix: resolve 'no healthy nodes available' storage error (addresses #405)
- Changed cluster client initialization to be optimistic (assume healthy)
- Nodes now start as healthy and are marked unhealthy only on actual failures
- This prevents the issue where all nodes were marked unhealthy during init
- Storage operations can now proceed even if initial health checks fail
- Allows recovery from temporary network or auth issues during startup
2025-09-03 21:53:46 +00:00
Pulse Monitor 6e1f8ca736 docs: update webhook documentation with custom headers info
- Added Custom Headers section explaining the new UI feature
- Updated ntfy instructions with security note about topic names
- Added common header examples table for authentication
- Clarified how to add Bearer tokens and API keys
2025-09-03 16:44:34 +00:00
Pulse Monitor 9d51d33425 feat: add custom headers UI for webhook configuration (addresses #412)
- Added custom headers section to webhook configuration UI
- Users can now add, edit, and remove custom headers for authentication
- Updated ntfy instructions to be clearer about adding Authorization headers
- Supports Bearer tokens, API keys, and other custom headers
2025-09-03 16:00:22 +00:00
Pulse Monitor 7fa9733e7c cleanup: remove unused nodeColors utility that was never implemented 2025-09-03 13:59:06 +00:00
Pulse Monitor ddf2d9e0e8 fix: remove unused import causing TypeScript error 2025-09-03 13:46:15 +00:00
Pulse Monitor 5494079634 chore: bump version to v4.13.0 2025-09-03 13:42:00 +00:00
Pulse Monitor 618b95b902 feat: add color generation utility for consistent node identification
- Created nodeColors utility to generate consistent colors based on node names
- Provides a palette of 15 distinct colors that work in light/dark modes
- Can be used for future visual identification needs without conflicting with existing indicators
2025-09-03 13:25:13 +00:00
Pulse Monitor 0603a6506f fix: make tag indicators immediately update colors on theme switch
Tag indicators next to guest names now properly update their colors when switching between dark and light modes. Previously they would only update on the next data refresh cycle.

- Added reactive DarkModeContext for theme state management
- Updated TagBadges component to use reactive dark mode signal
- Made color calculations reactive to respond to theme changes
2025-09-03 12:39:49 +00:00
Pulse Monitor 7595fbd644 fix: use inset box-shadow for storage table alert borders to match NodeSummaryTable 2025-09-03 12:08:36 +00:00
Pulse Monitor 132f52d10b fix: adjust storage table padding for alert borders to prevent content gaps 2025-09-03 12:05:52 +00:00
Pulse Monitor bc00c3b5d2 fix: resolve storage display issues (addresses #410, #411, #385)
- Fixed shared storage jumping between nodes on each update by using consistent deduplication
- Shared storage now displays with node="cluster" to indicate it's cluster-wide
- Improved error logging when storage API calls fail to help diagnose permission issues
- Added specific warning when all nodes fail to retrieve storage (helps with #385, #411)

The jumping storage issue (#410) was caused by a race condition where parallel goroutines
would report shared storage under whichever node completed first, causing it to randomly
"jump" between nodes on each polling cycle.
2025-09-03 12:00:52 +00:00
Pulse Monitor f7345174bc fix: improve alert acknowledgment synchronization
- Enhanced WebSocket sync prevention with smarter pending change detection
- Increased protection timeout from 2s to 5s with smart clearing
- Server state now properly checked before clearing pending flags
- Button remains disabled for 1.5s after action to prevent race conditions
- API calls now complete before local state updates
- No local state update on API errors to maintain consistency

This should prevent the acknowledge/unacknowledge flip-flopping issue
2025-09-03 11:34:19 +00:00
Pulse Monitor 30a6ce8fa4 fix: storage alerts and UI improvements
- Added CheckStorage calls in parallel storage polling (was missing, causing storage alerts to not trigger)
- Fixed node cleanup logic to use alert.Node field directly instead of parsing IDs
- Removed auto-acknowledge on alert click - now only acknowledge button toggles state
- Added unacknowledge button for acknowledged alerts
- Fixed double-toggle issue with acknowledge button using race condition prevention
- Fixed tab menu width in Alerts and Settings pages (changed flex-shrink-0 to flex-1)

addresses #228 (storage alert threshold issue)
2025-09-03 10:04:37 +00:00
Pulse Monitor 4fc198b9b2 fix: eliminate gaps in table rows with alert borders
- Replace border-left with inset box-shadow for alert indicators
- Prevents unprofessional gaps between background and table edges
- Add alert support to NodeSummaryTable with same gap-free technique
- Generate offline alerts in mock data for testing
- Fix alert matching to use full resource ID for nodes
2025-09-02 22:22:04 +00:00
Pulse Monitor dd1df44211 enhance: optimize default schedule settings for production use
- Enable alert cooldown by default (5 minutes) to prevent notification spam
- Enable rate limiting by default (10 alerts/hour) to prevent flooding
- Enable smart grouping by default (30 second window, group by node)
- Keep quiet hours disabled by default (requires user configuration)
- Keep escalation disabled by default (requires user setup)

These defaults provide sensible protection against notification overload
while allowing users to opt-in to more advanced scheduling features
2025-09-02 21:36:46 +00:00
Pulse Monitor 33bfb27f9a enhance: improve mock data realism and alert system
- 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
2025-09-02 21:11:01 +00:00
Pulse Monitor 1812cd0375 improve: show node name with storage when grouped by storage
- 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
2025-09-02 08:44:50 +00:00
Pulse Monitor 1a3489568a improve: enhance mobile responsiveness for Settings and Guest URLs pages
- 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
2025-09-02 07:33:29 +00:00
Pulse Monitor 58d4c4b6c8 docs: update CLAUDE.md with development notes 2025-09-01 22:59:32 +00:00
Pulse Monitor f19c7ea8f9 fix: increase API timeout to prevent deadline exceeded errors (addresses #408)
- 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.
2025-09-01 22:59:32 +00:00
Pulse Monitor 15a9158d58 docs: remove ProxmoxVE Helper Script references
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.
2025-09-01 22:59:32 +00:00
Pulse Monitor 92ba0d334e fix: improve binary replacement reliability during updates (addresses #406)
- 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.
2025-09-01 22:59:32 +00:00
Pulse Monitor 40351a3e95 docs: add Gotify and ntfy webhook documentation
- added complete setup instructions for Gotify webhooks
- added complete setup instructions for ntfy webhooks
- updated Telegram docs to reflect simplified template-based setup
- clarified that Pulse sends rich formatted notifications automatically
2025-09-01 22:59:32 +00:00
Pulse Monitor 7720f5e595 enhance: make Gotify and ntfy notifications as rich as Discord/Telegram
- 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
2025-09-01 22:59:32 +00:00
Pulse Monitor 7bf1c8a665 improve: enhance Gotify notification details and add ntfy to UI (addresses #228)
- 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
2025-09-01 22:59:32 +00:00
Pulse Monitor 9554a8a19a fix: clarify update settings to indicate manual installation required (addresses #404)
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
2025-09-01 22:59:32 +00:00
Pulse Monitor d97cb6cce7 chore: remove temporary auth override used for testing 2025-09-01 22:59:32 +00:00
Pulse Monitor 22953a0747 fix: change password submit button not working (addresses #396)
- 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
2025-09-01 22:59:32 +00:00
Pulse Monitor 794e97d7bb fix: change password button not responding to clicks (addresses #396)
- 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
2025-09-01 22:59:32 +00:00
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