Commit Graph

896 Commits

Author SHA1 Message Date
Pulse Monitor c5841bfe3d improve: handle unavailable storage more gracefully (addresses #418)
- Reduced storage API timeout from 120s to 15s to prevent blocking when storage mounts are unavailable
- Added graceful error handling for storage timeouts - continues with partial data instead of failing
- Improved error messages to clarify when timeouts are likely due to unavailable storage (e.g., NFS mounts)

This prevents Pulse from marking nodes as unhealthy when storage endpoints timeout due to temporarily unavailable network storage.
2025-09-05 17:41:30 +00:00
Pulse Monitor 86843c7a7f fix: handle fresh PVE installations without VMs in installer (addresses #422)
The installer would exit abruptly on fresh Proxmox installations without any VMs due to commands failing with set -e enabled. Now wrapped the ID collection section with set +e/set -e to allow graceful handling of these cases.
2025-09-05 17:33:36 +00:00
Pulse Monitor c9e58f7ee1 fix: improve cluster connectivity handling when endpoints are not resolvable (addresses #420)
- Use main host for cluster operations when node endpoints lack FQDNs/IPs
- Skip initial health check for single-endpoint clusters (main host routing)
- Return empty lists instead of errors when cluster nodes are unreachable
- Prevent VMs/containers from disappearing when cluster has connectivity issues
- Fix the 'Instance marked as cluster but is actually standalone' false warning
2025-09-05 16:03:56 +00:00
Pulse Monitor a8f8ba1e7a chore: bump version to v4.14.0-rc.2 2025-09-04 20:46:32 +00:00
Pulse Monitor 793f3c0683 fix: prevent rate limiting on essential real-time endpoints (addresses #419)
The /api/state and /api/guests/metadata endpoints are now excluded from
rate limiting as they are polled frequently by the UI for real-time updates.
This prevents the "Loading..." issue when users with multiple nodes access
the application.

- Added skip list in UniversalRateLimitMiddleware for real-time endpoints
- Removed duplicate rate limiting logic from router's ServeHTTP
- Consolidated all rate limiting into the universal middleware
2025-09-04 20:22:56 +00:00
Pulse Monitor 5ae54019ba fix: use Index instead of For loop for webhook header inputs (addresses #412)
Switched from For to Index loop which provides better stability for input elements in SolidJS. Also removed circular dependency between headerInputs and formData that was causing re-renders.
2025-09-04 20:09:38 +00:00
Pulse Monitor 0f48b90adf fix: webhook header inputs losing focus after each keystroke (addresses #412)
Refactored header management to use a separate array with stable IDs instead of iterating over object entries. This prevents React/SolidJS from losing track of which input has focus when the headers object changes.
2025-09-04 19:58:32 +00:00
Pulse Monitor 2e9930bee7 fix: webhook header input losing focus when typing (addresses #412)
The header key input was losing focus after each keystroke due to improper state updates that caused unnecessary re-renders. Fixed by preserving the header object order and avoiding the use of array indices.
2025-09-04 19:50:49 +00:00
Pulse Monitor 2c4a8a3fc1 fix: allow password changes when behind proxy Basic Auth (addresses #407)
The password change endpoint now handles both scenarios:
- Direct auth: Uses Authorization header when it contains Pulse credentials
- Proxy auth: Uses currentPassword from JSON body when behind proxy Basic Auth
- Prevents proxy auth from interfering with Pulse's own authentication
- Maintains security by always requiring current password verification
2025-09-04 19:42:49 +00:00
Pulse Monitor 65b6ef6cac fix: prevent VM-specific errors from marking cluster nodes unhealthy (addresses #405)
- Fixed issue where QEMU guest agent errors incorrectly marked nodes as unhealthy
- Nodes with VMs missing guest agents no longer affect cluster health status
- Reduced health check retry interval from 30s to 5s for faster recovery
- Storage and backup polling now works correctly even when some VMs lack guest agents
2025-09-04 19:34:11 +00:00
Pulse Monitor 4f72aa1c9b fix: close webhook form after successfully adding a webhook
- Form now properly closes after clicking 'Add Webhook'
- Prevents confusing UX where form stays open after saving
- User can click '+ Add Webhook' again if they want to add another
2025-09-04 19:10:42 +00:00
Pulse Monitor c396f52296 fix: resolve compilation error and webhook issues
- Fixed undefined 'alert' variable in sendWebhookRequest function
- Dynamic ntfy headers are properly handled in sendWebhook where alert exists
- Cleared corrupted webhooks.enc file
- Webhook testing should now work without JSON parsing errors
2025-09-04 19:06:06 +00:00
Pulse Monitor 3d80a27234 fix: resolve webhook JSON parsing errors for all services
- Fixed SendEnhancedWebhook to use service-specific payload generation
- Test webhooks now properly skip template-syntax headers
- ntfy and other plain text services correctly skip JSON validation
- Prevents 'invalid character' errors when testing webhooks
- All webhook payload generation now respects service type
2025-09-04 18:55:23 +00:00
Pulse Monitor bc0e12941f refactor: remove emojis from all webhook templates for professional appearance
- Replaced emoji indicators with plain text (CRITICAL, WARNING, INFO)
- Cleaned up ntfy, Gotify, and Telegram templates
- Removed decorative emojis from alert details
- Updated dynamic header generation to use plain text
- Maintains professional tone appropriate for monitoring software
2025-09-04 18:48:51 +00:00
Pulse Monitor 6841d160af fix: resolve ntfy webhook test failures with emoji and JSON parsing
- TestEnhancedWebhook now uses generatePayloadFromTemplateWithService to handle service-specific formatting
- ntfy webhooks correctly skip JSON validation since they use plain text
- Dynamic ntfy headers (Title, Priority, Tags) are properly set during testing
- Template-syntax headers with emojis no longer break webhook tests
- Fixes 'invalid character looking for beginning of value' error
2025-09-04 18:41:10 +00:00
Pulse Monitor a008866318 feat: add test button to webhook creation form
- Users can now test webhook configurations before saving them
- Test button appears in the add/edit form when URL and name are provided
- Shows 'Testing...' feedback during test execution
- Helps users validate webhook settings immediately during setup
- Improves UX by catching configuration issues before saving
2025-09-04 18:33:28 +00:00
Pulse Monitor d28f00eb20 fix: resolve 404 error when updating or deleting webhooks
- Fixed webhook ID extraction in UpdateWebhook and DeleteWebhook handlers
- Previous code expected 5 URL parts but path only had 2 after prefix stripping
- Now correctly extracts webhook ID from /api/notifications/webhooks/{id}
- Resolves frontend error when saving webhook changes
2025-09-04 18:24:02 +00:00
Pulse Monitor 32b05d5a5f 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 b0373851ee docs: update documentation to reflect automatic public URL detection 2025-09-04 18:02:21 +00:00
Pulse Monitor 77888c17c6 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 8116330b54 docs: enhance PULSE_PUBLIC_URL documentation for webhook notifications 2025-09-04 17:49:37 +00:00
Pulse Monitor 8f2ac3fc64 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 da347d9075 Revert "chore: bump version to v4.14.0-rc.2"
This reverts commit 12a143d3cd.
2025-09-04 17:38:28 +00:00
Pulse Monitor 12a143d3cd chore: bump version to v4.14.0-rc.2 2025-09-04 17:33:16 +00:00
Pulse Monitor 26a3bcc397 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 165ffba85c fix: add optional chaining for pbsNames TypeScript error 2025-09-04 16:56:32 +00:00
Pulse Monitor b46363c7e4 chore: bump version to v4.14.0-rc.1 2025-09-04 16:53:04 +00:00
Pulse Monitor 4346630e44 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 b1879c9820 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 6b9f367859 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 6cfa0a58d2 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 ae3bb554a0 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 e495423c68 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 c9d2f5f294 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 8bd2187971 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 7dc8a8c85a 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 f882a7d7e1 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 b488f4db0a 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 810ec40ce1 chore: remove dev build tag and add auth debugging 2025-09-04 15:00:14 +00:00
Pulse Monitor 35f5de75bd fix: store username during login to fix password change 401 error (addresses #396) 2025-09-04 14:18:30 +00:00
Pulse Monitor 75d6bb59ce 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 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