Commit Graph

879 Commits

Author SHA1 Message Date
Pulse Monitor 3d941b40cc fix: handle ntfy webhook headers dynamically to prevent template syntax errors
- ntfy template headers contained Go template syntax that wasn't being processed
- Added special handling for ntfy webhooks to set Title, Priority, and Tags dynamically
- Headers are now set based on actual alert level and details
- Ignores template-syntax headers from webhook config to prevent errors
- Fixes issue where ntfy webhooks with preset headers would fail to send
2025-09-04 18:14:29 +00:00
Pulse Monitor 5681a0fbd5 docs: update documentation to reflect automatic public URL detection 2025-09-04 18:02:21 +00:00
Pulse Monitor 753d22b0b3 feat: auto-detect public URL for webhook notifications when not explicitly configured
- Automatically detects the machine's IP address for webhook 'View in Pulse' links
- Checks multiple methods: Proxmox container, outbound IP, Docker, network interfaces
- Falls back through detection methods to find the best IP
- Users no longer need to manually set PULSE_PUBLIC_URL in most cases
- Manual configuration still takes precedence if set
2025-09-04 18:01:18 +00:00
Pulse Monitor 8d2fc93bce docs: enhance PULSE_PUBLIC_URL documentation for webhook notifications 2025-09-04 17:49:37 +00:00
Pulse Monitor 21b168d287 fix: ensure Gotify webhook links use full Pulse URL instead of relative path (addresses #415) 2025-09-04 17:48:00 +00:00
Pulse Monitor 2fe5117936 Revert "chore: bump version to v4.14.0-rc.2"
This reverts commit 12a143d3cd.
2025-09-04 17:38:28 +00:00
Pulse Monitor 9ad5a807b4 chore: bump version to v4.14.0-rc.2 2025-09-04 17:33:16 +00:00
Pulse Monitor 22fdb36234 fix: don't mark cluster nodes unhealthy for VM-specific QEMU agent errors
When a VM doesn't have QEMU guest agent configured, Proxmox returns a 500 error.
This was incorrectly marking the entire cluster node as unhealthy, preventing
all operations on that node. Now we treat these as VM-specific errors that
don't affect node health status.
2025-09-04 17:32:30 +00:00
Pulse Monitor e54c7daaac fix: add optional chaining for pbsNames TypeScript error 2025-09-04 16:56:32 +00:00
Pulse Monitor fd77419cad chore: bump version to v4.14.0-rc.1 2025-09-04 16:53:04 +00:00
Pulse Monitor 8b65c1adf3 fix: increase timeout for storage operations from 60s to 120s (addresses #418)
- Storage queries can timeout on large clusters or slow storage backends
- Extended timeout specifically for GetStorage, GetStorageContent, and GetAllStorage
- Preserves existing context deadlines if they're shorter than 120s
- Should resolve 'context deadline exceeded' errors during storage polling
2025-09-04 16:43:56 +00:00
Pulse Monitor c3d473d607 fix: never deduplicate non-shared local storage in 'by storage' view
Critical fix: Local storage (local, local-zfs) should NEVER be deduplicated
as each node has its own physical storage with different capacities and usage.
Only shared storage (like PBS) should be deduplicated. Each node's local
storage now correctly appears as a separate entry.
2025-09-04 16:31:01 +00:00
Pulse Monitor 612907394d fix: correctly handle PBS storage as shared when configured
PBS storage should respect Proxmox's shared configuration. When PBS
storage is configured without node restrictions in Proxmox, it appears
as shared storage accessible by all nodes. Updated mock data to match
real cluster behavior where PBS entries appear under 'cluster' group.
2025-09-04 16:25:04 +00:00
Pulse Monitor 2cede40509 fix: properly deduplicate PBS storage in 'by storage' view
PBS storage entries pointing to the same server (same capacity) are now
truly deduplicated. Instead of showing 3 entries for pbs-pve1, pbs-pve2,
and pbs-pve3, it now shows a single 'PBS Storage' entry with all namespaces
listed. This provides actual deduplication for identical storage resources.
2025-09-04 16:18:18 +00:00
Pulse Monitor d915210157 feat: deduplicate identical storage entries in 'by storage' view
The storage view now deduplicates identical storage entries (like PBS
storage that appears on multiple nodes). Instead of showing pbs-pve1
three times, it shows it once with all nodes listed (pve1, pve2, pve3).
This provides a cleaner view of actual storage resources.
2025-09-04 16:14:52 +00:00
Pulse Monitor 8c3a086a13 fix: update mock PBS storage to match production behavior
Mock data now accurately replicates production PBS storage where:
- Each node sees ALL PBS storage entries (pbs-pve1, pbs-pve2, pbs-pve3)
- Storage sizes and usage match production (~950GB, 14% used)
- Each PBS entry has a node-specific namespace but appears on all nodes
- PBS storage is correctly marked as not shared
2025-09-04 15:59:51 +00:00
Pulse Monitor 5deba3cec0 enhance: add PBS storage simulation to mock data
Mock data now properly simulates PBS storage behavior where each node
reports all PBS namespaces (pbs-pve1, pbs-pve2, pbs-pve3). This accurately
replicates real cluster behavior where each node has access to all PBS
namespaces but they're node-specific and not shared.
2025-09-04 15:54:23 +00:00
Pulse Monitor 26e9e9393b fix: PBS storage incorrectly showing on wrong nodes (addresses #403)
PBS storage was being marked as shared when it shouldn't be. Each PBS
namespace is node-specific even when connecting to the same PBS server.
Now PBS storage correctly shows under its respective node instead of
all being assigned to the last node.
2025-09-04 15:49:20 +00:00
Pulse Monitor ce0ecd4ab9 fix: set proper connectionHealth for mock cluster nodes
Mock cluster nodes now correctly show degraded state (yellow) when
some nodes are offline. This properly demonstrates the degraded cluster
functionality for issue #379.
2025-09-04 15:32:45 +00:00
Pulse Monitor 83862eb817 fix: set Online status for mock cluster endpoints
Mock cluster endpoints were showing grey dots because the Online field
wasn't being set based on the node status. Now properly reflects the
node's online/offline status with green/grey indicators.
2025-09-04 15:29:42 +00:00
Pulse Monitor 840d9627a5 feat: add yellow status indicator for degraded cluster connectivity (addresses #379)
When some cluster nodes are offline but the main node can still reach others,
show a yellow status dot instead of red to indicate partial connectivity.
This better represents the actual cluster health state.
2025-09-04 15:24:22 +00:00
Pulse Monitor 70250de0df chore: remove dev build tag and add auth debugging 2025-09-04 15:00:14 +00:00
Pulse Monitor fc25dbb8a8 fix: store username during login to fix password change 401 error (addresses #396) 2025-09-04 14:18:30 +00:00
Pulse Monitor 6cb33f13da feat: add Pushover notification template (addresses #392)
Added built-in Pushover template alongside Discord, Telegram, Gotify, and ntfy. Users can now select Pushover from the service dropdown instead of manually configuring it as a generic webhook.
2025-09-04 13:47:50 +00:00
Pulse Monitor 3650930a23 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 0a66bffb58 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 a999d8b80c 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 2c3b45e7f8 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 2391329d28 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 d1703ce4e9 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 01cd11809e 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 79d3f1617d docs: remove time references from password recovery sections 2025-09-04 10:34:16 +00:00
Pulse Monitor 23bf4b1265 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 fbad442f5c 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 2d699ca46d 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 401aca8ff3 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 8bbfa88cfb 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 6d1986271b 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 ffc6bdbd7b cleanup: remove unused nodeColors utility that was never implemented 2025-09-03 13:59:06 +00:00
Pulse Monitor b8b791c5ce fix: remove unused import causing TypeScript error 2025-09-03 13:46:15 +00:00
Pulse Monitor 0b20c1b9f5 chore: bump version to v4.13.0 2025-09-03 13:42:00 +00:00
Pulse Monitor 8254b5189e 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 ebcc809b84 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 f9c1d2bf89 fix: use inset box-shadow for storage table alert borders to match NodeSummaryTable 2025-09-03 12:08:36 +00:00
Pulse Monitor 9df8ebf661 fix: adjust storage table padding for alert borders to prevent content gaps 2025-09-03 12:05:52 +00:00
Pulse Monitor 2a2e281b10 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 d09be32de5 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 f0eadd0c7c 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 e3e554a4ad 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 f8de8d71d8 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