@plutonhq/core-backend 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/BackupController.d.ts +1 -0
- package/dist/controllers/BackupController.d.ts.map +1 -1
- package/dist/controllers/BackupController.js +1 -1
- package/dist/controllers/BackupController.js.map +1 -1
- package/dist/controllers/PlanController.d.ts +1 -0
- package/dist/controllers/PlanController.d.ts.map +1 -1
- package/dist/controllers/PlanController.js +1 -1
- package/dist/controllers/PlanController.js.map +1 -1
- package/dist/controllers/RestoreController.d.ts.map +1 -1
- package/dist/controllers/RestoreController.js +1 -1
- package/dist/controllers/RestoreController.js.map +1 -1
- package/dist/controllers/StorageController.d.ts.map +1 -1
- package/dist/controllers/StorageController.js +1 -1
- package/dist/controllers/StorageController.js.map +1 -1
- package/dist/createApp.d.ts.map +1 -1
- package/dist/createApp.js +1 -1
- package/dist/createApp.js.map +1 -1
- package/dist/db/index.d.ts +19 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/schema/backups.d.ts +77 -1
- package/dist/db/schema/backups.d.ts.map +1 -1
- package/dist/db/schema/backups.js +1 -1
- package/dist/db/schema/backups.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/JobProcessor.d.ts.map +1 -1
- package/dist/jobs/JobProcessor.js +1 -1
- package/dist/jobs/JobProcessor.js.map +1 -1
- package/dist/jobs/tasks/ReplicationRetryTask.d.ts +10 -0
- package/dist/jobs/tasks/ReplicationRetryTask.d.ts.map +1 -0
- package/dist/jobs/tasks/ReplicationRetryTask.js +1 -0
- package/dist/jobs/tasks/ReplicationRetryTask.js.map +1 -0
- package/dist/managers/BaseBackupManager.d.ts +31 -2
- package/dist/managers/BaseBackupManager.d.ts.map +1 -1
- package/dist/managers/BaseBackupManager.js +1 -1
- package/dist/managers/BaseBackupManager.js.map +1 -1
- package/dist/managers/BaseSnapshotManager.d.ts +21 -4
- package/dist/managers/BaseSnapshotManager.d.ts.map +1 -1
- package/dist/managers/BaseSnapshotManager.js +1 -1
- package/dist/managers/BaseSnapshotManager.js.map +1 -1
- package/dist/managers/ProgressManager.d.ts +28 -0
- package/dist/managers/ProgressManager.d.ts.map +1 -1
- package/dist/managers/ProgressManager.js +1 -1
- package/dist/managers/ProgressManager.js.map +1 -1
- package/dist/managers/handlers/BackupHandler.d.ts +8 -0
- package/dist/managers/handlers/BackupHandler.d.ts.map +1 -1
- package/dist/managers/handlers/BackupHandler.js +1 -1
- package/dist/managers/handlers/BackupHandler.js.map +1 -1
- package/dist/managers/handlers/DownloadHandler.d.ts.map +1 -1
- package/dist/managers/handlers/DownloadHandler.js +1 -1
- package/dist/managers/handlers/DownloadHandler.js.map +1 -1
- package/dist/managers/handlers/ReplicationHandler.d.ts +34 -0
- package/dist/managers/handlers/ReplicationHandler.d.ts.map +1 -0
- package/dist/managers/handlers/ReplicationHandler.js +1 -0
- package/dist/managers/handlers/ReplicationHandler.js.map +1 -0
- package/dist/managers/handlers/ReplicationOrchestrator.d.ts +50 -0
- package/dist/managers/handlers/ReplicationOrchestrator.d.ts.map +1 -0
- package/dist/managers/handlers/ReplicationOrchestrator.js +1 -0
- package/dist/managers/handlers/ReplicationOrchestrator.js.map +1 -0
- package/dist/middlewares/versionMiddleware.d.ts.map +1 -1
- package/dist/middlewares/versionMiddleware.js +1 -1
- package/dist/middlewares/versionMiddleware.js.map +1 -1
- package/dist/notifications/BackupNotification.d.ts +6 -3
- package/dist/notifications/BackupNotification.d.ts.map +1 -1
- package/dist/notifications/BackupNotification.js +1 -1
- package/dist/notifications/BackupNotification.js.map +1 -1
- package/dist/notifications/channels/NotificationChannelResolver.d.ts.map +1 -1
- package/dist/notifications/channels/NotificationChannelResolver.js.map +1 -1
- package/dist/notifications/templates/email/backup/BackupFailedNotification.d.ts.map +1 -1
- package/dist/notifications/templates/email/backup/BackupFailedNotification.ejs +9 -4
- package/dist/notifications/templates/email/backup/BackupFailedNotification.js +1 -1
- package/dist/notifications/templates/email/backup/BackupFailedNotification.js.map +1 -1
- package/dist/notifications/templates/email/backup/BackupStartedNotification.d.ts.map +1 -1
- package/dist/notifications/templates/email/backup/BackupStartedNotification.ejs +9 -4
- package/dist/notifications/templates/email/backup/BackupStartedNotification.js +1 -1
- package/dist/notifications/templates/email/backup/BackupStartedNotification.js.map +1 -1
- package/dist/notifications/templates/email/backup/BackupSuccessNotification.d.ts +2 -1
- package/dist/notifications/templates/email/backup/BackupSuccessNotification.d.ts.map +1 -1
- package/dist/notifications/templates/email/backup/BackupSuccessNotification.ejs +52 -4
- package/dist/notifications/templates/email/backup/BackupSuccessNotification.js +1 -1
- package/dist/notifications/templates/email/backup/BackupSuccessNotification.js.map +1 -1
- package/dist/notifications/templates/email/backup/ReplicationFailedNotification.d.ts +24 -0
- package/dist/notifications/templates/email/backup/ReplicationFailedNotification.d.ts.map +1 -0
- package/dist/notifications/templates/email/backup/ReplicationFailedNotification.ejs +105 -0
- package/dist/notifications/templates/email/backup/ReplicationFailedNotification.js +1 -0
- package/dist/notifications/templates/email/backup/ReplicationFailedNotification.js.map +1 -0
- package/dist/routes/backups.d.ts.map +1 -1
- package/dist/routes/backups.js +1 -1
- package/dist/routes/backups.js.map +1 -1
- package/dist/routes/plans.d.ts.map +1 -1
- package/dist/routes/plans.js +1 -1
- package/dist/routes/plans.js.map +1 -1
- package/dist/services/BackupServices.d.ts +14 -5
- package/dist/services/BackupServices.d.ts.map +1 -1
- package/dist/services/BackupServices.js +1 -1
- package/dist/services/BackupServices.js.map +1 -1
- package/dist/services/DeviceService.d.ts +6 -0
- package/dist/services/DeviceService.d.ts.map +1 -1
- package/dist/services/DeviceService.js +1 -1
- package/dist/services/DeviceService.js.map +1 -1
- package/dist/services/PlanService.d.ts +12 -0
- package/dist/services/PlanService.d.ts.map +1 -1
- package/dist/services/PlanService.js +1 -1
- package/dist/services/PlanService.js.map +1 -1
- package/dist/services/RestoreService.d.ts +2 -2
- package/dist/services/RestoreService.d.ts.map +1 -1
- package/dist/services/RestoreService.js +1 -1
- package/dist/services/RestoreService.js.map +1 -1
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +1 -1
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/events/BackupEventService.d.ts +11 -0
- package/dist/services/events/BackupEventService.d.ts.map +1 -1
- package/dist/services/events/BackupEventService.js +1 -1
- package/dist/services/events/BackupEventService.js.map +1 -1
- package/dist/services/events/ReplicationEventService.d.ts +33 -0
- package/dist/services/events/ReplicationEventService.d.ts.map +1 -0
- package/dist/services/events/ReplicationEventService.js +1 -0
- package/dist/services/events/ReplicationEventService.js.map +1 -0
- package/dist/services/listeners/BackupEventListener.d.ts +3 -1
- package/dist/services/listeners/BackupEventListener.d.ts.map +1 -1
- package/dist/services/listeners/BackupEventListener.js +1 -1
- package/dist/services/listeners/BackupEventListener.js.map +1 -1
- package/dist/services/listeners/ReplicationEventListener.d.ts +30 -0
- package/dist/services/listeners/ReplicationEventListener.d.ts.map +1 -0
- package/dist/services/listeners/ReplicationEventListener.js +1 -0
- package/dist/services/listeners/ReplicationEventListener.js.map +1 -0
- package/dist/stores/BackupStore.d.ts +8 -0
- package/dist/stores/BackupStore.d.ts.map +1 -1
- package/dist/stores/BackupStore.js +1 -1
- package/dist/stores/BackupStore.js.map +1 -1
- package/dist/stores/DeviceStore.d.ts +6 -0
- package/dist/stores/DeviceStore.d.ts.map +1 -1
- package/dist/stores/DeviceStore.js +1 -1
- package/dist/stores/DeviceStore.js.map +1 -1
- package/dist/stores/PlanStore.d.ts +3 -1
- package/dist/stores/PlanStore.d.ts.map +1 -1
- package/dist/stores/PlanStore.js +1 -1
- package/dist/stores/PlanStore.js.map +1 -1
- package/dist/stores/StorageStore.d.ts +10 -0
- package/dist/stores/StorageStore.d.ts.map +1 -1
- package/dist/stores/StorageStore.js +1 -1
- package/dist/stores/StorageStore.js.map +1 -1
- package/dist/strategies/backup/BackupStrategy.d.ts +20 -2
- package/dist/strategies/backup/BackupStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/LocalStrategy.d.ts +20 -2
- package/dist/strategies/backup/LocalStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/LocalStrategy.js +1 -1
- package/dist/strategies/backup/LocalStrategy.js.map +1 -1
- package/dist/strategies/backup/RemoteStrategy.d.ts +9 -2
- package/dist/strategies/backup/RemoteStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/RemoteStrategy.js +1 -1
- package/dist/strategies/backup/RemoteStrategy.js.map +1 -1
- package/dist/strategies/snapshot/LocalStrategy.d.ts +20 -4
- package/dist/strategies/snapshot/LocalStrategy.d.ts.map +1 -1
- package/dist/strategies/snapshot/LocalStrategy.js +1 -1
- package/dist/strategies/snapshot/LocalStrategy.js.map +1 -1
- package/dist/strategies/snapshot/RemoteStrategy.d.ts +4 -1
- package/dist/strategies/snapshot/RemoteStrategy.d.ts.map +1 -1
- package/dist/strategies/snapshot/RemoteStrategy.js +1 -1
- package/dist/strategies/snapshot/RemoteStrategy.js.map +1 -1
- package/dist/strategies/snapshot/SnapshotStrategy.d.ts +20 -4
- package/dist/strategies/snapshot/SnapshotStrategy.d.ts.map +1 -1
- package/dist/types/backups.d.ts +24 -0
- package/dist/types/backups.d.ts.map +1 -1
- package/dist/types/events.d.ts +110 -0
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/plans.d.ts +23 -2
- package/dist/types/plans.d.ts.map +1 -1
- package/dist/types/restores.d.ts +2 -0
- package/dist/types/restores.d.ts.map +1 -1
- package/dist/utils/restic/restic.d.ts.map +1 -1
- package/dist/utils/restic/restic.js +1 -1
- package/dist/utils/restic/restic.js.map +1 -1
- package/dist/utils/sanitizeStoragePath.d.ts +5 -1
- package/dist/utils/sanitizeStoragePath.d.ts.map +1 -1
- package/dist/utils/sanitizeStoragePath.js +1 -1
- package/dist/utils/sanitizeStoragePath.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import os from"os";import fs from"fs";import{getBackupPlanStats,runResticCommand}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{processManager}from"../ProcessManager";import{PruneHandler}from"./PruneHandler";import{ProgressManager}from"../ProgressManager";import{appPaths}from"../../utils/AppPaths";import{runScriptsForEvent}from"../../utils/executeUserScript";import{configService}from"../../services/ConfigService";export class BackupHandler{emitter;runningBackups=new Set;cancelledBackups=new Set;progressManager;constructor(emitter){this.emitter=emitter,this.progressManager=new ProgressManager(appPaths.getProgressDir()),this.initializeProgressManager()}async initializeProgressManager(){try{await this.progressManager.initialize()}catch(error){}}async execute(planId,backupId,options,retryInfo){if(this.runningBackups.has(planId))throw new Error(`Backup is already in progress for plan: ${planId}`);this.runningBackups.add(planId);try{await this.progressManager.initializeProgress(planId,backupId,retryInfo)}catch(error){}retryInfo.attempts>0&&await this.updateProgress(planId,backupId,"pre-backup",`RETRY_ATTEMPT_${retryInfo.attempts}_OF_${retryInfo.maxAttempts}_START`,!1);try{const resticArgsAndEnv=this.createResticBackupArgs(planId,options);if(await this.preBackupPhase(planId,backupId,options,resticArgsAndEnv),this.cancelledBackups.has(planId))throw new Error("BACKUP_CANCELLED: Backup was cancelled");const result=await this.executeBackupPhase(planId,backupId,options,resticArgsAndEnv);if(this.cancelledBackups.has(planId))throw new Error("BACKUP_CANCELLED: Backup was cancelled");return await this.postBackupPhase(planId,backupId,options),await this.progressManager.markCompleted(planId,backupId,!0),await this.afterBackup(planId,backupId,options),result}catch(error){const errorMessage=error instanceof Error?error.message:"Unknown execution error";if(errorMessage.startsWith("BACKUP_CANCELLED:"))return"";const permanentlyFailed=retryInfo.attempts+1>retryInfo.maxAttempts;throw await this.progressManager.markCompleted(planId,backupId,!1,errorMessage,permanentlyFailed),permanentlyFailed||await this.updateProgress(planId,backupId,"retry",`BACKUP_RETRY_${retryInfo.attempts+1}_OF_${retryInfo.maxAttempts}_SCHEDULED`,!1),this.emitter.emit("backup_error",{planId:planId,backupId:backupId,error:errorMessage}),permanentlyFailed?(await this.afterBackupFailure(planId,backupId,options),await this.afterBackup(planId,backupId,options)):await this.afterBackupError(planId,backupId,options),new Error(errorMessage)}finally{this.runningBackups.delete(planId),this.cancelledBackups.delete(planId)}}async preBackupPhase(planId,backupId,options,resticArgsAndEnv){let dryRunSummary;await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_START",!1),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_START",!1);try{dryRunSummary=await this.dryRunBackup(planId,options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_COMPLETE",!0)}catch(error){const errMsg=error?.message||"Unknown Error";throw await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_ERROR",!1,errMsg),error}this.emitter.emit("backup_start",{planId:options.id,backupId:backupId,summary:dryRunSummary}),await this.waitForBackupCreation(planId,backupId),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_CHECKS_START",!1),await this.canRun(options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_CHECKS_COMPLETE",!0),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_SCRIPTS_START",!1),await this.beforeBackup(planId,backupId,options),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_SCRIPTS_COMPLETE",!0),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_UNLOCK_STALE_LOCKS",!1),await this.unlockStaleLocks(planId,options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_COMPLETE",!0)}async executeBackupPhase(planId,backupId,options,resticArgsAndEnv){await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_START",!1);const repoPassword=options.settings.encryption?configService.config.ENCRYPTION_KEY:"",handlers=this.createHandlers(planId,backupId),{resticArgs:resticArgs,resticEnv:resticEnv}=resticArgsAndEnv,resticArgsWithBackupTag=[...resticArgs,"--tag",`backup-${backupId}`];try{const result=await runResticCommand(resticArgsWithBackupTag,{RESTIC_PASSWORD:repoPassword,...resticEnv},handlers.onProgress,handlers.onError,handlers.onComplete,process=>processManager.trackProcess("backup-"+backupId,process));return this.cancelledBackups.has(planId)||await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_COMPLETE",!0),result}catch(error){const errMsg=error?.message||"Unknown Error";throw await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_ERROR",!0,errMsg),error}}async postBackupPhase(planId,backupId,options){await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_START",!1),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_SCRIPTS_START",!1),await this.afterBackupSuccess(planId,backupId,options),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_SCRIPTS_COMPLETE",!0),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_START",!1);try{const pruneHandler=new PruneHandler(this.emitter);await pruneHandler.prune(planId,options),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_COMPLETE",!0)}catch(error){const errorMsg=error?.message||"Unknown Error";await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_FAILED",!0,errorMsg)}await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_START",!1);try{const planStats=await getBackupPlanStats(planId,options.storage.name,options.storagePath,options.settings.encryption);this.emitter.emit("backup_stats_update",{planId:planId,backupId:backupId,...planStats||{}}),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_COMPLETE",!0)}catch(error){const errMsg=error?.message||"Unknown Error";this.emitter.emit("backup_stats_update",{planId:planId,backupId:backupId,error:errMsg}),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_FAILED",!0,errMsg)}await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_COMPLETE",!0)}async updateProgress(planId,backupId,phase,action,completed,error){try{await this.progressManager.updateAction(planId,backupId,phase,action,completed,error)}catch(error){}}waitForBackupCreation(planId,backupId){return new Promise((resolve,reject)=>{const timeout=setTimeout(()=>{this.emitter.removeListener("backup_created",onBackupCreated),reject(new Error(`Timeout: Did not receive backup_created confirmation for ID: ${backupId}`))},3e4),onBackupCreated=data=>{data.backupId===backupId&&data.planId===planId&&(clearTimeout(timeout),this.emitter.removeListener("backup_created",onBackupCreated),resolve())};this.emitter.on("backup_created",onBackupCreated)})}async unlockStaleLocks(planId,options,resticArgsAndEnv){if(options.storage&&options.storagePath)try{const repoPath=generateResticRepoPath(options.storage.name,options.storagePath||""),repoPassword=options.settings.encryption?configService.config.ENCRYPTION_KEY:"";await runResticCommand(["unlock","-r",repoPath],{...resticArgsAndEnv.resticEnv,RESTIC_PASSWORD:repoPassword})}catch(error){}}async canRun(options,resticArgsAndEnv){if(os.freemem()<134217728)throw new Error("Insufficient memory to perform backup.");if(options.settings.encryption&&!configService.config.ENCRYPTION_KEY)throw new Error("Encryption enabled but ENCRYPTION_KEY not found.");if(options.sourceConfig?.includes){const pathsNotFound=[];for(const path of options.sourceConfig.includes)try{await fs.promises.access(path,fs.constants.R_OK)}catch(error){pathsNotFound.push(path)}if(pathsNotFound.length>0)throw new Error(`Source paths not accessible: ${pathsNotFound.join(", ")}.`)}return!0}async cancel(planId,backupId){this.cancelledBackups.add(planId),await this.progressManager.markCompleted(planId,backupId,!1,"Backup was cancelled by user",!0);try{processManager.killProcess("backup-"+backupId);return!0}catch(error){return!1}}createHandlers(planId,backupId){return{onProgress:data=>{const progressLine=data.toString().trim();this.updateResticProgress(planId,backupId,progressLine);try{const progressData=JSON.parse(progressLine);this.emitter.emit("backup_progress",{planId:planId,backupId:backupId,data:progressData})}catch(error){}},onError:data=>{this.emitter.emit("backup_error",{planId:planId,backupId:backupId,error:data.toString()})},onComplete:async code=>{const progressData=await this.progressManager.getResticProgress(planId,backupId);this.emitter.emit("backup_complete",{planId:planId,backupId:backupId,success:0===code,summary:progressData})}}}async updateResticProgress(planId,backupId,resticLine){try{await this.progressManager.updateResticProgress(planId,backupId,resticLine)}catch(error){}}async dryRunBackup(planId,options,resticArgsAndEnv){const{resticArgs:resticArgs,resticEnv:resticEnv}=resticArgsAndEnv,dryRunArgs=[...resticArgs,"--dry-run"],dryRunEnv={...resticEnv,RESTIC_PASSWORD:options.settings.encryption?configService.config.ENCRYPTION_KEY:""};"rescue"===options.method&&dryRunArgs.push("--one-file-system");try{const outputLines=(await runResticCommand(dryRunArgs,dryRunEnv)).split("\n"),summaryLine=outputLines[outputLines.length-1];return JSON.parse(summaryLine)}catch(error){throw new Error(`Dry run failed: ${error.message}`)}}createResticBackupArgs=(planId,options)=>{const{sourceConfig:sourceConfig,storagePath:storagePath,storage:storage}=options,{compression:compression,performance:performance,encryption:encryption}=options.settings,resticArgs=["backup"],resticEnv={};if(sourceConfig?.includes&&sourceConfig.includes.forEach(inPath=>{const pathSlice=inPath.slice(0,3);if(!inPath.startsWith("-")){const pathName="ip#"===pathSlice?inPath.replace("ip#",""):inPath;resticArgs.push(pathName)}}),sourceConfig?.excludes&&sourceConfig.excludes.forEach(exPath=>{const pathSlice=exPath.slice(0,3);if(!exPath.startsWith("-")){const xpathName="ep#"===pathSlice?exPath.replace("ep#",""):exPath;resticArgs.push("--exclude",xpathName)}}),storage.name){const repoPath=generateResticRepoPath(storage.name,storagePath||"");resticArgs.push("-r",repoPath)}return compression&&resticArgs.push("--compression","auto"),performance&&(performance.maxProcessor&&(resticEnv.GOMAXPROCS=performance.maxProcessor.toString()),performance.packSize&&resticArgs.push("--pack-size",performance.packSize),performance.scan||resticArgs.push("--no-scan"),performance.readConcurrency&&resticArgs.push("--read-concurrency",performance.readConcurrency.toString()),performance.transfers&&(resticEnv.RCLONE_TRANSFERS=performance.transfers.toString()),performance.bufferSize&&(resticEnv.RCLONE_BUFFER_SIZE=performance.bufferSize),performance.multiThreadStream&&(resticEnv.RCLONE_MULTI_THREAD_STREAMS=performance.multiThreadStream.toString())),encryption||resticArgs.push("--insecure-no-password"),resticArgs.push("--tag","plan-"+planId),resticArgs.push("--json"),{resticArgs:resticArgs,resticEnv:resticEnv}};async beforeBackup(planId,backupId,options){await this.runScripts("onBackupStart",planId,backupId,options)}async afterBackup(planId,backupId,options){await this.runScripts("onBackupEnd",planId,backupId,options)}async afterBackupSuccess(planId,backupId,options){await this.runScripts("onBackupComplete",planId,backupId,options)}async afterBackupError(planId,backupId,options){await this.runScripts("onBackupError",planId,backupId,options)}async afterBackupFailure(planId,backupId,options){await this.runScripts("onBackupFailure",planId,backupId,options)}async runScripts(eventName,planId,backupId,options){const phase=this.getPhaseFromScriptEvent(eventName),scripts=options?.settings?.scripts?.[eventName]||[];await runScriptsForEvent(eventName,scripts,async scriptName=>{await this.updateProgress(planId,backupId,phase,scriptName+"_START",!1)},async scriptName=>{await this.updateProgress(planId,backupId,phase,scriptName+"_COMPLETE",!0)},async(scriptName,message)=>{await this.updateProgress(planId,backupId,phase,scriptName+"_FAIL",!0,message)})}getPhaseFromScriptEvent(eventName){let phase="post-backup";return"onBackupStart"===eventName&&(phase="pre-backup"),phase}}
|
|
1
|
+
import os from"os";import fs from"fs";import{getBackupPlanStats,runResticCommand}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{processManager}from"../ProcessManager";import{PruneHandler}from"./PruneHandler";import{ProgressManager}from"../ProgressManager";import{appPaths}from"../../utils/AppPaths";import{runScriptsForEvent}from"../../utils/executeUserScript";import{configService}from"../../services/ConfigService";import{ReplicationOrchestrator}from"./ReplicationOrchestrator";export class BackupHandler{emitter;runningBackups=new Set;cancelledBackups=new Set;progressManager;replicationOrchestrator;constructor(emitter){this.emitter=emitter,this.progressManager=new ProgressManager(appPaths.getProgressDir()),this.initializeProgressManager()}getReplicationOrchestrator(){return this.replicationOrchestrator||(this.replicationOrchestrator=new ReplicationOrchestrator(this.emitter,this.progressManager,this.cancelledBackups)),this.replicationOrchestrator}async initializeProgressManager(){try{await this.progressManager.initialize()}catch(error){}}async execute(planId,backupId,options,retryInfo){if(this.runningBackups.has(planId))throw new Error(`Backup is already in progress for plan: ${planId}`);this.runningBackups.add(planId);try{await this.progressManager.initializeProgress(planId,backupId,retryInfo)}catch(error){}retryInfo.attempts>0&&await this.updateProgress(planId,backupId,"pre-backup",`RETRY_ATTEMPT_${retryInfo.attempts}_OF_${retryInfo.maxAttempts}_START`,!1);try{const resticArgsAndEnv=this.createResticBackupArgs(planId,options);if(await this.preBackupPhase(planId,backupId,options,resticArgsAndEnv),this.cancelledBackups.has(planId))throw new Error("BACKUP_CANCELLED: Backup was cancelled");const result=await this.executeBackupPhase(planId,backupId,options,resticArgsAndEnv);if(this.cancelledBackups.has(planId))throw new Error("BACKUP_CANCELLED: Backup was cancelled");await this.postBackupPhase(planId,backupId,options),options.settings?.replication?.enabled&&options.settings.replication.storages?.length>0&&await this.getReplicationOrchestrator().run(planId,backupId,options),await this.progressManager.markCompleted(planId,backupId,!0);const progressData=await this.progressManager.getResticProgress(planId,backupId);return this.emitter.emit("backup_complete",{planId:planId,backupId:backupId,success:!0,summary:progressData}),await this.afterBackup(planId,backupId,options),result}catch(error){const errorMessage=error instanceof Error?error.message:"Unknown execution error";if(errorMessage.startsWith("BACKUP_CANCELLED:"))return this.emitter.emit("backup_complete",{planId:planId,backupId:backupId,success:!1,summary:null}),"";const permanentlyFailed=retryInfo.attempts+1>retryInfo.maxAttempts;throw await this.progressManager.markCompleted(planId,backupId,!1,errorMessage,permanentlyFailed),this.emitter.emit("backup_complete",{planId:planId,backupId:backupId,success:!1,summary:null}),permanentlyFailed||await this.updateProgress(planId,backupId,"retry",`BACKUP_RETRY_${retryInfo.attempts+1}_OF_${retryInfo.maxAttempts}_SCHEDULED`,!1),this.emitter.emit("backup_error",{planId:planId,backupId:backupId,error:errorMessage}),permanentlyFailed?(await this.afterBackupFailure(planId,backupId,options),await this.afterBackup(planId,backupId,options)):await this.afterBackupError(planId,backupId,options),new Error(errorMessage)}finally{this.runningBackups.delete(planId),this.cancelledBackups.delete(planId)}}async preBackupPhase(planId,backupId,options,resticArgsAndEnv){let dryRunSummary;await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_START",!1),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_START",!1);try{dryRunSummary=await this.dryRunBackup(planId,options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_COMPLETE",!0)}catch(error){const errMsg=error?.message||"Unknown Error";throw await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_DRY_RUN_ERROR",!1,errMsg),error}this.emitter.emit("backup_start",{planId:options.id,backupId:backupId,summary:dryRunSummary}),await this.waitForBackupCreation(planId,backupId),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_CHECKS_START",!1),await this.canRun(options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_CHECKS_COMPLETE",!0),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_SCRIPTS_START",!1),await this.beforeBackup(planId,backupId,options),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_SCRIPTS_COMPLETE",!0),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_UNLOCK_STALE_LOCKS",!1),await this.unlockStaleLocks(planId,options,resticArgsAndEnv),await this.updateProgress(planId,backupId,"pre-backup","PRE_BACKUP_COMPLETE",!0)}async executeBackupPhase(planId,backupId,options,resticArgsAndEnv){await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_START",!1);const repoPassword=options.settings.encryption?configService.config.ENCRYPTION_KEY:"",handlers=this.createHandlers(planId,backupId),{resticArgs:resticArgs,resticEnv:resticEnv}=resticArgsAndEnv,resticArgsWithBackupTag=[...resticArgs,"--tag",`backup-${backupId}`];try{const result=await runResticCommand(resticArgsWithBackupTag,{RESTIC_PASSWORD:repoPassword,...resticEnv},handlers.onProgress,handlers.onError,handlers.onComplete,process=>processManager.trackProcess("backup-"+backupId,process));return this.cancelledBackups.has(planId)||await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_COMPLETE",!0),result}catch(error){const errMsg=error?.message||"Unknown Error";throw await this.updateProgress(planId,backupId,"backup","BACKUP_OPERATION_ERROR",!0,errMsg),error}}async postBackupPhase(planId,backupId,options){await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_START",!1),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_SCRIPTS_START",!1),await this.afterBackupSuccess(planId,backupId,options),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_SCRIPTS_COMPLETE",!0),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_START",!1);try{const pruneHandler=new PruneHandler(this.emitter);await pruneHandler.prune(planId,options),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_COMPLETE",!0)}catch(error){const errorMsg=error?.message||"Unknown Error";await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_PRUNE_FAILED",!0,errorMsg)}await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_START",!1);try{const planStats=await getBackupPlanStats(planId,options.storage.name,options.storagePath,options.settings.encryption);this.emitter.emit("backup_stats_update",{planId:planId,backupId:backupId,...planStats||{}}),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_COMPLETE",!0)}catch(error){const errMsg=error?.message||"Unknown Error";this.emitter.emit("backup_stats_update",{planId:planId,backupId:backupId,error:errMsg}),await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_REPO_STATS_FAILED",!0,errMsg)}await this.updateProgress(planId,backupId,"post-backup","POST_BACKUP_COMPLETE",!0)}async retryFailedReplications(planId,backupId,options,failedReplicationIds){return this.getReplicationOrchestrator().retryFailedReplications(planId,backupId,options,failedReplicationIds)}async updateProgress(planId,backupId,phase,action,completed,error){try{await this.progressManager.updateAction(planId,backupId,phase,action,completed,error)}catch(error){}}waitForBackupCreation(planId,backupId){return new Promise((resolve,reject)=>{const timeout=setTimeout(()=>{this.emitter.removeListener("backup_created",onBackupCreated),reject(new Error(`Timeout: Did not receive backup_created confirmation for ID: ${backupId}`))},3e4),onBackupCreated=data=>{data.backupId===backupId&&data.planId===planId&&(clearTimeout(timeout),this.emitter.removeListener("backup_created",onBackupCreated),resolve())};this.emitter.on("backup_created",onBackupCreated)})}async unlockStaleLocks(planId,options,resticArgsAndEnv){if(options.storage&&options.storagePath)try{const repoPath=generateResticRepoPath(options.storage.name,options.storagePath||""),repoPassword=options.settings.encryption?configService.config.ENCRYPTION_KEY:"";await runResticCommand(["unlock","-r",repoPath],{...resticArgsAndEnv.resticEnv,RESTIC_PASSWORD:repoPassword})}catch(error){}}async canRun(options,resticArgsAndEnv){if(os.freemem()<134217728)throw new Error("Insufficient memory to perform backup.");if(options.settings.encryption&&!configService.config.ENCRYPTION_KEY)throw new Error("Encryption enabled but ENCRYPTION_KEY not found.");if(options.sourceConfig?.includes){const pathsNotFound=[];for(const path of options.sourceConfig.includes)try{await fs.promises.access(path,fs.constants.R_OK)}catch(error){pathsNotFound.push(path)}if(pathsNotFound.length>0)throw new Error(`Source paths not accessible: ${pathsNotFound.join(", ")}.`)}return!0}async cancel(planId,backupId){this.cancelledBackups.add(planId),await this.progressManager.markCompleted(planId,backupId,!1,"Backup was cancelled by user",!0);try{processManager.killProcess("backup-"+backupId);return this.replicationOrchestrator&&await this.replicationOrchestrator.cancelReplications(backupId),!0}catch(error){return!1}}createHandlers(planId,backupId){return{onProgress:data=>{const progressLine=data.toString().trim();this.updateResticProgress(planId,backupId,progressLine);try{const progressData=JSON.parse(progressLine);this.emitter.emit("backup_progress",{planId:planId,backupId:backupId,data:progressData})}catch(error){}},onError:data=>{this.emitter.emit("backup_error",{planId:planId,backupId:backupId,error:data.toString()})},onComplete:async code=>{}}}async updateResticProgress(planId,backupId,resticLine){try{await this.progressManager.updateResticProgress(planId,backupId,resticLine)}catch(error){}}async dryRunBackup(planId,options,resticArgsAndEnv){const{resticArgs:resticArgs,resticEnv:resticEnv}=resticArgsAndEnv,dryRunArgs=[...resticArgs,"--dry-run"],dryRunEnv={...resticEnv,RESTIC_PASSWORD:options.settings.encryption?configService.config.ENCRYPTION_KEY:""};"rescue"===options.method&&dryRunArgs.push("--one-file-system");try{const outputLines=(await runResticCommand(dryRunArgs,dryRunEnv)).split("\n"),summaryLine=outputLines[outputLines.length-1];return JSON.parse(summaryLine)}catch(error){throw new Error(`Dry run failed: ${error.message}`)}}createResticBackupArgs=(planId,options)=>{const{sourceConfig:sourceConfig,storagePath:storagePath,storage:storage}=options,{compression:compression,performance:performance,encryption:encryption}=options.settings,resticArgs=["backup"],resticEnv={};if(sourceConfig?.includes&&sourceConfig.includes.forEach(inPath=>{const pathSlice=inPath.slice(0,3);if(!inPath.startsWith("-")){const pathName="ip#"===pathSlice?inPath.replace("ip#",""):inPath;resticArgs.push(pathName)}}),sourceConfig?.excludes&&sourceConfig.excludes.forEach(exPath=>{const pathSlice=exPath.slice(0,3);if(!exPath.startsWith("-")){const xpathName="ep#"===pathSlice?exPath.replace("ep#",""):exPath;resticArgs.push("--exclude",xpathName)}}),storage.name){const repoPath=generateResticRepoPath(storage.name,storagePath||"");resticArgs.push("-r",repoPath)}return compression&&resticArgs.push("--compression","auto"),performance&&(performance.maxProcessor&&(resticEnv.GOMAXPROCS=performance.maxProcessor.toString()),performance.packSize&&resticArgs.push("--pack-size",performance.packSize),performance.scan||resticArgs.push("--no-scan"),performance.readConcurrency&&resticArgs.push("--read-concurrency",performance.readConcurrency.toString()),performance.transfers&&(resticEnv.RCLONE_TRANSFERS=performance.transfers.toString()),performance.bufferSize&&(resticEnv.RCLONE_BUFFER_SIZE=performance.bufferSize),performance.multiThreadStream&&(resticEnv.RCLONE_MULTI_THREAD_STREAMS=performance.multiThreadStream.toString())),encryption||resticArgs.push("--insecure-no-password"),resticArgs.push("--tag","plan-"+planId),resticArgs.push("--json"),{resticArgs:resticArgs,resticEnv:resticEnv}};async beforeBackup(planId,backupId,options){await this.runScripts("onBackupStart",planId,backupId,options)}async afterBackup(planId,backupId,options){await this.runScripts("onBackupEnd",planId,backupId,options)}async afterBackupSuccess(planId,backupId,options){await this.runScripts("onBackupComplete",planId,backupId,options)}async afterBackupError(planId,backupId,options){await this.runScripts("onBackupError",planId,backupId,options)}async afterBackupFailure(planId,backupId,options){await this.runScripts("onBackupFailure",planId,backupId,options)}async runScripts(eventName,planId,backupId,options){const phase=this.getPhaseFromScriptEvent(eventName),scripts=options?.settings?.scripts?.[eventName]||[];await runScriptsForEvent(eventName,scripts,async scriptName=>{await this.updateProgress(planId,backupId,phase,scriptName+"_START",!1)},async scriptName=>{await this.updateProgress(planId,backupId,phase,scriptName+"_COMPLETE",!0)},async(scriptName,message)=>{await this.updateProgress(planId,backupId,phase,scriptName+"_FAIL",!0,message)})}getPhaseFromScriptEvent(eventName){let phase="post-backup";return"onBackupStart"===eventName&&(phase="pre-backup"),phase}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupHandler.js","sourceRoot":"","sources":["../../../src/managers/handlers/BackupHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO7D,MAAM,OAAO,aAAa;IAMH;IALd,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,sDAAsD;IAC9C,eAAe,CAAkB;IAEzC,YAAsB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACtC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CACZ,MAAc,EACd,QAAgB,EAChB,OAA4B,EAC5B,SAAoD;QAEpD,mDAAmD;QACnD,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEhC,2BAA2B;QAC3B,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,mEAAmE;QACnE,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,iBAAiB,SAAS,CAAC,QAAQ,OAAO,SAAS,CAAC,WAAW,QAAQ,EACvE,KAAK,CACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,8BAA8B;YAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAyB,CAAC,CAAC;YACxF,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC3D,CAAC;YAED,0BAA0B;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC1F,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC3D,CAAC;YAED,+BAA+B;YAC/B,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEtD,oBAAoB;YACpB,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEjE,2BAA2B;YAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAElD,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,wCAAwC;YACxC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;YAExF,4DAA4D;YAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACjE,IAAI,WAAW,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;YACX,CAAC;YAED,wEAAwE;YACxE,2EAA2E;YAE3E,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC;YAEzE,iBAAiB;YACjB,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACvC,MAAM,EACN,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,iBAAiB,CACjB,CAAC;YAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,OAAO,EACP,gBAAgB,SAAS,CAAC,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,WAAW,YAAY,EAC9E,KAAK,CACL,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;gBACjC,MAAM;gBACN,QAAQ;gBACR,KAAK,EAAE,YAAY;aACnB,CAAC,CAAC;YAEH,4BAA4B;YAC5B,IAAI,iBAAiB,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACP,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACxD,CAAC;YAED,kGAAkG;YAClG,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACV,iFAAiF;YACjF,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC3B,MAAc,EACd,QAAgB,EAChB,OAA4B,EAC5B,gBAAkC;QAElC,oCAAoC;QACpC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAErF,kBAAkB;QAClB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAE7F,IAAI,aAAa,CAAC;QAClB,IAAI,CAAC;YACJ,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC3E,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,6BAA6B,EAC7B,IAAI,CACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACjD,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,0BAA0B,EAC1B,KAAK,EACL,MAAM,CACN,CAAC;YACF,MAAM,KAAK,CAAC;QACb,CAAC;QAED,yEAAyE;QACzE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;YACjC,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEnD,wBAAwB;QACxB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC5F,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAE9F,yBAAyB;QACzB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAC7F,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,6BAA6B,EAAE,IAAI,CAAC,CAAC;QAE/F,qBAAqB;QACrB,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,+BAA+B,EAC/B,KAAK,CACL,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,kBAAkB,CACjC,MAAc,EACd,QAAgB,EAChB,OAA4B,EAC5B,gBAAkC;QAElC,0CAA0C;QAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAEvF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC;QACnD,MAAM,uBAAuB,GAAa,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;QAEzF,IAAI,CAAC;YACJ,iCAAiC;YACjC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACpC,uBAAuB,EACvB,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,EAC/C,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,UAAU,EACnB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,GAAG,QAAQ,EAAE,OAAO,CAAC,CACrE,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;YAC1F,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACjD,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9F,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC5B,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,qCAAqC;QACrC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAEvF,0BAA0B;QAC1B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,8BAA8B,EAC9B,IAAI,CACJ,CAAC;QAEF,+BAA+B;QAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC7F,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,4BAA4B,EAC5B,IAAI,CACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACnD,OAAO,CAAC,IAAI,CACX,yDAAyD,MAAM,aAAa,QAAQ,EAAE,CACtF,CAAC;YACF,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,0BAA0B,EAC1B,IAAI,EACJ,QAAQ,CACR,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,8BAA8B,EAC9B,KAAK,CACL,CAAC;QACF,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,kBAAkB,CACzC,MAAM,EACN,OAAO,CAAC,OAAO,CAAC,IAAI,EACpB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAC3B,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACxC,MAAM;gBACN,QAAQ,EAAE,QAAQ;gBAClB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;aACpB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,iCAAiC,EACjC,IAAI,CACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACxC,MAAM;gBACN,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,MAAM;aACb,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,QAAQ,EACR,aAAa,EACb,+BAA+B,EAC/B,IAAI,EACJ,MAAM,CACN,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;IAC1F,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,cAAc,CAC7B,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,MAAc,EACd,SAAkB,EAClB,KAAc;QAEd,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,0CAA0C,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;QACrF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,MAAc,EAAE,QAAgB;QAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC/B,iDAAiD;gBACjD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;gBAC/D,MAAM,CACL,IAAI,KAAK,CAAC,gEAAgE,QAAQ,EAAE,CAAC,CACrF,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,MAAM,eAAe,GAAG,CAAC,IAA0C,EAAE,EAAE;gBACtE,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC1D,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;oBAC/D,OAAO,EAAE,CAAC;gBACX,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC7B,MAAc,EACd,OAA4B,EAC5B,gBAAkC;QAElC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,oDAAoD,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBACzF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE5F,MAAM,gBAAgB,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAClD,GAAG,gBAAgB,CAAC,SAAS;oBAC7B,eAAe,EAAE,YAAY;iBAC7B,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CACX,2DAA2D,MAAM,aAAa,KAAK,CAAC,OAAO,EAAE,CAC7F,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,OAA4B,EAAE,gBAAkC;QAC5E,qCAAqC;QACrC,gEAAgE;QAChE,wEAAwE;QACxE,oEAAoE;QACpE,6CAA6C;QAC7C,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,cAAc,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,gBAAgB;QAC1D,IAAI,eAAe,GAAG,cAAc,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC3D,CAAC;QAED,kEAAkE;QAClE,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACrE,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAClD,IAAI,CAAC;oBACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,gCAAgC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,QAAgB;QAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACvC,MAAM,EACN,QAAQ,EACR,KAAK,EACL,8BAA8B,EAC9B,IAAI,CACJ,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,MAAc,EAAE,QAAgB;QACxD,OAAO;YACN,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBAE5C,0CAA0C;gBAC1C,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAE1D,iDAAiD;gBACjD,IAAI,CAAC;oBACJ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACpC,MAAM;wBACN,QAAQ;wBACR,IAAI,EAAE,YAAY;qBAClB,CAAC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,oCAAoC;gBACrC,CAAC;YACF,CAAC;YACD,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;oBACjC,MAAM;oBACN,QAAQ;oBACR,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;iBACtB,CAAC,CAAC;YACJ,CAAC;YACD,UAAU,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACpF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACpC,MAAM;oBACN,QAAQ;oBACR,OAAO,EAAE,IAAI,KAAK,CAAC;oBACnB,OAAO,EAAE,YAAY;iBACrB,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,oBAAoB,CACnC,MAAc,EACd,QAAgB,EAChB,UAAkB;QAElB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,8CAA8C,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,YAAY,CAC3B,MAAc,EACd,OAA4B,EAC5B,gBAAkC;QAElC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC;QACnD,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG;YACjB,GAAG,SAAS;YACZ,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;SACvF,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAC7C,OAAO,aAAa,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,GAAG,CAAC,MAAc,EAAE,OAAuB,EAAE,EAAE;QACpE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACvD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClE,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,IAAI,YAAY,EAAE,QAAQ,EAAE,CAAC;YAC5B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,wBAAwB;gBACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,QAAQ,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC1E,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,EAAE,QAAQ,EAAE,CAAC;YAC5B,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,wBAAwB;gBACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC3E,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBACzC,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;YACzE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,WAAW;YAAE,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB;QAC5E,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,WAAW,CAAC,YAAY;gBAAE,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACzF,IAAI,WAAW,CAAC,QAAQ;gBAAE,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB;YACrG,IAAI,CAAC,WAAW,CAAC,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,WAAW,CAAC,eAAe;gBAC9B,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/E,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3B,SAAS,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClE,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC5B,SAAS,CAAC,oBAAoB,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC;YAC1D,CAAC;YACD,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;gBACnC,SAAS,CAAC,6BAA6B,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YACrF,CAAC;QACF,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3C,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;QAC3C,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF;;;OAGG;IACO,KAAK,CAAC,YAAY,CAC3B,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,WAAW,CAC1B,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,kBAAkB,CACjC,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,gBAAgB,CAC/B,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,kBAAkB,CACjC,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,UAAU,CACzB,SAAiB,EACjB,MAAc,EACd,QAAgB,EAChB,OAA4B;QAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE9D,MAAM,kBAAkB,CACvB,SAAS,EACT,OAAO,EACP,KAAK,EAAC,UAAU,EAAC,EAAE;YAClB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClF,CAAC,EACD,KAAK,EAAC,UAAU,EAAC,EAAE;YAClB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QACpF,CAAC,EACD,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;YAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzF,CAAC,CACD,CAAC;IACH,CAAC;IAES,uBAAuB,CAAC,SAAiB;QAClD,IAAI,KAAK,GAAG,aAAa,CAAC;QAC1B,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YACnC,KAAK,GAAG,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"BackupHandler.js","sourceRoot":"","sources":["../../../src/managers/handlers/BackupHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadHandler.d.ts","sourceRoot":"","sources":["../../../src/managers/handlers/DownloadHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAYtC,qBAAa,eAAe;IACf,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAEnC,QAAQ,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC;IAuFZ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAqBvC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;IAa1C,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"DownloadHandler.d.ts","sourceRoot":"","sources":["../../../src/managers/handlers/DownloadHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAYtC,qBAAa,eAAe;IACf,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAEnC,QAAQ,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC;IAuFZ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAqBvC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;IAa1C,OAAO,CAAC,cAAc;CA8BtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mkdir,rm,readdir}from"fs/promises";import path from"path";import{existsSync,createReadStream}from"fs";import{unlink}from"fs/promises";import{runResticCommand}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{processManager}from"../ProcessManager";import{runCommand}from"../../utils/runCommand";import{appPaths}from"../../utils/AppPaths";import{configService}from"../../services/ConfigService";export class DownloadHandler{emitter;constructor(emitter){this.emitter=emitter}async download(planId,backupId,snapshotId,options){const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName),restoreDir=path.join(tempDir,`backup-${backupId}`),tarPath=path.join(tempDir,fileName);return this.emitter.emit("download_start",{planId:planId,backupId:backupId,targetPath:zipPath}),await mkdir(path.dirname(tempDir),{recursive:!0}),new Promise((resolve,reject)=>{const handlers=this.createHandlers(planId,backupId),{storageName:storageName,storagePath:storagePath,encryption:encryption}=options,repoPassword=encryption?configService.config.ENCRYPTION_KEY:"",repoPath=generateResticRepoPath(storageName,storagePath||"");runResticCommand(["restore","-r",repoPath,snapshotId,"--target",restoreDir,"--json"],{RESTIC_PASSWORD:repoPassword,RCLONE_CONFIG_PASS:repoPassword},handlers.onProgress,handlers.onError,async code=>{let hasRestoredFiles=!1;if(0!==code)try{hasRestoredFiles=(await readdir(restoreDir)).length>0}catch{hasRestoredFiles=!1}if(0===code||hasRestoredFiles)try{const tarCommand=["tar","-cf",tarPath,"-C",restoreDir,"."];try{await runCommand(tarCommand);try{await rm(restoreDir,{recursive:!0,force:!0})}catch(error){}handlers.onComplete(0),resolve(tarPath)}catch(error){handlers.onError(Buffer.from(error.message))}}catch(error){handlers.onError(Buffer.from(error.message)),reject(error)}else handlers.onComplete(code),reject(new Error("Restore failed"))},process=>processManager.trackProcess("download-"+backupId,process)).catch(err=>{})})}async cancel(planId,backupId){try{if(processManager.killProcess("download-"+backupId)){const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName);await new Promise(resolve=>setTimeout(resolve,2e3)),existsSync(zipPath)&&await unlink(zipPath)}return!0}catch(error){throw new Error("Error Cancelling Download. "+error?.message||"")}}async get(planId,backupId){try{const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName);return{fileName:fileName,fileStream:createReadStream(zipPath)}}catch(error){throw new Error("Error Getting Downloaded File. "+error?.message||"")}}createHandlers(planId,backupId){return{onProgress:data=>{const progressData=JSON.parse(data.toString());this.emitter.emit("download_progress",{backupId:backupId,planId:planId,data:progressData})},onError:data=>{this.emitter.emit("download_error",{backupId:backupId,planId:planId,error:data.toString()})},onComplete:code=>{this.emitter.emit("download_complete",{backupId:backupId,planId:planId,success:0===code})}}}}
|
|
1
|
+
import{mkdir,rm,readdir}from"fs/promises";import path from"path";import{existsSync,createReadStream}from"fs";import{unlink}from"fs/promises";import{runResticCommand}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{processManager}from"../ProcessManager";import{runCommand}from"../../utils/runCommand";import{appPaths}from"../../utils/AppPaths";import{configService}from"../../services/ConfigService";export class DownloadHandler{emitter;constructor(emitter){this.emitter=emitter}async download(planId,backupId,snapshotId,options){const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName),restoreDir=path.join(tempDir,`backup-${backupId}`),tarPath=path.join(tempDir,fileName);return this.emitter.emit("download_start",{planId:planId,backupId:backupId,targetPath:zipPath}),await mkdir(path.dirname(tempDir),{recursive:!0}),new Promise((resolve,reject)=>{const handlers=this.createHandlers(planId,backupId),{storageName:storageName,storagePath:storagePath,encryption:encryption}=options,repoPassword=encryption?configService.config.ENCRYPTION_KEY:"",repoPath=generateResticRepoPath(storageName,storagePath||"");runResticCommand(["restore","-r",repoPath,snapshotId,"--target",restoreDir,"--json"],{RESTIC_PASSWORD:repoPassword,RCLONE_CONFIG_PASS:repoPassword},handlers.onProgress,handlers.onError,async code=>{let hasRestoredFiles=!1;if(0!==code)try{hasRestoredFiles=(await readdir(restoreDir)).length>0}catch{hasRestoredFiles=!1}if(0===code||hasRestoredFiles)try{const tarCommand=["tar","-cf",tarPath,"-C",restoreDir,"."];try{await runCommand(tarCommand);try{await rm(restoreDir,{recursive:!0,force:!0})}catch(error){}handlers.onComplete(0),resolve(tarPath)}catch(error){handlers.onError(Buffer.from(error.message))}}catch(error){handlers.onError(Buffer.from(error.message)),reject(error)}else handlers.onComplete(code),reject(new Error("Restore failed"))},process=>processManager.trackProcess("download-"+backupId,process)).catch(err=>{})})}async cancel(planId,backupId){try{if(processManager.killProcess("download-"+backupId)){const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName);await new Promise(resolve=>setTimeout(resolve,2e3)),existsSync(zipPath)&&await unlink(zipPath)}return!0}catch(error){throw new Error("Error Cancelling Download. "+error?.message||"")}}async get(planId,backupId){try{const tempDir=appPaths.getDownloadsDir(),fileName=`backup-${backupId}.tar`,zipPath=path.join(tempDir,fileName);return{fileName:fileName,fileStream:createReadStream(zipPath)}}catch(error){throw new Error("Error Getting Downloaded File. "+error?.message||"")}}createHandlers(planId,backupId){return{onProgress:data=>{try{const progressData=JSON.parse(data.toString());this.emitter.emit("download_progress",{backupId:backupId,planId:planId,data:progressData})}catch(error){}},onError:data=>{this.emitter.emit("download_error",{backupId:backupId,planId:planId,error:data.toString()})},onComplete:code=>{this.emitter.emit("download_complete",{backupId:backupId,planId:planId,success:0===code})}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadHandler.js","sourceRoot":"","sources":["../../../src/managers/handlers/DownloadHandler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DownloadHandler.js","sourceRoot":"","sources":["../../../src/managers/handlers/DownloadHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { ProgressManager } from '../ProgressManager';
|
|
3
|
+
import { PlanPrune } from '../../types/plans';
|
|
4
|
+
import { BackupMirror } from '../../types/backups';
|
|
5
|
+
import { ResolvedReplicationStorage } from '../../types/events';
|
|
6
|
+
export declare class ReplicationHandler {
|
|
7
|
+
private emitter;
|
|
8
|
+
private progressManager;
|
|
9
|
+
private cancelledBackups;
|
|
10
|
+
private initializedRepos;
|
|
11
|
+
private activeMirrors;
|
|
12
|
+
constructor(emitter: EventEmitter, progressManager: ProgressManager, cancelledBackups: Set<string>);
|
|
13
|
+
/**
|
|
14
|
+
* Replicates a snapshot to all configured storage destinations.
|
|
15
|
+
*/
|
|
16
|
+
replicateSnapshot(planId: string, backupId: string, sourceRepoPath: string, sourceEncryption: boolean, resolvedStorages: ResolvedReplicationStorage[], pruneSettings: PlanPrune, concurrent: boolean, retryInfo: {
|
|
17
|
+
attempts: number;
|
|
18
|
+
maxAttempts: number;
|
|
19
|
+
}): Promise<BackupMirror[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Replicates a snapshot to a single storage destination.
|
|
22
|
+
*/
|
|
23
|
+
private replicateToStorage;
|
|
24
|
+
/**
|
|
25
|
+
* Ensures the replication repository is initialized. Caches init state.
|
|
26
|
+
*/
|
|
27
|
+
private ensureRepoInitialized;
|
|
28
|
+
/**
|
|
29
|
+
* Cancel all running replication processes for a backup.
|
|
30
|
+
* Uses internal tracking of active replications instead of querying the store.
|
|
31
|
+
*/
|
|
32
|
+
cancelReplications(backupId: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ReplicationHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicationHandler.d.ts","sourceRoot":"","sources":["../../../src/managers/handlers/ReplicationHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEhE,qBAAa,kBAAkB;IAK7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IANzB,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,aAAa,CAAkC;gBAG9C,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC;IAGtC;;OAEG;IACG,iBAAiB,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,EAAE,0BAA0B,EAAE,EAC9C,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAClD,OAAO,CAAC,YAAY,EAAE,CAAC;IAgE1B;;OAEG;YACW,kBAAkB;IAuVhC;;OAEG;YACW,qBAAqB;IA+DnC;;;OAGG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAYzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{runResticCommand}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{processManager}from"../ProcessManager";import{PruneHandler}from"./PruneHandler";import{configService}from"../../services/ConfigService";export class ReplicationHandler{emitter;progressManager;cancelledBackups;initializedRepos=new Set;activeMirrors=new Map;constructor(emitter,progressManager,cancelledBackups){this.emitter=emitter,this.progressManager=progressManager,this.cancelledBackups=cancelledBackups}async replicateSnapshot(planId,backupId,sourceRepoPath,sourceEncryption,resolvedStorages,pruneSettings,concurrent,retryInfo){const password=sourceEncryption?configService.config.ENCRYPTION_KEY:"",replicationInfos=resolvedStorages.map(s=>({replicationId:s.replicationId,storageId:s.storageId,storageName:s.storageName,storageType:s.storageType}));if(await this.progressManager.initializeReplications(planId,backupId,replicationInfos),concurrent){return await Promise.all(resolvedStorages.map(storage=>this.replicateToStorage(planId,backupId,sourceRepoPath,password,sourceEncryption,storage,pruneSettings,retryInfo)))}{const results=[];for(let i=0;i<resolvedStorages.length;i++){if(this.cancelledBackups.has(planId)){for(let j=i;j<resolvedStorages.length;j++)results.push({replicationId:resolvedStorages[j].replicationId,storageId:resolvedStorages[j].storageId,storageName:resolvedStorages[j].storageName,storagePath:resolvedStorages[j].storagePath,storageType:resolvedStorages[j].storageType,status:"failed",error:"Cancelled by user"});break}const result=await this.replicateToStorage(planId,backupId,sourceRepoPath,password,sourceEncryption,resolvedStorages[i],pruneSettings,retryInfo);results.push(result)}return results}}async replicateToStorage(planId,backupId,sourceRepoPath,password,encryption,storage,pruneSettings,retryInfo){const{replicationId:replicationId,storageId:storageId,storagePath:storagePath,storageName:storageName,storageType:storageType}=storage,mirror={replicationId:replicationId,storageId:storageId,storageName:storageName,storagePath:storagePath,status:"started",started:Date.now(),storageType:storageType};this.activeMirrors.has(backupId)||this.activeMirrors.set(backupId,new Set),this.activeMirrors.get(backupId).add(replicationId);try{if(this.cancelledBackups.has(planId))throw new Error("Cancelled by user");this.emitter.emit("replication_start",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storageName:storageName,storagePath:storagePath,storageType:storageType}),await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_COPY_START",!1);const destRepoPath=generateResticRepoPath(storageName,storagePath);await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_INIT_START",!1);try{await this.ensureRepoInitialized(destRepoPath,sourceRepoPath,password,encryption,backupId,replicationId)}catch(initError){const initMsg=initError?.message||"Unknown init error";throw await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_INIT_FAILED",!0,initMsg),initError}if(await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_INIT_COMPLETE",!0),this.cancelledBackups.has(planId))throw new Error("Cancelled by user");try{const unlockArgs=["unlock","-r",destRepoPath];encryption||unlockArgs.push("--insecure-no-password"),await runResticCommand(unlockArgs,{RESTIC_PASSWORD:password},void 0,void 0,void 0,process=>{processManager.trackProcess(`replication-${backupId}-${replicationId}`,process)})}catch(err){}const copyArgs=["-r",destRepoPath,"copy","--from-repo",sourceRepoPath,"--tag",`plan-${planId}`,"--tag",`backup-${backupId}`];encryption||(copyArgs.push("--insecure-no-password"),copyArgs.push("--from-insecure-no-password"));const copyEnv={RESTIC_PASSWORD:password,RESTIC_FROM_PASSWORD:password};if(await runResticCommand(copyArgs,copyEnv,data=>{const line=data.toString().trim();if(!line)return;if(line.match(/copy started/i))return this.progressManager.updateReplicationResticProgress(planId,backupId,replicationId,line).catch(()=>{}),void this.emitter.emit("replication_progress",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storagePath:storagePath,data:{message_type:"status",info:line}});const packMatch=line.match(/\[[\d:]+\]\s+([\d.]+)%\s+(\d+)\s*\/\s*(\d+)\s+packs?\s+copied/);if(packMatch){const[,percent,copied,total]=packMatch,progressData={message_type:"status",percent_done:parseFloat(percent)/100,packs_copied:parseInt(copied),packs_total:parseInt(total)};return this.progressManager.updateReplicationResticProgress(planId,backupId,replicationId,JSON.stringify(progressData)).catch(()=>{}),void this.emitter.emit("replication_progress",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storagePath:storagePath,data:progressData})}const savedMatch=line.match(/snapshot\s+(\w+)\s+saved/i);if(savedMatch)return this.progressManager.updateReplicationResticProgress(planId,backupId,replicationId,line).catch(()=>{}),void this.emitter.emit("replication_progress",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storagePath:storagePath,data:{message_type:"status",info:`Snapshot ${savedMatch[1]} saved`}});this.progressManager.updateReplicationResticProgress(planId,backupId,replicationId,line).catch(()=>{})},data=>{},void 0,process=>{processManager.trackProcess(`replication-${backupId}-${replicationId}`,process)}),this.cancelledBackups.has(planId))throw new Error("Cancelled by user");await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_COPY_COMPLETE",!0);try{await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_PRUNE_START",!1);const pruneHandler=new PruneHandler(this.emitter),pruneOptions={storage:{name:storageName},storagePath:storagePath,settings:{prune:pruneSettings,encryption:encryption}};await pruneHandler.prune(planId,pruneOptions),await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_PRUNE_COMPLETE",!0)}catch(pruneErr){await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_PRUNE_FAILED",!0,pruneErr.message)}return mirror.status="completed",mirror.ended=Date.now(),await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_COMPLETE",!0),this.emitter.emit("replication_complete",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storageName:storageName,storagePath:storagePath,storageType:storageType,success:!0}),mirror}catch(error){const errorMessage=error?.message||"Unknown replication error";return mirror.status="failed",mirror.ended=Date.now(),mirror.error=errorMessage,await this.progressManager.updateReplicationAction(planId,backupId,replicationId,"REPLICATION_FAILED",!0,errorMessage),this.emitter.emit("replication_complete",{planId:planId,backupId:backupId,replicationId:replicationId,storageId:storageId,storageName:storageName,storagePath:storagePath,storageType:storageType,success:!1,error:errorMessage}),mirror}finally{this.activeMirrors.get(backupId)?.delete(replicationId),0===this.activeMirrors.get(backupId)?.size&&this.activeMirrors.delete(backupId)}}async ensureRepoInitialized(repoPath,sourceRepoPath,password,encryption,backupId,replicationId){if(this.initializedRepos.has(repoPath))return;const trackProcess=process=>{backupId&&replicationId&&processManager.trackProcess(`replication-${backupId}-${replicationId}`,process)};try{const checkArgs=["snapshots","-r",repoPath,"--json"];encryption||checkArgs.push("--insecure-no-password"),await runResticCommand(checkArgs,{RESTIC_PASSWORD:password},void 0,void 0,void 0,trackProcess),this.initializedRepos.add(repoPath)}catch(error){try{const initArgs=["-r",repoPath,"init","--from-repo",sourceRepoPath,"--copy-chunker-params"];encryption||(initArgs.push("--insecure-no-password"),initArgs.push("--from-insecure-no-password"));const initEnv={RESTIC_PASSWORD:password,RESTIC_FROM_PASSWORD:password};await runResticCommand(initArgs,initEnv,void 0,void 0,void 0,trackProcess),this.initializedRepos.add(repoPath)}catch(initError){if(!initError.message?.includes("already initialized"))throw initError;this.initializedRepos.add(repoPath)}}}async cancelReplications(backupId){const replicationIds=this.activeMirrors.get(backupId);if(replicationIds)for(const replicationId of replicationIds)try{processManager.killProcess(`replication-${backupId}-${replicationId}`)}catch(error){}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicationHandler.js","sourceRoot":"","sources":["../../../src/managers/handlers/ReplicationHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { ProgressManager } from '../ProgressManager';
|
|
3
|
+
import { BackupMirror } from '../../types/backups';
|
|
4
|
+
/**
|
|
5
|
+
* Orchestrates the full replication lifecycle: init handshake, snapshot copy
|
|
6
|
+
* (with automatic retries), stats collection, and failure notifications.
|
|
7
|
+
*
|
|
8
|
+
* Delegates the low-level `restic copy` work to `ReplicationHandler`.
|
|
9
|
+
* Called by `BackupHandler` (Phase 4) and `BaseBackupManager` (manual retry).
|
|
10
|
+
*/
|
|
11
|
+
export declare class ReplicationOrchestrator {
|
|
12
|
+
private emitter;
|
|
13
|
+
private progressManager;
|
|
14
|
+
private cancelledBackups;
|
|
15
|
+
private replicationHandler;
|
|
16
|
+
constructor(emitter: EventEmitter, progressManager: ProgressManager, cancelledBackups: Set<string>);
|
|
17
|
+
/**
|
|
18
|
+
* Runs the full replication phase: init → copy → retry → stats → notify.
|
|
19
|
+
* Replication failures do NOT propagate — they are caught and logged.
|
|
20
|
+
*/
|
|
21
|
+
run(planId: string, backupId: string, options: Record<string, any>): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Retries failed replication operations for a specific backup.
|
|
24
|
+
* Runs synchronously (awaited), so the ReplicationRetryTask properly tracks success/failure.
|
|
25
|
+
*/
|
|
26
|
+
retryFailedReplications(planId: string, backupId: string, options: Record<string, any>, failedReplicationIds: string[]): Promise<BackupMirror[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Cancels any active replication processes for the given backup.
|
|
29
|
+
*/
|
|
30
|
+
cancelReplications(backupId: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Automatic retry loop for failed mirrors during the normal replication phase.
|
|
33
|
+
*/
|
|
34
|
+
private retryLoop;
|
|
35
|
+
/**
|
|
36
|
+
* Collects mirror stats (size + snapshots) for completed replications
|
|
37
|
+
* and emits events to persist them to the backup record and plan stats.
|
|
38
|
+
*/
|
|
39
|
+
private collectAndEmitMirrorStats;
|
|
40
|
+
/**
|
|
41
|
+
* Waits for the ReplicationEventService to resolve storage names and create
|
|
42
|
+
* initial mirror entries, then returns the resolved storages.
|
|
43
|
+
*/
|
|
44
|
+
private waitForReplicationInit;
|
|
45
|
+
/**
|
|
46
|
+
* Helper to update backup progress with error handling.
|
|
47
|
+
*/
|
|
48
|
+
private updateProgress;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ReplicationOrchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicationOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/managers/handlers/ReplicationOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;GAMG;AACH,qBAAa,uBAAuB;IAIlC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;IALzB,OAAO,CAAC,kBAAkB,CAAqB;gBAGtC,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC;IAOtC;;;OAGG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFxF;;;OAGG;IACG,uBAAuB,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,oBAAoB,EAAE,MAAM,EAAE,GAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;IAmE1B;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD;;OAEG;YACW,SAAS;IAgFvB;;;OAGG;YACW,yBAAyB;IAoEvC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;YACW,cAAc;CAc5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getBackupPlanStats}from"../../utils/restic/restic";import{generateResticRepoPath}from"../../utils/restic/helpers";import{ReplicationHandler}from"./ReplicationHandler";export class ReplicationOrchestrator{emitter;progressManager;cancelledBackups;replicationHandler;constructor(emitter,progressManager,cancelledBackups){this.emitter=emitter,this.progressManager=progressManager,this.cancelledBackups=cancelledBackups,this.replicationHandler=new ReplicationHandler(emitter,progressManager,cancelledBackups)}async run(planId,backupId,options){const{replication:replication,prune:prune,encryption:encryption}=options.settings,sourceRepoPath=generateResticRepoPath(options.storage.name,options.storagePath||""),maxRetries=options.settings.retries||0,retryDelaySec=options.settings.retryDelay||30;try{await this.updateProgress(planId,backupId,"replication","REPLICATION_START",!1),this.emitter.emit("replication_init",{planId:planId,backupId:backupId,replicationStorages:replication.storages});const resolvedStorages=await this.waitForReplicationInit(planId,backupId);let results=await this.replicationHandler.replicateSnapshot(planId,backupId,sourceRepoPath,encryption,resolvedStorages,prune,replication.concurrent,{attempts:0,maxAttempts:maxRetries});results=await this.retryLoop(planId,backupId,results,resolvedStorages,{sourceRepoPath:sourceRepoPath,encryption:encryption,prune:prune,concurrent:replication.concurrent,maxRetries:maxRetries,retryDelaySec:retryDelaySec});const allSucceeded=results.every(m=>"completed"===m.status),allFailed=results.every(m=>"failed"===m.status);await this.updateProgress(planId,backupId,"replicating",allSucceeded?"REPLICATION_COMPLETE":"REPLICATION_PARTIAL_FAILURE",!0,allFailed?"All replications failed":void 0),await this.collectAndEmitMirrorStats(planId,backupId,results,encryption),allSucceeded||this.emitter.emit("replication_partial_failure",{planId:planId,backupId:backupId,mirrors:results})}catch(error){const errorMsg=error?.message||"Unknown Error";await this.updateProgress(planId,backupId,"replicating","REPLICATION_FAILED",!0,errorMsg)}}async retryFailedReplications(planId,backupId,options,failedReplicationIds){const{replication:replication,prune:prune,encryption:encryption}=options.settings,sourceRepoPath=generateResticRepoPath(options.storage.name,options.storagePath||""),failedReplicationStorages=replication.storages.filter(s=>failedReplicationIds.includes(s.replicationId));this.emitter.emit("replication_init",{planId:planId,backupId:backupId,replicationStorages:failedReplicationStorages,isRetry:!0});const resolvedStorages=await this.waitForReplicationInit(planId,backupId);await this.updateProgress(planId,backupId,"replication","REPLICATION_MANUAL_RETRY_START",!1);const results=await this.replicationHandler.replicateSnapshot(planId,backupId,sourceRepoPath,encryption,resolvedStorages,prune,replication.concurrent,{attempts:0,maxAttempts:0}),allSucceeded=results.every(m=>"completed"===m.status);return await this.updateProgress(planId,backupId,"replication",allSucceeded?"REPLICATION_MANUAL_RETRY_COMPLETE":"REPLICATION_MANUAL_RETRY_PARTIAL_FAILURE",!0,allSucceeded?void 0:`${results.filter(m=>"failed"===m.status).length} replication(s) still failed`),await this.collectAndEmitMirrorStats(planId,backupId,results,encryption),allSucceeded||this.emitter.emit("replication_partial_failure",{planId:planId,backupId:backupId,mirrors:results}),results}async cancelReplications(backupId){await this.replicationHandler.cancelReplications(backupId)}async retryLoop(planId,backupId,results,resolvedStorages,ctx){let attempt=0;for(;attempt<ctx.maxRetries;){const failedResults=results.filter(m=>"failed"===m.status);if(0===failedResults.length)break;if(this.cancelledBackups.has(planId))break;attempt++;const failedReplicationIds=new Set(failedResults.map(m=>m.replicationId));for(const replicationId of failedReplicationIds)await this.progressManager.updateReplicationAction(planId,backupId,replicationId,`REPLICATION_RETRY_${attempt}_OF_${ctx.maxRetries}_SCHEDULED`,!1);const delayMs=1e3*ctx.retryDelaySec;if(await new Promise(resolve=>setTimeout(resolve,delayMs)),this.cancelledBackups.has(planId))break;for(const replicationId of failedReplicationIds)await this.progressManager.updateReplicationAction(planId,backupId,replicationId,`REPLICATION_RETRY_${attempt}_OF_${ctx.maxRetries}_START`,!1);const failedStorages=resolvedStorages.filter(s=>failedReplicationIds.has(s.replicationId)),retryResults=await this.replicationHandler.replicateSnapshot(planId,backupId,ctx.sourceRepoPath,ctx.encryption,failedStorages,ctx.prune,ctx.concurrent,{attempts:attempt,maxAttempts:ctx.maxRetries}),successfulPrevious=results.filter(m=>"completed"===m.status),retryResultMap=new Map(retryResults.map(m=>[m.replicationId,m]));results=[...successfulPrevious,...failedResults.map(m=>retryResultMap.get(m.replicationId)||m)]}return results}async collectAndEmitMirrorStats(planId,backupId,results,encryption){const completedResults=results.filter(m=>"completed"===m.status);if(0!==completedResults.length)try{const mirrorStats=await Promise.all(completedResults.map(async m=>{try{const stats=await getBackupPlanStats(planId,m.storageName,m.storagePath,encryption);return stats?{replicationId:m.replicationId,storageId:m.storageId,storagePath:m.storagePath,size:stats.total_size,snapshots:stats.snapshots}:{replicationId:m.replicationId,storageId:m.storageId,storagePath:m.storagePath,size:0,snapshots:[]}}catch{return{replicationId:m.replicationId,storageId:m.storageId,storagePath:m.storagePath,size:0,snapshots:[]}}}));this.emitter.emit("backup_mirror_sizes_update",{backupId:backupId,mirrorSizes:mirrorStats.map(ms=>({replicationId:ms.replicationId,storageId:ms.storageId,storagePath:ms.storagePath,size:ms.size}))}),this.emitter.emit("backup_replication_stats_update",{planId:planId,backupId:backupId,mirrors:mirrorStats})}catch(statsErr){}}waitForReplicationInit(planId,backupId){return new Promise((resolve,reject)=>{const timeout=setTimeout(()=>{this.emitter.removeListener("replication_init_complete",onReplicationInitComplete),reject(new Error(`Timeout: Did not receive replication_init_complete for backup: ${backupId}`))},3e4),onReplicationInitComplete=data=>{data.backupId===backupId&&data.planId===planId&&(clearTimeout(timeout),this.emitter.removeListener("replication_init_complete",onReplicationInitComplete),resolve(data.resolvedStorages))};this.emitter.on("replication_init_complete",onReplicationInitComplete)})}async updateProgress(planId,backupId,phase,action,completed,error){try{await this.progressManager.updateAction(planId,backupId,phase,action,completed,error)}catch(error){}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplicationOrchestrator.js","sourceRoot":"","sources":["../../../src/managers/handlers/ReplicationOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionMiddleware.d.ts","sourceRoot":"","sources":["../../src/middlewares/versionMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"versionMiddleware.d.ts","sourceRoot":"","sources":["../../src/middlewares/versionMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO1D;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,QAQxF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getInstallType}from"../utils/installHelpers";const appVersion=process.env.APP_VERSION||"dev";export default function versionMiddleware(req,res,next){res.setHeader("X-App-Version",appVersion),res.setHeader("X-Server-OS",process.platform),res.setHeader("X-Install-Type",getInstallType()),next()}
|
|
1
|
+
import{getInstallType}from"../utils/installHelpers";import{configService}from"../services/ConfigService";const appVersion=process.env.APP_VERSION||"dev";export default function versionMiddleware(req,res,next){const isSetupPending=configService.isSetupPending();res.setHeader("X-App-Version",appVersion),res.setHeader("X-Server-OS",process.platform),res.setHeader("X-Install-Type",getInstallType()),res.setHeader("X-Setup-Pending",isSetupPending?1:0),next()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionMiddleware.js","sourceRoot":"","sources":["../../src/middlewares/versionMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"versionMiddleware.js","sourceRoot":"","sources":["../../src/middlewares/versionMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,oCAAoC;AACpC,MAAM,UAAU,GAAW,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACxF,kCAAkC;IAClC,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;IACtD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC3C,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC,CAAC;IAClD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC;AACR,CAAC"}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import { BackupCompletionStats, BackupTaskStats } from '../types/backups';
|
|
1
|
+
import { BackupCompletionStats, BackupTaskStats, ReplicationFailureInfo } from '../types/backups';
|
|
2
2
|
import { PlanFull } from '../types/plans';
|
|
3
3
|
import { INotificationChannelResolver } from '../types/notifications';
|
|
4
4
|
import { BackupStartedNotification } from './templates/email/backup/BackupStartedNotification';
|
|
5
5
|
import { BackupSuccessNotification } from './templates/email/backup/BackupSuccessNotification';
|
|
6
6
|
import { BackupFailedNotification } from './templates/email/backup/BackupFailedNotification';
|
|
7
|
+
import { ReplicationFailedNotification } from './templates/email/backup/ReplicationFailedNotification';
|
|
7
8
|
interface BackupDataType {
|
|
8
9
|
id?: string;
|
|
9
10
|
startTime?: Date;
|
|
10
11
|
endTime?: Date;
|
|
11
12
|
error?: string;
|
|
12
13
|
stats?: BackupTaskStats | BackupCompletionStats;
|
|
14
|
+
replicationFailures?: ReplicationFailureInfo[];
|
|
13
15
|
}
|
|
14
|
-
type NotificationType = 'start' | 'end' | 'success' | 'failure';
|
|
16
|
+
type NotificationType = 'start' | 'end' | 'success' | 'failure' | 'replication_failure';
|
|
15
17
|
export declare class BackupNotification {
|
|
16
18
|
protected BackupStartedNotificationClass: typeof BackupStartedNotification;
|
|
17
19
|
protected BackupSuccessNotificationClass: typeof BackupSuccessNotification;
|
|
18
20
|
protected BackupFailedNotificationClass: typeof BackupFailedNotification;
|
|
21
|
+
protected ReplicationFailedNotificationClass: typeof ReplicationFailedNotification;
|
|
19
22
|
protected notificationChannelResolver: INotificationChannelResolver;
|
|
20
23
|
shouldSend(notificationCase: string, notificationType: string): boolean;
|
|
21
24
|
send(plan: PlanFull, notificationType: NotificationType, backupData?: BackupDataType): Promise<void>;
|
|
22
25
|
sendEmail(plan: PlanFull, notificationType: NotificationType, backupData?: BackupDataType, notificationCase?: string): Promise<void>;
|
|
23
|
-
getNotificationClass(plan: PlanFull, notificationType: NotificationType, backupData?: BackupDataType, output?: 'html' | 'json' | 'push'): Promise<BackupStartedNotification | BackupSuccessNotification | BackupFailedNotification>;
|
|
26
|
+
getNotificationClass(plan: PlanFull, notificationType: NotificationType, backupData?: BackupDataType, output?: 'html' | 'json' | 'push'): Promise<BackupStartedNotification | BackupSuccessNotification | BackupFailedNotification | ReplicationFailedNotification>;
|
|
24
27
|
}
|
|
25
28
|
export {};
|
|
26
29
|
//# sourceMappingURL=BackupNotification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupNotification.d.ts","sourceRoot":"","sources":["../../src/notifications/BackupNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BackupNotification.d.ts","sourceRoot":"","sources":["../../src/notifications/BackupNotification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,6BAA6B,EAAE,MAAM,wDAAwD,CAAC;AAKvG,UAAU,cAAc;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,eAAe,GAAG,qBAAqB,CAAC;IAChD,mBAAmB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC/C;AAED,KAAK,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,qBAAqB,CAAC;AAExF,qBAAa,kBAAkB;IAC9B,SAAS,CAAC,8BAA8B,mCAA6B;IACrE,SAAS,CAAC,8BAA8B,mCAA6B;IACrE,SAAS,CAAC,6BAA6B,kCAA4B;IACnE,SAAS,CAAC,kCAAkC,uCAAiC;IAC7E,SAAS,CAAC,2BAA2B,EAAE,4BAA4B,CAA+B;IAElG,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IAQvD,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,cAAc;IAQpF,SAAS,CACd,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,CAAC,EAAE,cAAc,EAC3B,gBAAgB,CAAC,EAAE,MAAM;IAmCpB,oBAAoB,CACzB,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,CAAC,EAAE,cAAc,EAC3B,MAAM,GAAE,MAAM,GAAG,MAAM,GAAG,MAAe;CA+F1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BackupStartedNotification}from"./templates/email/backup/BackupStartedNotification";import{BackupSuccessNotification}from"./templates/email/backup/BackupSuccessNotification";import{BackupFailedNotification}from"./templates/email/backup/BackupFailedNotification";import{planLogger}from"../utils/logger";import{NotificationChannelResolver}from"../notifications/channels/NotificationChannelResolver";import{configService}from"../services/ConfigService";export class BackupNotification{BackupStartedNotificationClass=BackupStartedNotification;BackupSuccessNotificationClass=BackupSuccessNotification;BackupFailedNotificationClass=BackupFailedNotification;notificationChannelResolver=NotificationChannelResolver;shouldSend(notificationCase,notificationType){return"both"===notificationCase||notificationCase===notificationType||"end"===notificationCase&&["success","failure"].includes(notificationType)}async send(plan,notificationType,backupData){const notification=plan.settings.notification;notification?.email?.enabled&&await this.sendEmail(plan,notificationType,backupData)}async sendEmail(plan,notificationType,backupData,notificationCase){try{const notification=plan.settings.notification;if(!this.shouldSend(notification?.email?.case||"end",notificationType))throw new Error("Does not match Plan Notification Case.");const emailType=notification?.email?.type||"smtp";if(!notification?.email?.emails)throw new Error("Email Notification Emails Missing.");const emailChannel=await this.notificationChannelResolver.getChannel(emailType),notificationClass=await this.getNotificationClass(plan,notificationType,backupData,"html"),notificationResult=await emailChannel.send(notificationClass,{emails:notification.email.emails});if(!notificationResult?.success)throw new Error(notificationResult?.result||"Unknown Error");planLogger("notification",plan.id,backupData?.id).info(`Backup ${notificationType} Notification Email Sent Successfully.`)}catch(error){const errorMessage=error instanceof Error?error.message:"Unknown Error.";planLogger("notification",plan.id,backupData?.id).error(`Error Sending Backup ${notificationType} Email Notification. Reason: ${errorMessage}`)}}async getNotificationClass(plan,notificationType,backupData,output="html"){let notificationClass;const deviceName=plan.device?.name||"",storageName=plan.storage?.name||"",storageType=plan.storage?.type||"";switch(notificationType){case"start":notificationClass=new this.BackupStartedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,startTime:backupData?.startTime||new Date,stats:backupData?.stats,output:output});break;case"success":notificationClass=new this.BackupSuccessNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,output:output});break;case"failure":notificationClass=new this.BackupFailedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,error:backupData?.error||"",startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,output:output});break;case"end":notificationClass=backupData?.error?new
|
|
1
|
+
import{BackupStartedNotification}from"./templates/email/backup/BackupStartedNotification";import{BackupSuccessNotification}from"./templates/email/backup/BackupSuccessNotification";import{BackupFailedNotification}from"./templates/email/backup/BackupFailedNotification";import{ReplicationFailedNotification}from"./templates/email/backup/ReplicationFailedNotification";import{planLogger}from"../utils/logger";import{NotificationChannelResolver}from"../notifications/channels/NotificationChannelResolver";import{configService}from"../services/ConfigService";export class BackupNotification{BackupStartedNotificationClass=BackupStartedNotification;BackupSuccessNotificationClass=BackupSuccessNotification;BackupFailedNotificationClass=BackupFailedNotification;ReplicationFailedNotificationClass=ReplicationFailedNotification;notificationChannelResolver=NotificationChannelResolver;shouldSend(notificationCase,notificationType){return"both"===notificationCase||notificationCase===notificationType||"end"===notificationCase&&["success","failure"].includes(notificationType)}async send(plan,notificationType,backupData){const notification=plan.settings.notification;notification?.email?.enabled&&await this.sendEmail(plan,notificationType,backupData)}async sendEmail(plan,notificationType,backupData,notificationCase){try{const notification=plan.settings.notification;if(!this.shouldSend(notification?.email?.case||"end",notificationType))throw new Error("Does not match Plan Notification Case.");const emailType=notification?.email?.type||"smtp";if(!notification?.email?.emails)throw new Error("Email Notification Emails Missing.");const emailChannel=await this.notificationChannelResolver.getChannel(emailType),notificationClass=await this.getNotificationClass(plan,notificationType,backupData,"html"),notificationResult=await emailChannel.send(notificationClass,{emails:notification.email.emails});if(!notificationResult?.success)throw new Error(notificationResult?.result||"Unknown Error");planLogger("notification",plan.id,backupData?.id).info(`Backup ${notificationType} Notification Email Sent Successfully.`)}catch(error){const errorMessage=error instanceof Error?error.message:"Unknown Error.";planLogger("notification",plan.id,backupData?.id).error(`Error Sending Backup ${notificationType} Email Notification. Reason: ${errorMessage}`)}}async getNotificationClass(plan,notificationType,backupData,output="html"){let notificationClass;const deviceName=plan.device?.name||"",storageName=plan.storage?.name||"",storageType=plan.storage?.type||"";switch(notificationType){case"replication_failure":notificationClass=new this.ReplicationFailedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,error:backupData?.error||"Replication failed",startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,failedMirrors:backupData?.failedMirrors,output:output});break;case"start":notificationClass=new this.BackupStartedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,startTime:backupData?.startTime||new Date,stats:backupData?.stats,output:output});break;case"success":notificationClass=new this.BackupSuccessNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,replicationFailures:backupData?.replicationFailures,output:output});break;case"failure":notificationClass=new this.BackupFailedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,error:backupData?.error||"",startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,output:output});break;case"end":notificationClass=backupData?.error?new this.BackupFailedNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,error:backupData?.error||"",startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,output:output}):new this.BackupSuccessNotificationClass({appTitle:configService.config.APP_TITLE||"Pluton",plan:plan,deviceName:deviceName,storageName:storageName,storageType:storageType,startTime:backupData?.startTime||new Date,endTime:backupData?.endTime||new Date,stats:backupData?.stats,output:output})}return notificationClass}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupNotification.js","sourceRoot":"","sources":["../../src/notifications/BackupNotification.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"BackupNotification.js","sourceRoot":"","sources":["../../src/notifications/BackupNotification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationChannelResolver.d.ts","sourceRoot":"","sources":["../../../src/notifications/channels/NotificationChannelResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAgB,MAAM,sBAAsB,CAAC;AAMnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,qBAAa,2BAA2B;IACvC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAqB;WAErC,UAAU,CAAC,WAAW,GAAE,gBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgB7F,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;IAkB1F,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationChannelResolver.d.ts","sourceRoot":"","sources":["../../../src/notifications/channels/NotificationChannelResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAgB,MAAM,sBAAsB,CAAC;AAMnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,qBAAa,2BAA2B;IACvC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAqB;WAErC,UAAU,CAAC,WAAW,GAAE,gBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgB7F,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;IAkB1F,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;IAoB1F,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAQjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationChannelResolver.js","sourceRoot":"","sources":["../../../src/notifications/channels/NotificationChannelResolver.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,MAAM,OAAO,2BAA2B;IACvC,MAAM,CAAC,YAAY,GAAa,CAAC,eAAe,CAAC,CAAC;IAElD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,cAAgC,MAAM;QAC7D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC;QACxD,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,iCAAiC,CAAC,CAAC;QAClE,CAAC;QACD,QAAQ,WAAW,EAAE,CAAC;YACrB,KAAK,MAAM;gBACV,OAAO,IAAI,WAAW,CAAC,aAA6B,CAAC,CAAC;YACvD;gBACC,OAAO,IAAI,WAAW,CAAC,aAA6B,CAAC,CAAC;QACxD,CAAC;IACF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,WAAuC;QAC5D,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa;QACnF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACrC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;oBAC7C,cAAc,CAAC,oBAAoB,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACP,cAAc,CAAC,oBAAoB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,OAAO,oBAAoB,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,WAAuC;QAC5D,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa;QACnF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACrC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACJ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC7C,
|
|
1
|
+
{"version":3,"file":"NotificationChannelResolver.js","sourceRoot":"","sources":["../../../src/notifications/channels/NotificationChannelResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupFailedNotification.d.ts","sourceRoot":"","sources":["../../../../../src/notifications/templates/email/backup/BackupFailedNotification.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEnD,OAAO,EAAiC,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,qBAAa,wBAAyB,SAAQ,gBAAgB;gBACjD,IAAI,EAAE,+BAA+B;IAOjD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,+BAA+B,GAAG,MAAM;IAOrE,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,+BAA+B,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"BackupFailedNotification.d.ts","sourceRoot":"","sources":["../../../../../src/notifications/templates/email/backup/BackupFailedNotification.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEnD,OAAO,EAAiC,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,qBAAa,wBAAyB,SAAQ,gBAAgB;gBACjD,IAAI,EAAE,+BAA+B;IAOjD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,+BAA+B,GAAG,MAAM;IAOrE,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,+BAA+B,GAAG,MAAM;IAsCzE,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,+BAA+B,GAAG,MAAM;CA0CzE"}
|
|
@@ -63,10 +63,15 @@
|
|
|
63
63
|
<td style="text-align: center; width: 4%">
|
|
64
64
|
<span class="backupSummary_arrow">➝</span>
|
|
65
65
|
</td>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
<td style="text-align: right">
|
|
67
|
+
<span><strong><%= storageName %></strong></span>
|
|
68
|
+
<span>
|
|
69
|
+
<% if (replicationStorages > 0) { %>
|
|
70
|
+
+ <%= replicationStorages %> More
|
|
71
|
+
<% } else { %>
|
|
72
|
+
<%= storageTypeName %><% } %>
|
|
73
|
+
</span>
|
|
74
|
+
</td>
|
|
70
75
|
</tr>
|
|
71
76
|
</table>
|
|
72
77
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import ejs from"ejs";import{configService}from"../../../../services/ConfigService";import{providers}from"../../../../utils/providers";import{formatBytes,formatDuration,formatNumberToK}from"../../../../utils/formatter";import{BaseNotification}from"../../../BaseNotification";import{loadBackupTemplate}from"../../../templateLoader";export class BackupFailedNotification extends BaseNotification{constructor(data){super(),this.subject=`Backup Failed: ${data.plan.title}`,this.contentType=data.output||"html",this.content=this.buildContent(data)}buildContent(data){return"json"===this.contentType?this.buildJSONContent(data):this.buildHTMLContent(data)}buildJSONContent(data){const{appTitle:appTitle,deviceName:deviceName,storageName:storageName,storageType:storageType,plan:plan,stats:stats,startTime:startTime,endTime:endTime,error:error}=data,payload={appTitle:appTitle,deviceName:deviceName,storageName:storageName,storageType:storageType,storagePath:plan.storagePath||"",stats:stats,startTime:startTime,endTime:endTime,error:error,planID:plan.id,planTitle:plan.title,planType:plan.method,planSource:{included:plan.sourceConfig?.includes.join(", ")||"",excluded:plan.sourceConfig?.excludes.join(", ")||""},eventName:"backup_failed"};return JSON.stringify(payload)}buildHTMLContent(data){const startDate=new Date(data.startTime?data.startTime:0).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"}),endDate=new Date(data.endTime?data.endTime:0).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"}),storageTypeName=data.storageType?providers[data.storageType]?.name||data.storageType:"",templateString=loadBackupTemplate("BackupFailedNotification.ejs"),renderedBody=ejs.render(templateString,{...data,appUrl:configService.config.APP_URL,storageTypeName:storageTypeName,startDate:startDate,endDate:endDate,formatBytes:formatBytes,formatDuration:formatDuration,formatNumberToK:formatNumberToK});return this.applyEmailTemplate(renderedBody,{appTitle:configService.config.APP_TITLE||"Pluton",preHeader:`Backup Failed: ${data.plan.title}`,className:"content--error"})}}
|
|
1
|
+
import ejs from"ejs";import{configService}from"../../../../services/ConfigService";import{providers}from"../../../../utils/providers";import{formatBytes,formatDuration,formatNumberToK}from"../../../../utils/formatter";import{BaseNotification}from"../../../BaseNotification";import{loadBackupTemplate}from"../../../templateLoader";export class BackupFailedNotification extends BaseNotification{constructor(data){super(),this.subject=`Backup Failed: ${data.plan.title}`,this.contentType=data.output||"html",this.content=this.buildContent(data)}buildContent(data){return"json"===this.contentType?this.buildJSONContent(data):this.buildHTMLContent(data)}buildJSONContent(data){const{appTitle:appTitle,deviceName:deviceName,storageName:storageName,storageType:storageType,plan:plan,stats:stats,startTime:startTime,endTime:endTime,error:error}=data,payload={appTitle:appTitle,deviceName:deviceName,storageName:storageName,storageType:storageType,storagePath:plan.storagePath||"",stats:stats,startTime:startTime,endTime:endTime,error:error,planID:plan.id,planTitle:plan.title,planType:plan.method,planSource:{included:plan.sourceConfig?.includes.join(", ")||"",excluded:plan.sourceConfig?.excludes.join(", ")||""},replicationStorages:plan.settings.replication?.enabled&&plan.settings.replication?.storages?plan.settings.replication.storages.length:0,eventName:"backup_failed"};return JSON.stringify(payload)}buildHTMLContent(data){const startDate=new Date(data.startTime?data.startTime:0).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"}),endDate=new Date(data.endTime?data.endTime:0).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric"}),storageTypeName=data.storageType?providers[data.storageType]?.name||data.storageType:"",templateString=loadBackupTemplate("BackupFailedNotification.ejs"),renderedBody=ejs.render(templateString,{...data,appUrl:configService.config.APP_URL,storageTypeName:storageTypeName,startDate:startDate,endDate:endDate,formatBytes:formatBytes,formatDuration:formatDuration,formatNumberToK:formatNumberToK,replicationStorages:data.plan.settings.replication?.enabled&&data.plan.settings.replication?.storages?data.plan.settings.replication.storages.length:0});return this.applyEmailTemplate(renderedBody,{appTitle:configService.config.APP_TITLE||"Pluton",preHeader:`Backup Failed: ${data.plan.title}`,className:"content--error"})}}
|