feat: Add comprehensive auto-sync functionality
✨ New Features: - Auto-sync service with configurable intervals (15min, 30min, 1hour, 6hours, 12hours, 24hours, custom cron) - Automatic JSON file synchronization from GitHub repositories - Auto-download new scripts when JSON files are updated - Auto-update existing scripts when newer versions are available - Apprise notification service integration for sync status updates - Comprehensive error handling and logging 🔧 Technical Implementation: - AutoSyncService: Core scheduling and execution logic - GitHubJsonService: Handles JSON file synchronization from GitHub - AppriseService: Sends notifications via multiple channels (Discord, Telegram, Email, Slack, etc.) - ScriptDownloaderService: Manages automatic script downloads and updates - Settings API: RESTful endpoints for auto-sync configuration - UI Integration: Settings modal with auto-sync configuration options 📋 Configuration Options: - Enable/disable auto-sync functionality - Flexible scheduling (predefined intervals or custom cron expressions) - Selective script processing (new downloads, updates, or both) - Notification settings with multiple Apprise URL support - Environment-based configuration with .env file persistence 🎯 Benefits: - Keeps script repository automatically synchronized - Reduces manual maintenance overhead - Provides real-time notifications of sync status - Supports multiple notification channels - Configurable to match different deployment needs This feature significantly enhances the automation capabilities of PVE Scripts Local, making it a truly hands-off solution for script management.
This commit is contained in:
65
src/server/lib/autoSyncInit.js
Normal file
65
src/server/lib/autoSyncInit.js
Normal file
@@ -0,0 +1,65 @@
|
||||
import { AutoSyncService } from '../services/autoSyncService.js';
|
||||
|
||||
let autoSyncService = null;
|
||||
|
||||
/**
|
||||
* Initialize auto-sync service and schedule cron job if enabled
|
||||
*/
|
||||
export function initializeAutoSync() {
|
||||
try {
|
||||
console.log('Initializing auto-sync service...');
|
||||
autoSyncService = new AutoSyncService();
|
||||
|
||||
// Load settings and schedule if enabled
|
||||
const settings = autoSyncService.loadSettings();
|
||||
|
||||
if (settings.autoSyncEnabled) {
|
||||
console.log('Auto-sync is enabled, scheduling cron job...');
|
||||
autoSyncService.scheduleAutoSync();
|
||||
} else {
|
||||
console.log('Auto-sync is disabled');
|
||||
}
|
||||
|
||||
console.log('Auto-sync service initialized successfully');
|
||||
} catch (error) {
|
||||
console.error('Failed to initialize auto-sync service:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop auto-sync service and clean up cron jobs
|
||||
*/
|
||||
export function stopAutoSync() {
|
||||
try {
|
||||
if (autoSyncService) {
|
||||
console.log('Stopping auto-sync service...');
|
||||
autoSyncService.stopAutoSync();
|
||||
autoSyncService = null;
|
||||
console.log('Auto-sync service stopped');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error stopping auto-sync service:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the auto-sync service instance
|
||||
*/
|
||||
export function getAutoSyncService() {
|
||||
return autoSyncService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Graceful shutdown handler
|
||||
*/
|
||||
export function setupGracefulShutdown() {
|
||||
const shutdown = (signal) => {
|
||||
console.log(`Received ${signal}, shutting down gracefully...`);
|
||||
stopAutoSync();
|
||||
process.exit(0);
|
||||
};
|
||||
|
||||
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
||||
process.on('SIGINT', () => shutdown('SIGINT'));
|
||||
process.on('SIGUSR2', () => shutdown('SIGUSR2')); // For nodemon
|
||||
}
|
||||
Reference in New Issue
Block a user