feat: premium tier features — auto-backup scheduling, resource alerting, bundled workflows, one-click revert, notification manager

This commit is contained in:
Hermes
2026-05-27 23:39:46 -07:00
parent 6ce0a18f98
commit 11823a1466
19 changed files with 3686 additions and 407 deletions
+36 -1
View File
@@ -67,9 +67,35 @@ process.on('uncaughtException', (error) => {
const portLockManager = require('./port-lock-manager');
// Optional modules
let dockerMaintenance, logDigest;
let dockerMaintenance, logDigest, bundledWorkflows;
try { dockerMaintenance = require('./docker-maintenance'); } catch { /* optional */ }
try { logDigest = require('./log-digest'); } catch { /* optional */ }
try { bundledWorkflows = require('./bundled-workflows'); } catch { /* optional */ }
// Initialize workflow engine if bundled-workflows is available
let workflowEngine = null;
if (bundledWorkflows) {
try {
const { WorkflowEngine } = bundledWorkflows;
// Create a context with needed services
const workflowCtx = {
docker: { client: require('dockerode')() },
notification: require('./notification-manager')({
NOTIFICATIONS_FILE: process.env.NOTIFICATIONS_FILE || require('./platform-paths').notificationsFile,
fetchT,
log,
config
}),
backupManager,
resourceMonitor,
servicesStateManager
};
workflowEngine = new WorkflowEngine(workflowCtx);
log.info('server', 'Workflow engine initialized');
} catch (err) {
log.error('server', 'Workflow engine failed to initialize', { error: err.message });
}
}
log.info('server', 'Starting feature modules');
@@ -81,6 +107,10 @@ process.on('uncaughtException', (error) => {
// Resource monitoring
try {
resourceMonitor.start();
// Connect workflow engine to resource monitor for resource-alert events
if (workflowEngine) {
resourceMonitor.setWorkflowEngine(workflowEngine);
}
log.info('server', 'Resource monitoring started');
} catch (err) {
log.error('server', 'Resource monitoring failed to start', { error: err.message });
@@ -94,6 +124,11 @@ process.on('uncaughtException', (error) => {
log.error('server', 'Backup manager failed to start', { error: err.message });
}
// Connect workflow engine to update manager for pre-update events
if (workflowEngine) {
updateManager.setWorkflowEngine(workflowEngine);
}
// Health checker (with service sync)
(async () => {
try {