Commit Graph

1100 Commits

Author SHA1 Message Date
courtmanr@gmail.com b36d5f55db fix: properly enhance Notification Settings with email provider selection
- Remove duplicate Global Settings tab that duplicated existing functionality
- Add comprehensive email provider selection (Gmail, Outlook, Yahoo, Custom)
- Include provider-specific configuration and helpful instructions
- Add advanced SMTP settings with collapsible interface
- Implement test email and save configuration functionality
- Add proper event handlers for all email configuration elements
- Maintain existing webhook functionality without duplication
- Keep clean separation between email and webhook configuration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 12:40:33 +01:00
courtmanr@gmail.com 5a8f9aea09 feat: add Global Settings tab to Alert Management modal
- Add new Global Settings tab with comprehensive alert configuration
- Include global alert type toggles (CPU, Memory, Disk, Down alerts)
- Add threshold configuration for CPU (85%), Memory (90%), Disk (95%)
- Implement custom per-VM/LXC threshold integration placeholder
- Add advanced settings for alert frequency and suppression
- Create modern toggle switches and form controls
- Load configuration from backend /api/config endpoint
- Set up event handlers for all form controls
- Prepare foundation for migrating from settings.js

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 12:32:57 +01:00
courtmanr@gmail.com b75aca33cd feat: add edit functionality for custom alert rules
- Add Edit button to custom alert cards
- Implement editCustomAlert function to pre-fill form with existing data
- Update createCustomAlertModal to handle both create and edit modes
- Modify saveCustomAlert to use PUT requests for updates vs POST for creation
- Update modal titles and button text based on create vs edit mode
- Preserve existing alert properties like enabled status and creation date
- Expose editCustomAlert in public API for onclick handlers

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 12:22:06 +01:00
courtmanr@gmail.com 53e861d610 feat: implement nested tabs for Alert Rules (System vs Custom)
- Replace single scrollable view with nested tabs for System and Custom alerts
- Remove filter dropdown in favor of dedicated tabs
- System Alerts tab shows built-in monitoring rules (CPU, Memory, Disk, Down)
- Custom Alerts tab shows user-created threshold rules
- Consistent styling with Notification Settings nested tabs
- Simplify navigation and improve organization
- Maintain all existing functionality with better UX
2025-06-05 12:14:23 +01:00
courtmanr@gmail.com 49069f0de3 refactor: replace gradient cards with nested tabs in Notification Settings
- Remove modern styling that conflicted with app's design language
- Implement nested tab structure consistent with existing UI patterns
- Replace large gradient cards with clean, tabbed interface
- Email and Webhook settings now in separate, focused tabs
- Maintain same functionality with improved consistency
- Use standard app colors and styling throughout
- Simplify layout while keeping all interactive features
2025-06-05 12:11:27 +01:00
courtmanr@gmail.com f5d944f7aa remove: redundant per-rule notification overrides section
The per-rule overrides section that directed users to the Alert Rules tab
was unnecessary since users are already within the alert management modal.
This simplifies the Notification Settings tab and removes redundant navigation.
2025-06-05 12:08:22 +01:00
courtmanr@gmail.com 91ecaaf4b1 feat: redesign Notification Settings tab with modern card-based layout
- Replace basic form layout with interactive card-based design
- Add gradient backgrounds and better visual hierarchy
- Implement expandable configuration panels for email and webhook setup
- Add modern toggle switches with real-time status indicators
- Include popular service presets (Discord, Slack, Teams, Custom)
- Add progressive disclosure to reduce cognitive load
- Improve responsive design with better mobile layout
- Enhanced UX with hover states and visual feedback
- Maintain all existing functionality while improving usability
2025-06-05 12:07:12 +01:00
courtmanr@gmail.com faa525ebde feat: integrate custom alerts with backend API endpoints
- Replace localStorage with real API calls to /api/alerts/rules
- Load custom alerts from backend via GET /api/alerts/rules
- Create alerts via POST /api/alerts/rules
- Update alerts via PUT /api/alerts/rules/:id
- Delete alerts via DELETE /api/alerts/rules/:id
- Improve alert card display to handle backend data structure
- Add proper error handling for all API operations
2025-06-05 11:57:09 +01:00
courtmanr@gmail.com 97004c10d1 fix: implement local storage for custom alerts to show created alerts immediately
- Add localStorage-based persistence for custom alerts as temporary solution
- Create custom alert cards with enable/disable and delete functionality
- Display created alerts immediately in Alert Rules tab
- Add proper error handling and user feedback
- Maintain alert data structure for future backend integration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 11:50:59 +01:00
courtmanr@gmail.com ad68c7bbbd feat: integrate dashboard thresholds with unified alert management system
- Add comprehensive alert management modal with 3-tab structure (Alerts, Alert Rules, Notifications)
- Connect dashboard threshold buttons to new alert management system
- Implement threshold pre-population for custom alert creation
- Support multiple threshold capture from dashboard to single alert rule
- Add "Manage Alerts" button to alerts dropdown for centralized access
- Maintain backward compatibility with existing alert functionality
- Enhance user workflow from threshold setting to alert rule creation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 11:48:52 +01:00
courtmanr@gmail.com 47c4541a51 feat: refine threshold alert system with improved UI and functionality
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-05 09:48:22 +01:00
courtmanr@gmail.com a965f7c9b4 fix: improve threshold alert indicator positioning and visibility
- Move threshold count badge outside overflow-hidden container to prevent clipping
- Add z-30 layering to ensure badge appears above toggle boundaries
- Position badge relative to parent flex container for proper display
- Remove unnecessary relative positioning from threshold label

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 21:21:33 +01:00
courtmanr@gmail.com 0e8a07ac4e fix: correct node URL construction in dashboard navigation
Fix getHostUrl function to return complete URLs with protocol and port instead of just hostnames. This resolves the issue where clicking node names on the dashboard would incorrectly prepend the current host to the URL.

- Add constructUrl helper function to properly format URLs
- Use HTTPS protocol with appropriate ports (8006 for PVE, 8007 for PBS)
- Handle hosts that already include protocol
- Maintain backward compatibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 21:14:25 +01:00
courtmanr@gmail.com dbba6f2c04 feat: enhance alert threshold notifications with granular service selection
- Replace generic "How should we notify you?" with concise "Notification methods" label
- Add granular notification service selection with 5 specific options:
  - In-app Alerts (dashboard notifications)
  - Email (SMTP) with automatic configuration detection
  - Discord with branded icon and webhook URL detection
  - Slack with branded icon and webhook URL detection
  - Custom Webhook for other API endpoints
- Implement smart service status detection to show "Ready" state automatically
- Improve visual design with service-specific branding and icons
- Maintain backward compatibility while providing better UX

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 21:11:50 +01:00
courtmanr@gmail.com ccbb5c41c6 fix: make individual node resource fetching non-blocking
The smart cluster handling prevented endpoint duplication but individual
node resource fetching was still sequential and blocking. This adds:

- Promise.allSettled for parallel node resource fetching
- 8-second timeouts on individual resource requests
- Proper error handling for failed resources

This should completely eliminate dashboard freezes when nodes go offline.

Addresses issue #104 follow-up
2025-06-04 20:42:18 +01:00
courtmanr@gmail.com 6b0024f1ee feat: implement dynamic threshold alerts with unified rule system
- Add visual threshold-to-alert conversion feature in dashboard filtering UI
- Implement compound threshold rules that support multiple metrics with AND logic
- Enhance existing AlertManager to handle both single-metric and compound threshold rules
- Add dynamic alert rule creation modal with step-by-step configuration
- Implement comprehensive rule management (view, enable/disable, delete)
- Add real-time evaluation of compound threshold rules in main metrics processing loop
- Create compound rule API endpoints integrated with existing alerts system
- Add smart threshold summary display and button state management
- Support email/webhook notifications for compound threshold rule violations
- Maintain backward compatibility with existing single-metric alert rules

This bridges the gap between visual filtering and automated alerting, allowing users to
convert their threshold filtering criteria into persistent monitoring rules with a
seamless user experience.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 20:37:36 +01:00
courtmanr@gmail.com a8fc9e0d61 feat: enhance email notifications setup with user-friendly provider selection
- Add step-by-step email configuration with provider presets (Gmail, Outlook, Yahoo)
- Implement auto-detection of email providers based on email domain
- Provide provider-specific setup instructions and App Password guidance
- Add collapsible advanced settings to hide technical SMTP details
- Fix SSL/TLS configuration for Gmail (use STARTTLS instead of SSL)
- Improve SMTP transporter configuration with requireTLS and better error handling
- Add comprehensive provider help sections with clear instructions
- Fix configuration persistence by properly including SMTP settings in config API
- Enhance security by not exposing passwords in API responses

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 20:11:31 +01:00
courtmanr@gmail.com 5084aa9668 chore: release v3.22.2-rc.2 v3.22.2-rc.2 2025-06-04 19:14:42 +01:00
courtmanr@gmail.com 9b2f2fa329 fix: clean host URLs in additional PVE/PBS endpoints and improve placeholders
- Apply URL cleaning logic to additional PVE/PBS server configurations
- Extract ports from URLs and populate port fields automatically
- Update placeholders to show clean hostnames instead of full URLs
- Add consistent host/port guidance text for additional endpoints
- Ensure all endpoint configurations follow same clean format

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 19:10:47 +01:00
courtmanr@gmail.com 0ed49049c2 feat: enhance configuration panel with improved host/port handling and data persistence
- Fix host/port field confusion with clear guidance text
- Implement form data preservation between PVE and PBS tab switches
- Add smart URL parsing to extract hostnames from full URLs
- Ensure save button captures configuration from all tabs
- Improve configuration loading to handle both structured and flat formats
- Fix Docker config directory detection logic

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 19:06:21 +01:00
courtmanr@gmail.com 6117586f02 feat: implement smart cluster handling with endpoint prioritization
- Add cluster membership detection to identify same-cluster endpoints
- Implement endpoint prioritization with failover support
- Eliminate data duplication by using only one endpoint per cluster
- Maintain backward compatibility with existing configurations
- Add caching for cluster membership detection (5min TTL)

This resolves the core issue where users configure multiple endpoints
for the same cluster, causing blocking timeouts and data duplication.
Now only the primary endpoint is used, with automatic failover to
backup endpoints when needed.

Addresses issue #104
2025-06-04 19:00:59 +01:00
courtmanr@gmail.com 5ff3eb71a9 fix: prevent caching empty form values to avoid confusing configuration display
- Added hasSignificantConfiguration() to check if form data contains meaningful values
- Only cache form data when there's actual configuration (e.g., non-empty host fields)
- Clear cache when no significant data exists to prevent empty value restoration
- Fixes issue where empty default values were cached and restored, appearing as lost config
- Improves user experience by only preserving actual user input

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 18:52:31 +01:00
courtmanr@gmail.com 823613132b fix: improve data restoration with better directory handling and verification
- Ensure data directory exists before restoration attempts
- Fixed copy operation to properly restore file contents
- Added verification logging to confirm thresholds and acknowledgements restoration
- Better error handling for edge cases during restore process

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 18:24:52 +01:00
courtmanr@gmail.com 8f19cb707e enhance: improve backup reporting and verification for user configs
- Added detailed logging of backup contents (file counts, what was found/missing)
- Enhanced backup info file with configuration summary
- Better visibility into custom thresholds, acknowledgements, and webhook configs
- Improved user feedback about what data was preserved during backup/restore
- Backup already captures all user data correctly (data/, .env, config/)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 18:04:28 +01:00
courtmanr@gmail.com 30086f7883 fix: remove all pulse service files during uninstall
- Added removal of pulse-monitor.service and pulse-proxmox.service during uninstall
- Fixes false positive "Pulse is installed" detection after removal
- Ensures complete cleanup of all legacy service files
- Prevents orphaned service files from interfering with installation detection

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 17:49:23 +01:00
courtmanr@gmail.com e91ebc68b5 feat: add comprehensive backup/restore functionality to installer
- Added backup prompt during Pulse removal with user choice
- Implemented automatic backup detection during fresh installs
- Added interactive restore menu showing available backups with dates/versions
- Comprehensive backup includes: user data, .env config, and config directory
- Seamless restore process with proper file permissions
- Backup location: /tmp/pulse-backup-YYYYMMDD-HHMMSS with info file
- Prevents data loss during removal/reinstallation workflows

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 17:45:06 +01:00
courtmanr@gmail.com 200951b06a fix: ensure complete process cleanup during Pulse removal
- Added pkill commands to terminate any remaining Pulse processes during removal
- Prevents port conflicts when reinstalling after removal
- Uses graceful kill first, then force kill after delay
- Fixes issue where orphaned processes prevented service restart

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 17:38:16 +01:00
courtmanr@gmail.com 3494f5c4fd fix: ensure service file exists even when version is current
- Added setup_systemd_service to "already latest version" path in updates
- Fixes case where service file is missing but version check passes
- Now recreates service file in all update scenarios

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 17:31:34 +01:00
courtmanr@gmail.com ceabacbd2b fix: ensure systemd service file is created during updates
- Added setup_systemd_service call to perform_update() function
- Fixes issue where service file could be missing after updates
- Now updates will recreate pulse.service if it doesn't exist

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 17:23:46 +01:00
courtmanr@gmail.com 061c10c827 fix: footer version checking now respects user's update channel preference
- Updated /api/version endpoint to use UpdateManager instead of hardcoded stable-only checks
- Removed obsolete checkLatestVersion() function that only checked stable releases
- Footer now correctly shows updates only for user's selected channel (stable or RC)
- Eliminates false "update available" notifications when RC versions exist but user is on stable channel

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 16:57:18 +01:00
courtmanr@gmail.com 126fc6b75e fix: remove UPDATE_CHANNEL from .env to prevent frontend conflicts
- Removed UPDATE_CHANNEL from main .env file to eliminate conflicts with frontend settings management
- Updated configLoader.js to read UPDATE_CHANNEL from config/.env (where frontend saves settings) instead of main .env
- Now defaults to 'stable' channel when no frontend setting is configured
- Frontend can fully manage update channel preference without .env conflicts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 16:49:58 +01:00
courtmanr@gmail.com 07b3f0a9c6 fix: ensure polkit directory permissions are correct
- Explicitly set /etc/polkit-1/rules.d permissions to 755
- Handle case where polkit package creates restrictive permissions
- Ensures rule file creation works regardless of polkit install order
- Makes community script integration more robust
2025-06-04 16:16:08 +01:00
courtmanr@gmail.com 681c528aff feat: auto-install polkit for sudoless updates in LXC containers
- Add policykit-1 package to automatic dependency installation
- Check for pkexec command availability before installing polkit
- Enable sudoless update system to work in LXC environments
- Improve compatibility with community Proxmox VE installation scripts

This ensures that new installations (including via community scripts)
automatically get polkit support for seamless web-based updates
without requiring manual sudo commands.
2025-06-04 15:49:16 +01:00
courtmanr@gmail.com 1d6f4b8a64 feat: add RC testing version with visual indicators
- Add RC badge to header for easy identification
- Update page title to indicate RC version
- Prepare v3.22.2-rc.1 for testing update mechanism
v3.22.2-rc.1
2025-06-04 15:23:03 +01:00
courtmanr@gmail.com bb4a06d1bb feat: implement sudoless update system with polkit integration
- Add polkit rule for sudoless service management
- Improve update manager with multi-strategy restart approach
- Fix npm dependency conflicts in update process
- Add comprehensive test suite for update system
- Enhance frontend update progress tracking
- Update install script with automatic polkit setup
v3.22.1
2025-06-04 15:20:00 +01:00
courtmanr@gmail.com c8e1f5d360 chore: release v3.22.1-rc.1 v3.22.1-rc.1 2025-06-04 14:24:51 +01:00
courtmanr@gmail.com 94dd2f4f65 docs: add enhanced update system features to README
- Document smart version switching capabilities
- Highlight consolidated update mechanism benefits
- Add context-aware update descriptions with commit tracking
2025-06-04 14:24:32 +01:00
courtmanr@gmail.com acd2223ff6 chore: release v3.22.0 v3.22.0 2025-06-04 14:21:23 +01:00
courtmanr@gmail.com 67d79e20ed feat: consolidate update system and improve version comparison UI
- Consolidate dual update mechanisms to use proven install script
- Fix critical version parameter extraction bug
- Add comprehensive commit differences display with GitHub links
- Improve update UI with expandable details and compact summary
- Remove redundant channel recommendation warnings
- Add proper error handling and cleanup for update process
2025-06-04 14:20:28 +01:00
courtmanr@gmail.com b827a90bd9 chore: release v3.21.0-rc.2 v3.21.0-rc.2 2025-06-04 10:53:30 +01:00
courtmanr@gmail.com ce9b1bb2e1 feat: improve alert manager functionality and testing 2025-06-04 10:52:10 +01:00
courtmanr@gmail.com 9d8942e8b5 feat: implement user-controlled update channels (stable/RC)
Add comprehensive update channel system allowing users to choose between:
- Stable: Production releases only (default, safe)
- RC: Release candidate versions for testing fixes and new features

Key Features:
- Safe defaults: All users start on stable channel unless explicitly changed
- Clear UI warnings: RC selection shows warning about potential bugs
- Robust validation: Invalid values auto-correct to stable with warnings
- Security: URL validation prevents malicious downloads
- Bulletproof error handling: Handles all edge cases gracefully

Technical Implementation:
- UPDATE_CHANNEL environment variable (stable/rc)
- Enhanced UpdateManager with channel-specific GitHub API calls
- Frontend UI with clear channel selection and warnings
- Configuration persistence and validation
- Comprehensive edge case handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-04 10:49:22 +01:00
courtmanr@gmail.com 3823dcbcb9 fix: complete migration from old service names to resolve update failures
Updates installer to use pulse.service and enhances migration logic to handle both pulse-proxmox.service and pulse-monitor.service. This resolves the "No Pulse Installation Found\!" error experienced by existing users during updates.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 21:37:31 +01:00
courtmanr@gmail.com ccf3525618 chore: release v3.21.0-rc.1 v3.21.0-rc.1 2025-06-03 21:11:47 +01:00
courtmanr@gmail.com aa884b5ff5 fix: improve auto-update process to use release tarballs correctly
- Skip npm install since release tarballs already include node_modules
- Better validation of update package structure
- Improved error handling and logging
- Use Node.js fs operations instead of shell commands for better cross-platform support

This should eliminate npm errors during auto-update process.
2025-06-03 21:11:20 +01:00
courtmanr@gmail.com cbe49c20f6 fix: resolve dashboard freezing and node duplication in multi-node setups
- Changed Promise.all to Promise.allSettled to prevent one offline endpoint from blocking all others
- Added intelligent node deduplication that prefers online nodes with fresh data
- Implemented 5-second timeout for discovery calls to fail fast
- Added 1-minute cache to preserve node state during brief outages
- Fixed transition states to avoid "red dot with online status" issue

This addresses issue #104 where:
- Dashboard would freeze when primary node went offline
- Nodes were duplicated when multiple endpoints pointed to same cluster
- Dashboard stopped updating during node reboots

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 21:03:33 +01:00
courtmanr@gmail.com 745de9e273 feat: improve calendar date handling for different timezones
- Changed calendar to use local dates instead of UTC throughout
- Added formatLocalDateKey() helper for consistent date formatting
- Updated date comparisons and grid generation to use local timezone
- Fixed day number display to use getDate() instead of getUTCDate()

This should address timezone-related issues where backups appeared on incorrect days.

Related to #120 - Please check the next RC release to see if this resolves the calendar date issues.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 20:43:00 +01:00
courtmanr@gmail.com 3237f24610 fix: webhook configuration persistence and Discord 400 errors
- Add webhook configuration to structured config response in configApi
- Update settings UI to properly display webhook enabled state
- Fix Discord webhook 400 errors by sending platform-specific payloads
- Detect webhook type (Discord/Slack) and send appropriate format
- Preserve webhook settings when saving configuration
- Update both test webhook and alert webhook sending logic

Fixes #119

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 19:31:07 +01:00
courtmanr@gmail.com 723358da6b fix: update webhook integration test to use existing API endpoint
- Replace non-existent /api/guests endpoint with /api/test-webhook
- Simplify test flow by using Pulse's built-in webhook testing
- All webhook tests now pass successfully

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 19:16:05 +01:00
courtmanr@gmail.com 123aa7db55 feat: simplify pre-release workflow to use only release candidates (RC)
- Update create-release.sh to show only RC example
- Remove alpha/beta complexity, keeping just RC for testing
- Simplify version progression: stable -> RC -> stable
- Auto-update continues to ignore pre-releases for safety
2025-06-03 15:56:02 +01:00