6.9 KiB
Progress Tracking and System Status Enhancement Guide
This document describes the improvements made to the ZitiNexus Router Enrollment UI to fix progress tracking and system status checking issues.
🔧 Issues Fixed
Issue 1: Progress UI Always Shows "Initializing"
Problem: The enrollment progress UI would always show "Initializing" throughout the entire enrollment process, providing no real-time feedback to users.
Root Cause: The original implementation used a single synchronous AJAX call that waited for the entire enrollment to complete before returning results. No progress streaming mechanism existed.
Solution: Implemented real-time progress tracking using AJAX polling:
- Progress data is stored in PHP sessions during enrollment
- JavaScript polls a progress endpoint every 500ms
- UI updates in real-time showing current step, percentage, and logs
Issue 2: System Status Not Actively Checking After Enrollment
Problem: System status would show outdated information, especially after package removal/purge operations. The status checking was not thorough enough.
Root Cause:
- Status checking only verified if commands existed, not if packages were properly installed
- No real-time verification of package installation status
- Cache issues prevented fresh status checks
Solution: Enhanced system status checking:
- Added package detection via
dpkgcommands - Implemented real-time status refresh functionality
- Better certificate checking using sudo for root-owned files
- Force refresh capabilities to clear caches
🚀 New Features
Real-Time Progress Tracking
Files Added/Modified:
UI/progress.php- Progress polling endpointUI/public/progress.php- Public directory versionUI/includes/enrollment.php- Enhanced with session-based progress trackingUI/public/assets/js/app.js- Added AJAX polling functionalityUI/dashboard.php- Added progress management endpoints
How It Works:
- Enrollment Start: Progress is initialized in PHP session
- Progress Updates: Each enrollment step updates session data
- AJAX Polling: JavaScript polls progress endpoint every 500ms
- UI Updates: Progress bar, steps, and logs update in real-time
- Completion: Polling stops when enrollment completes or fails
Progress Data Structure:
$_SESSION['enrollment_progress'] = [
'step' => 'CURRENT_STEP', // Current step name
'message' => 'Step description', // Current step message
'percentage' => 50, // Progress percentage (0-100)
'completed_steps' => ['INIT', ...], // Array of completed steps
'current_step_index' => 4, // Current step index
'status' => 'running', // ready, running, completed, error
'error' => null, // Error message if failed
'logs' => [ // Array of log entries
[
'timestamp' => '12:34:56',
'step' => 'INSTALL',
'message' => 'Installing...',
'type' => 'info'
]
]
];
Enhanced System Status Checking
New Methods Added:
checkZitiInstallation()- Comprehensive package and command checkingcheckServiceStatus()- Thorough service status verificationcheckCertificatesExist()- Sudo-based certificate checkingrefreshSystemStatus()- Force refresh with cache clearing
Enhanced Status Data:
$status = [
'hostname' => 'server-name',
'ziti_status' => 'installed', // installed, not_installed, broken
'ziti_version' => 'v1.5.4',
'service_active' => true,
'config_exists' => true,
'certificates_exist' => true,
'package_installed' => true, // NEW: dpkg package check
'last_checked' => 1640995200 // NEW: timestamp
];
📋 API Endpoints
Progress Tracking
GET /progress.php- Get current enrollment progressGET /dashboard.php?action=clear_progress- Clear progress data
System Status
GET /dashboard.php?action=get_status- Get current system statusGET /dashboard.php?action=refresh_status- Force refresh system status
🎯 User Experience Improvements
Before:
- ❌ Progress always showed "Initializing"
- ❌ No real-time feedback during enrollment
- ❌ System status could show stale data
- ❌ No way to force refresh status
After:
- ✅ Real-time progress updates every 500ms
- ✅ Visual progress bar and step indicators
- ✅ Live log streaming during enrollment
- ✅ Enhanced system status with package verification
- ✅ Force refresh button for system status
- ✅ Better error handling and user feedback
🔍 Technical Implementation Details
Progress Polling Architecture:
User clicks "Start Enrollment"
↓
JavaScript starts AJAX polling (500ms interval)
↓
PHP enrollment process updates session progress
↓
JavaScript fetches progress and updates UI
↓
Process continues until completion/error
↓
Polling stops automatically
System Status Enhancement:
User clicks "Refresh Status"
↓
JavaScript calls refresh_status endpoint
↓
PHP clears caches and runs comprehensive checks
↓
Enhanced status data returned to UI
↓
UI updates with fresh system information
🛠️ Maintenance Notes
Session Management:
- Progress data is automatically cleaned up after completion
- Session data is limited to last 50 log entries to prevent memory issues
- Progress can be manually cleared via API endpoint
Performance Considerations:
- Polling interval is 500ms (configurable)
- Polling automatically stops when not needed
- System status auto-refreshes every 30 seconds (when not enrolling)
Error Handling:
- Progress polling continues even if individual requests fail
- System status gracefully handles command failures
- User feedback provided for all error conditions
🔧 Configuration Options
JavaScript Polling Interval:
// In app.js, modify this value to change polling frequency
this.progressPollingInterval = setInterval(async () => {
// ... polling logic
}, 500); // 500ms = 0.5 seconds
Session Progress Cleanup:
// In enrollment.php, modify log retention
if (count($progress['logs']) > 50) {
$progress['logs'] = array_slice($progress['logs'], -50);
}
🎉 Benefits
- Better User Experience: Users now see real-time progress instead of waiting blindly
- Accurate System Status: Enhanced checking provides reliable system state information
- Improved Debugging: Live logs help identify issues during enrollment
- Professional Feel: Progress indicators make the system feel more responsive
- Reliability: Better error handling and status verification improve overall reliability
This enhancement transforms the enrollment experience from a "black box" operation to a transparent, user-friendly process with real-time feedback and accurate system monitoring.