Commit Graph

290 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 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 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 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 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
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
2025-06-04 15:20:00 +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 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 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 2de032f04f fix: resolve webhook configuration loading and checkbox persistence issues
Fixes two webhook-related problems reported in issue #119:
- Webhook checkbox not persisting after save due to config not being included in API response
- 400 errors during webhook testing due to incorrect form data binding

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-03 15:18:02 +01:00
courtmanr@gmail.com 513e31126e feat: redesign backup health card with clearer statistics and improved layout
- Make health score more prominent with larger font and context
- Replace confusing guest counts with clear total backup count
- Add recent coverage metric showing guests with backups in last 7 days
- Reorganize backup type statistics with clear labeling
- Add coverage ratio showing protected vs unprotected guests
- Improve visual hierarchy and information density

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-02 18:48:08 +01:00
courtmanr@gmail.com 066e61e95e feat: improve backup type labels with styled badges in history card
- Convert plain text backup type labels to rounded badge components
- Add proper spacing between multiple backup types (PBS, PVE, SNAP)
- Implement consistent styling across multi-date and single-date views
- Include dark mode support with appropriate color contrasts
- Left-align types column for better visual consistency

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-02 18:20:06 +01:00
courtmanr@gmail.com 3775b4d68a fix: resolve webhook notification timestamp error and improve scroll timing
- Fix RangeError in AlertManager by using correct timestamp fields (triggeredAt/lastUpdate) instead of non-existent alert.timestamp
- Replace Promise.resolve() with requestAnimationFrame() for better scroll position restoration timing

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-02 16:53:49 +01:00
courtmanr@gmail.com 2eec1c32e4 feat: implement consistent backup type filtering across detail card views
- Add comprehensive backup type filtering to detail card when filters are active
- Show only filtered backup types (PBS/PVE/SNAP) instead of all types
- Ensure calendar date selections respect active backup type filters
- Implement three helper functions for different data structures
- Clean up debug logging and improve scroll position handling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-02 16:51:00 +01:00
courtmanr@gmail.com cbd6964ac8 fix: improve backup health monitoring and add comprehensive validation
Enhanced backup health status calculations with more accurate age-based
categorization and improved UI filtering. Added comprehensive backup data
validation test suite and ground truth testing framework.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-02 15:20:59 +01:00
courtmanr@gmail.com 29e90d769d fix: resolve PVE backup detection and cross-cluster guest ID collisions
- Fix PVE backup task classification logic that incorrectly defaulted to PBS when log parsing failed
- Implement proper separation between PVE backups (actual backup files) and snapshots (point-in-time states)
- Add cross-node backup matching within clusters while maintaining cross-cluster isolation
- Resolve duplicate guest display issue caused by identical guest IDs across different Proxmox clusters
- Remove reliance on unparseable job-level backup tasks in favor of actual backup file detection

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-01 23:25:11 +01:00
courtmanr@gmail.com 7ac2eeb869 debug: add logging to auto-update mechanism to troubleshoot download URL issue 2025-06-01 21:51:53 +01:00
courtmanr@gmail.com 7c21d73844 feat: implement webhook notifications for alerts
- Add comprehensive webhook support for Discord, Slack, Teams
- Rich embeds with color-coded severity and inline fields
- Webhook configuration UI with test functionality
- Dual payload format (Discord embeds + Slack attachments)
- Error handling with timeout and proper HTTP responses
- Test webhook endpoint with sample alert data

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-01 21:16:47 +01:00
courtmanr@gmail.com 29889e5e10 feat: implement email notifications for alerts
- Add nodemailer dependency for SMTP email sending
- Implement email notification channel in AlertManager
- Add rich HTML email templates with alert details
- Create email configuration UI in settings page
- Add test email functionality with validation
- Support for multiple recipients and Gmail app passwords
- Addresses feature request in issue #111

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-01 21:03:28 +01:00
courtmanr@gmail.com 1d3fb22e48 fix: resolve custom threshold dropdown validation error
- Client now uses 'auto-detect' placeholder when node can't be determined
- Server handles node auto-detection by looking up VM/LXC in current state
- Fixes 'Please select a VM/LXC from the dropdown first' error in v3.17.3
- Addresses issue #110
2025-06-01 20:51:53 +01:00
courtmanr@gmail.com bd88efc443 feat: make node names clickable in summary cards
Added clickable links to node names in both regular and mobile summary cards.
When a node URL is available, users can now click the node name to open the
node's web interface in a new tab.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 23:50:49 +01:00
courtmanr@gmail.com b58baa9d14 fix: resolve update mechanism issues and add test mode
- Fix download URL property mismatch (downloadUrl vs browser_download_url)
- Add comprehensive error logging for update failures
- Create test mode for update mechanism (UPDATE_TEST_MODE=true)
- Add test script for easy update testing without releases
- Improve restart logic for different deployment environments
- Add tar package dependency for creating update packages
- Update .gitignore to exclude backup and temp directories
- Add documentation for update testing workflow

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 23:38:08 +01:00
courtmanr@gmail.com 8d838bb26e fix: prioritize display names in node link resolution
When custom node names are configured, the dashboard shows display names
but node links were failing because getHostUrl was checking actual node
names first. This fix reorders the lookup to check display names first,
ensuring that custom-named nodes have working links.

- Check display names before actual node names in getHostUrl
- Maintains backward compatibility for non-custom setups
- Fixes issue where clicking custom node names didn't open web interface

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 22:56:56 +01:00
courtmanr@gmail.com 2b2b2680e8 fix: resolve stuck tooltip issue with improved event handling
- Fixed handleMouseOut to properly detect when leaving tooltip triggers
- Added document mouseleave handler to hide tooltips when mouse leaves viewport
- Added scroll event handler to prevent tooltips getting stuck during scrolling
- Improved event handling to prevent premature tooltip hiding from child element bubbling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 22:04:40 +01:00
courtmanr@gmail.com 8aa47a5261 fix: improve node name display and configuration handling
- Add support for custom display names via PROXMOX_NODE_NAME configuration
- Handle multi-node clusters properly by prefixing node names with endpoint name
- Fix dashboard and nodes views to show configured display names
- Fix non-sequential endpoint numbering issue in settings (node_2, node_8, node_14)
- Improve endpoint configuration loading to handle any index number

Fixes #100

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 21:41:01 +01:00
courtmanr@gmail.com 2080d2ccaa fix: remove diagnostics modal icon from UI
- Removed diagnostics icon button from header
- Removed JavaScript code that managed icon visibility
- Removed event listener for diagnostics icon click
- Diagnostics functionality remains available in settings menu

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 21:16:19 +01:00
courtmanr@gmail.com 3bf6d64a80 fix: implement Apply Update functionality in settings
- Store release data when checking for updates
- Use server API for update checks to get Docker status
- Implement proper applyUpdate function with progress tracking
- Handle Docker deployments with appropriate warning message
- Add WebSocket listeners for update progress events
2025-05-31 18:25:51 +01:00
courtmanr@gmail.com 93f9f98e3c fix: prevent PBS host from saving with protocol prefix
- Strip http:// or https:// from PBS_HOST values in settings form
- Update placeholders to show IP/hostname format without protocol
- Fix discovery cycle to trigger for PBS-only configurations
- Resolves issue where PBS data wouldn't load due to malformed host URL

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 18:04:10 +01:00
courtmanr@gmail.com 012825b93b feat: integrate diagnostics into settings menu
- Move diagnostics from standalone page to settings modal tab
- Add Diagnostics tab to settings navigation
- Port all diagnostic functionality to settings UI module
- Update diagnostics button to open settings modal directly
- Remove standalone diagnostics.html page
- Preserve all features: report generation, sanitization, copy/download

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 17:46:19 +01:00
courtmanr@gmail.com 407e1a4f2d fix: resolve custom threshold configuration errors
- Add validation to prevent API calls with missing nodeId/vmid parameters
- Implement proper guest selector initialization for edit modal
- Add server-side error handlers to return JSON instead of HTML for API routes
- Include debug logging for threshold configuration troubleshooting
- Ensure dropdown selection properly populates all required hidden fields

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 11:48:39 +01:00
courtmanr@gmail.com bdf7bc926f feat: consolidate alert functionality into unified Alert Configuration tab
• Merge separate "Alerts" and "Custom Thresholds" tabs into single "Alert Configuration" tab
• Improve UX by organizing all alert settings in one logical location
• Add comprehensive custom per-VM/LXC threshold management system with migration support
• Include blue "T" badges for VMs with custom thresholds in dashboard
• Implement full CRUD operations for threshold configurations via REST API
• Support migration-aware threshold keys (endpointId:vmid) for cluster environments

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 11:32:16 +01:00
courtmanr@gmail.com b097d87465 refactor: improve type safety in guest ID comparisons
Replace loose equality/inequality operators with strict comparisons and proper type conversion for guest vmid matching:

- Use parseInt() with strict equality for all guest ID comparisons
- Prevents type coercion bugs between string and number vmids
- Ensures consistent behavior across different data sources
- Improves reliability in multi-cluster environments

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 09:35:12 +01:00
courtmanr@gmail.com 3de417926e fix: resolve guest identification issues in backups tab
Fixed guest lookup logic to properly handle guests with the same vmid on different nodes by implementing unique guest identification throughout the backup data pipeline:

- Updated guest filtering to use vmid-node combinations instead of simple vmid matching
- Enhanced PBS vs PVE backup system awareness for node-specific vs centralized filtering
- Fixed calendar heatmap data structures to prevent guest data mixing
- Improved calendar date filtering to use unique guest identifiers
- Added node-aware filtering for backup tasks and snapshot detection

This resolves issues where the filtered summary and calendar would incorrectly display or mix data from guests sharing the same vmid across different nodes.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 09:29:47 +01:00
courtmanr@gmail.com 70dc35aa21 fix: resolve sticky column header issue in storage tab
Apply the same sticky header pattern used in dashboard to fix column header
positioning in storage table. Individual header cells are now sticky instead
of relying on row-level sticky positioning.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:33:34 +01:00