Commit Graph

971 Commits

Author SHA1 Message Date
courtmanr@gmail.com d883d85b7b fix: implement persistent Docker volume configuration to prevent data loss
Previously, configuration created via the web UI was lost when containers were
recreated or updated, requiring users to reconfigure each time. This was due to
the .env file being stored inside the container filesystem.

Changes:
- Add persistent volume mount for configuration directory in docker-compose.yml
- Update ConfigApi to auto-detect Docker vs development environment
- Configure dotenv loading to use persistent config path when available
- Update file watcher to monitor correct .env file location
- Remove conflicting host .env file mount
- Update README with new volume configuration instructions

Configuration now persists across container updates, eliminating the need for
users to reconfigure after updates.

Fixes #94

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 10:30:51 +01:00
courtmanr@gmail.com 7249a2dd13 fix: preserve existing credentials when adding additional PVE/PBS endpoints
Previously, adding additional PVE credentials would remove all existing PBS
credentials from the .env file, and vice versa. This was caused by the credential
removal logic not checking if the new configuration actually contained endpoints
of the same type before removing existing ones.

The fix ensures that:
- PBS credentials are preserved when adding additional PVE endpoints
- PVE credentials are preserved when adding additional PBS endpoints
- Existing endpoints are only removed when explicitly managing that endpoint type

Fixes #91

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 10:01:15 +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
courtmanr@gmail.com ac5b90755a chore: release v3.15.1 v3.15.1 2025-05-31 00:14:32 +01:00
courtmanr@gmail.com 142cdf6216 fix: make EnvironmentFile optional in systemd service to prevent startup failures
Changes EnvironmentFile to EnvironmentFile=- in systemd service template, allowing service to start even when .env file doesn't exist during fresh installations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:11:59 +01:00
courtmanr@gmail.com 1004d30ae7 fix: add git repository validation before attempting git operations in installer
Prevents "fatal: not a git repository" error when install script falls back to git update on non-git directories.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-31 00:08:58 +01:00
courtmanr@gmail.com b804acfe2d chore: release v3.15.0 v3.15.0 2025-05-30 23:50:41 +01:00
courtmanr@gmail.com c345014057 fix: update backup filter color scheme for better visual distinction
- Changed PBS filter from green to purple
- Changed PVE filter from yellow to orange
- Changed Snapshots filter from blue to yellow
- Improves accessibility and visual clarity between backup types

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 23:47:56 +01:00
courtmanr@gmail.com 4f678c600e fix: resolve PVE backup visibility issue with hybrid node discovery and filtering fixes
Implements comprehensive solution for GitHub issue #80 where PVE backups stored on local node storage weren't appearing in the backup tab. Adds intelligent node discovery system that creates direct connections to access node-local storage while maintaining backward compatibility with shared storage setups.

Key improvements:
- Hybrid discovery approach with automatic node IP detection and connection caching
- Fixed data structure mismatches and key collision issues for duplicate VMIDs across nodes
- Corrected PVE backup filtering logic in summary cards and calendar views
- Enhanced API token permission documentation for storage content access
- Optimized connection handling with reduced timeouts for faster discovery cycles

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 23:43:56 +01:00
courtmanr@gmail.com ea1842a29e feat: enhance migration logic to automatically fix systemd service paths
- Added fix_service_paths() function to update service files with old paths
- Migration now automatically updates WorkingDirectory and EnvironmentFile in systemd service
- Handles edge cases where migration occurred but service paths weren't updated
- Prevents "Internal Server Error" issues that users might face after migration
- Service is stopped, updated, and restarted during migration for seamless transition

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 22:11:46 +01:00
courtmanr@gmail.com 440744fcb0 fix: update CSS fix script path from /opt/pulse-proxmox to /opt/pulse
- Updated default PULSE_DIR in fix-css.sh to use new installation path
- Ensures CSS fix script works with updated installation location

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 22:08:36 +01:00
courtmanr@gmail.com c40e3d7084 feat: update installation path from /opt/pulse-proxmox to /opt/pulse
- Changed PULSE_DIR from "/opt/pulse-proxmox" to "/opt/pulse" to align with community scripts
- Added automatic migration logic to handle existing installations at old path
- Migration preserves all user configuration and data with backup creation
- Updated remove function to clean up both old and new directories
- Added safety checks and rollback functionality for failed migrations

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 21:51:54 +01:00
courtmanr@gmail.com d48998e611 chore: release v3.14.0 v3.14.0 2025-05-30 18:20:33 +01:00
courtmanr@gmail.com aeed4560cc feat: enhance settings with auto-updates, theme management, and version checking
- Add comprehensive auto-update configuration with scheduling options
- Move theme toggle to settings with Auto/Light/Dark modes and system preference detection
- Implement automatic version checking against GitHub releases with visual status indicators
- Reorganize test connections to be tab-specific (PVE/PBS tabs only)
- Add helpful documentation links for API token creation
- Fix configuration loading by removing incorrect success property check
- Improve settings organization with logical grouping of related features

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 18:14:36 +01:00
courtmanr@gmail.com c1f15baef9 fix: prevent sticky column border transparency during horizontal scroll
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 18:00:29 +01:00
courtmanr@gmail.com 956f44d13a feat: redesign settings menu with tabbed interface for better organization
- Replace single-page settings form with clean tabbed navigation
- Organize settings into logical sections: Proxmox VE, Backup Server, Alerts, System
- Improve visual hierarchy and reduce cognitive load
- Restore comfortable spacing while maintaining app's condensed philosophy
- Preserve all existing functionality with enhanced user experience

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 17:53:08 +01:00
courtmanr@gmail.com f4ae05c00d fix: resolve sticky column border visual artifacts at different resolutions
- Add bottom border to sticky columns in dashboard, PBS, and storage views
- Ensure sticky cells inherit row background colors (failed/running tasks)
- Fix issue where every other row appeared grouped due to missing borders

Fixes #87

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 17:23:13 +01:00
courtmanr@gmail.com 3381981bb8 fix: make update system Docker-aware and prevent container modifications
- Added Docker environment detection to prevent in-place updates
- Show Docker-specific update instructions in UI instead of update button
- Provide proper docker pull commands for Docker users
- Updated README with web-based update documentation
- Ensure Docker container immutability is maintained
2025-05-30 16:35:24 +01:00
courtmanr@gmail.com afa1aef98f feat: add web-based update management system
- Created UpdateManager class for handling application updates
- Added update check, download, and apply functionality
- Integrated update UI into settings modal with progress tracking
- Added version display and update notifications
- Implemented proper backup and rollback mechanism
- Added Docker-aware restart logic
- Enhanced configuration API to include version information
- Added real-time progress updates via WebSocket
2025-05-30 16:31:14 +01:00
courtmanr@gmail.com 468172c5bf fix: ensure settings modal displays all configured PVE/PBS endpoints
- Modified getConfig() to include all additional endpoints from .env file
- Enhanced configuration save to properly clean up removed endpoints
- Improved .env file organization with grouped additional endpoints
- Updated connection testing to validate all configured endpoints
2025-05-30 16:21:01 +01:00
courtmanr@gmail.com e1bc163886 chore: release v3.13.0 v3.13.0 2025-05-30 15:22:48 +01:00
courtmanr@gmail.com 80bd73d2fd docs: update README to reflect web-based configuration system
- Emphasize web interface configuration as primary method
- Simplify installation instructions by removing manual .env setup
- Update Docker Compose example with volume mounting for persistence
- Modernize all setup flows to use settings modal approach
- Maintain environment variables section for advanced users
- Update troubleshooting to reference settings modal
- Align documentation with streamlined user experience

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:19:32 +01:00
courtmanr@gmail.com f624e2e2df feat: update release script to align with web-based configuration
- Remove .env.example from tarball creation (no longer needed)
- Remove .env.example from essential files verification
- Update manual installation instructions to use web interface
- Simplify release process by eliminating manual .env file setup
- Align with new automatic settings modal approach

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:16:49 +01:00
courtmanr@gmail.com e1494418b8 feat: update install script for web-based configuration approach
- Remove automatic .env.example copying that's no longer needed
- Preserve existing .env files to avoid overwriting user configuration
- Update messaging to reflect new web-based setup via settings modal
- Provide clear first-time setup instructions for new installations
- Maintain backward compatibility for existing installations

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:15:29 +01:00
courtmanr@gmail.com 931d3fb183 feat: replace setup screen with automatic settings modal for initial configuration
- Remove redirect to setup.html in favor of always serving main application
- Add automatic detection of placeholder configuration values on page load
- Automatically open settings modal when configuration needs setup
- Provide seamless unified interface for both initial setup and ongoing management
- Eliminate need for separate setup.html page while maintaining full functionality

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:10:27 +01:00
courtmanr@gmail.com d21599bbe6 clean: remove debug logging from configuration API
- Clean up all debug console.log statements from settings system
- Maintain error logging for troubleshooting production issues
- Keep essential reload functionality for additional endpoints
- Finalize comprehensive settings system implementation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 15:04:01 +01:00
courtmanr@gmail.com de339cdac0 debug: add comprehensive logging for configuration reload process
- Add detailed logging for endpoint loading and API client initialization
- Clear environment variables more aggressively during reload
- Add manual verification of additional endpoints in environment
- Help diagnose why additional nodes might require server restart

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 14:39:07 +01:00
courtmanr@gmail.com 3fdca3dd16 fix: improve test connections to use existing token secrets
- Allow testing with existing saved token secrets when not provided in form
- Improve error messages to indicate what fields are missing
- Fall back to existing .env file for token secrets during testing
- Handle both new secrets and existing configuration testing scenarios

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 14:11:23 +01:00
courtmanr@gmail.com 68ed247f3e fix: resolve additional PVE/PBS server functionality in settings
- Fix indexing logic to correctly count existing endpoints
- Add support for loading existing additional endpoints from config
- Implement proper form population for saved additional servers
- Ensure empty state management works correctly
- Fix dynamic endpoint addition and removal functionality

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 14:10:22 +01:00
courtmanr@gmail.com b84f3d8f38 fix: resolve test connections error in settings modal
- Update testConfig function to handle both structured and raw .env formats
- Add proper format detection for configuration testing
- Include validation for required fields before attempting connection
- Add comprehensive logging for debugging test failures
- Ensure test works with new settings form data structure

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 14:08:15 +01:00
courtmanr@gmail.com 7ea29820be improve: clarify settings modal UI for primary vs additional endpoints
- Add descriptive text under section headers to explain purpose
- Change button text from "Add PVE Server" to "Add Another PVE Server"
- Add plus icons to add buttons for better visual clarity
- Include empty state messages in additional server containers
- Improve button tooltips and visual hierarchy
- Add remove endpoint functionality with proper empty state handling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 14:03:10 +01:00
courtmanr@gmail.com 303e4d8d6c fix: resolve undefined property access error in settings modal
- Add safe default structure for configuration properties
- Ensure currentConfig never remains undefined/null
- Always render form even if config loading fails
- Replace unsafe property access with safe variable references
- Prevent "Cannot read properties of undefined (reading 'host')" errors

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 13:56:49 +01:00
courtmanr@gmail.com 1776138ca3 feat: redesign settings as comprehensive modal-based configuration system
- Replace settings tab with settings icon in top-right header
- Implement comprehensive modal interface for ALL .env variables
- Add support for multiple PVE and PBS endpoints with dynamic forms
- Include all service settings (intervals) and alert configuration
- Support both old structured format (setup) and new raw .env format
- Add connection testing and form validation
- Enable complete web-based configuration without SSH access

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 13:49:53 +01:00
courtmanr@gmail.com 0ad1d00e94 feat: add Settings tab for configuration management
- Add Settings tab to main interface with configuration form
- Create settings.js module for handling configuration updates
- Allow editing Proxmox credentials without SSH access
- Support partial updates (keep existing token secret if not provided)
- Integrate settings module into tab system and initialization
- Update server configApi to handle partial configuration updates

Users can now edit their configuration through the web interface after initial setup.
2025-05-30 12:04:33 +01:00
courtmanr@gmail.com f568dd4f72 fix: eliminate dashboard initialization error on first load
- Make updateDashboardTable gracefully handle uninitialized elements
- Try to find elements if not already cached
- Silently return instead of logging error during initial page load

This prevents the 'Dashboard table body or status element not found' error when the socket connection updates arrive before DOM is ready.
2025-05-30 11:57:18 +01:00
courtmanr@gmail.com b684ca9205 fix: improve configuration readiness detection in setup flow
- Add system info to health endpoint including configPlaceholder status
- Update setup page to check correct health properties
- Include hasData and clientsInitialized flags for better readiness detection

This ensures the 'Continue to Pulse' button appears when the server is actually ready with data, not just when it times out.
2025-05-30 11:49:11 +01:00
courtmanr@gmail.com 647cdaa625 fix: ensure API clients are properly reloaded after configuration save
- Make runDiscoveryCycle globally accessible for config reload
- Use global API clients in discovery and metrics cycles
- Trigger discovery cycle after configuration reload
- Fix issue where metrics cycle couldn't find reloaded API clients

This ensures the server properly initializes and starts collecting data after saving configuration through the web interface.
2025-05-30 11:45:08 +01:00
courtmanr@gmail.com d44a0f04d8 fix: remove --env-file flag to allow server start without .env file
The --env-file=.env flag causes Node.js to exit with code 9 when the file doesn't exist.
Using just -r dotenv/config allows the server to start and redirect to the setup wizard.
2025-05-30 11:40:02 +01:00
courtmanr@gmail.com 4ed73d71d0 feat: improve setup flow with health check and Continue button
- Add health endpoint polling after configuration save
- Show progress messages and loading spinner during initialization
- Display 'Continue to Pulse' button when server is ready
- Add explicit /setup.html route handler
- Improve error handling and logging in configApi
- Prevent form submission on button clicks
- Add percentage progress indicator during setup

This provides better user feedback during the configuration process and ensures users don't navigate to the dashboard before the server is ready.
2025-05-30 11:35:40 +01:00
courtmanr@gmail.com 2d51671c5f fix: initialize PulseApp before using theme on setup page
- Create PulseApp object before loading theme.js
- Add safety check before calling theme.init()
- This fixes "PulseApp is not defined" error on setup page

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 11:16:05 +01:00
courtmanr@gmail.com a3d9cb7f53 fix: prevent browser autofill issues on setup form
- Add autocomplete="off" to form and text inputs
- Add autocomplete="new-password" to password fields
- Add debug logging to see what's being saved
- This prevents browser from auto-filling URL into token secret field

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 11:14:37 +01:00
courtmanr@gmail.com fcb075cbe5 fix: restore complete configApi.js with all features
- Restore advanced settings handling in getConfig and saveConfig
- Include self-signed certificate settings
- Add PBS node name support
- Fix alert configuration saving
- Restore global lastReloadTime update to prevent double reloads
- This fixes the .env file creation and configuration saving

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 11:06:35 +01:00
courtmanr@gmail.com 2eae7400bf fix: correct test connection success message
- Make success message text dynamic instead of hardcoded
- Test connection now shows "Connection test successful\!"
- Save configuration still shows "Configuration saved. Redirecting..."
- Prevents confusion when testing connection

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 11:01:16 +01:00
courtmanr@gmail.com 3e12a572ba fix: resolve configuration save and redirect issues
- Use current state for configuration status check in root route
- Prevent double reload when saving config through API
- Track reload times globally to avoid file watcher conflicts
- This fixes the issue where setup page doesn't redirect after save

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 10:57:57 +01:00
courtmanr@gmail.com ae665fc0a4 feat: add comprehensive configuration options to setup page
- Add advanced settings section with all .env.example options
- Include metric/discovery intervals configuration
- Add alert system configuration (enabled/thresholds)
- Add PBS node name field (required for non-Sys.Audit tokens)
- Update config API to handle all settings
- Group settings logically in generated .env file
- Load and save all configuration options properly

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 10:53:51 +01:00
courtmanr@gmail.com 85a1f2ccbe fix: handle self-signed SSL certificates in configuration
- Add allowSelfSignedCerts flag to test configuration endpoints
- Automatically set ALLOW_SELF_SIGNED_CERT=true when saving config
- Include self-signed cert settings in environment variable groups
- This fixes SSL certificate verification errors with Proxmox servers

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 10:48:57 +01:00
courtmanr@gmail.com 49eb3628e5 fix: correct API client initialization for test connection
- Fix apiClients object access (use bracket notation, not .get())
- Initialize apiClients as plain objects, not Maps, for consistency
- This fixes the "apiClients.get is not a function" error when testing connections

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 10:45:52 +01:00
courtmanr@gmail.com 8a4ef723db fix: allow server to start without configuration
- Change configuration loader to warn instead of throwing error when config is missing
- Allow server to start in setup mode with empty endpoints
- Skip API client initialization when no endpoints are configured
- This enables the web-based setup flow to work properly

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-30 10:40:52 +01:00