)i<xSrSSKJr SSKJr SSKJrJrJrJr SSK r SSK J r SSK J r SSKJr "S S 5rg) zt Backup Module - Integration with Automation Daemon Manages backup operations, scheduling, and database integration )Path)datetime)DictAnyOptionalCallableN)logger)Database)TimeMachineBackupc$\rSrSrSrS\4SjrS\S\\ 4Sjr SS\S \\ S \\ S\ \ \44S jjrSS\S \\S \\S\ \ \44SjjrS\S\ \ \44SjrSS\S \ S\ S\ S\\ S\ \ \44 SjjrS\S\S\ \ \44SjrSrSrg) BackupModulezc Backup module for unified daemon Integrates TimeMachineBackup with database and scheduling system dbcJXl0Ul[R"S5 g)zO Initialize backup module Args: db: Database instance for CRUD operations zBackupModule initializedN)rbackup_enginesr info)selfrs 3C:\PYTHON\Scheduler\modules\backup\backup_module.py__init__BackupModule.__init__s<> ./ profile_idreturncXR;aURU$URRU5nU(d[R"SUS35 g[ USS9nX0RU'[R "SUSUS35 U$![a&n[R"S USU35 SnAgSnAff=f) z Get or create backup engine for a profile Args: profile_id: Backup profile ID Returns: TimeMachineBackup instance or None if profile not found Profile not foundN backup_root)rz"Created backup engine for profile : name+Failed to create backup engine for profile )rrget_backup_profiler errorr r Exception)rrprofileenginees r get_engineBackupModule.get_engine!s ,, ,&&z2 2'',,Z8 LL8Jr?total_size_byteszBackup operation  completed successfully)rCr=r>r?rDduration_seconds)r-rArr)stats failed: failedrAr2rB error_messager-rArr")rr!r r"warningr'rnowcreate_backup_operationstrftimer isinstancestrjsonloadsget create_backupmetadatar#update_backup_operation total_seconds)rrr)r*r$ error_msgr%r3rAr5r6 backup_inforBr&s rexecute_backupBackupModule.execute_backup?s$'',,Z8":,j9I LL #$y9 9y!":,l;I NN9 %$y9 9,Ej\RI LL #$y9 9\\^ ww66!##Y1D1DEV1W0X'Y! 7   0mJQ_abAcc(__^Q?(__^Q?*/?C!,q!A ,  KK+L>9PQ R ,(*#.??>1#E XfhiHj#j$/OONA$F$/OONA$F&1oo6F&J(3 a(H)1)>(M(M(O    AI LL,\N)I;O P GG + +)!' , ! ,("   s HL-- N7ANNNkeepolder_than_daysc6URRU5nU(d!SUS3n[R"U5 SUS.$UR U5nU(d SU3n[R"U5 SUS.$[ R "5nURRUSSUS9n[R"S US U35 URX#S 9 URRUS [ R "5S 9 [R"SUS35 SUUS.$![agn [U 5n[R"SUSU35 URRUS[ R "5US9 SUUUS.sSn A $Sn A ff=f)z Execute backup pruning operation Args: profile_id: Backup profile ID keep: Keep only N most recent backups older_than_days: Remove backups older than N days Returns: Dict with operation results rrFr,r pruner0rr1r2r3zStarting prune operation r4)r^r_r<rAr2rBzPrune operation rETr-rArrHrIrJrLN) rr!r r"r'rrNrOr prune_backupsrXr#rR) rrr^r_r$rZr%r3rAr&s r execute_pruneBackupModule.execute_prunes'',,Z8":,j9I LL #$y9 9,Ej\RI LL #$y9 9\\^ ww66!"! 7   / ~]:,WX#   d L GG + +)"! ,  KK*<.8OP Q ,(   AI LL+L>9+N O GG + +)!' , ! ,("   s AD'' F1AF FFc8URRU5nU(d!SUS3n[R"U5 SUS.$UR U5nU(d SU3n[R"U5 SUS.$[ R "5nURRUSSUS9n[R"S US U35 UR5 URRUS [ R "5S 9 [R"S US35 SUUS.$![agn[U5n[R"S USU35 URRUS[ R "5US9 SUUUS.sSnA$SnAff=f)z Execute garbage collection on backup store Args: profile_id: Backup profile ID Returns: Dict with operation results rrFr,r gcr0rbzStarting GC operation r4r<rcz GC operation rETrdrHrIrJrLN) rr!r r"r'rrNrOrgc_storerXr#rR)rrr$rZr%r3rAr&s r execute_gcBackupModule.execute_gcs'',,Z8":,j9I LL #$y9 9,Ej\RI LL #$y9 9\\^ ww66!! 7   ,\N- |TU#  OO  GG + +)"! ,  KK- ~5LM N ,(   AI LL=i {K L GG + +)!' , ! ,("   s AD(( F2AFFF restore_typedestination_path source_pathc  URRU5nU(d!SUS3n[R"U5 SUS.$UR U5nU(d SU3n[R"U5 SUS.$[ R "5n URRUUUUUSU S9n [R"SU S U35 US :XaURX$S 9 O`US :Xa#U(d [S 5eURX%US9 O7US:Xa#U(d [S5eURX%US9 O[SU35eURRU S[ R "5S9 [R"SU S35 SU UUS.$![agn [U 5n[R"SU SU35 URRU S[ R "5US9 SU UUS.sSn A $Sn A ff=f)aP Execute backup restore operation Args: profile_id: Backup profile ID backup_name: Name of backup to restore restore_type: 'full', 'file', or 'directory' destination_path: Where to restore files source_path: Source file/directory within backup (for file/directory restore) Returns: Dict with operation results rrFr,r r0)rr)rmrornr2r3zStarting restore operation r4full) restore_pathfilez%source_path required for file restore) restore_to directoryz*source_path required for directory restorezInvalid restore_type: r<) restore_idr2rBzRestore operation rET)r-rvrr)rHrI)rvr2rBrK)r-rvrr"N)rr!r r"r'rrNcreate_backup_restorerrestore_backup ValueError restore_filerestore_directoryupdate_backup_restorer#rR) rrr)rmrnror$rZr%r3rvr&s rexecute_restoreBackupModule.execute_restoreHs!*'',,Z8":,j9I LL #$y9 9,Ej\RI LL #$y9 9\\^ WW22!#%#-!3   1*]:,WX/ v%%%k%Q'"$%LMM##KIY#Z,"$%QRR((N^(_ #9,!HII GG ) )%"! *  KK,ZL8OP Q ((*   AI LL-j\9+N O GG ) )%!' * !(("   s CF HAG>8H>H schedule_id target_idc\[R"SUSU35 URUS9nU$)z Execute scheduled backup operation Called by daemon when a schedule triggers Args: schedule_id: Schedule ID that triggered target_id: Backup profile ID (from schedule.target_id) Returns: Dict with execution results z Schedule z triggered for backup profile )r)r rr\)rrrresults r schedule_itemBackupModule.schedule_items8  i },J9+VW$$ $: rcdURR5 [R"S5 g)zCleanup module resourceszBackupModule cleanup completedN)rclearr r)rs rcleanupBackupModule.cleanups! !!# 45r)rr)NN)N)__name__ __module__ __qualname____firstlineno____doc__r rintrr r'rRrrrr\rfrkr}rr__static_attributes__rrr r s` 08 0SX6G-HB&*04 yyc]y$H- y c3h yvFF8C=FZbcfZgFswx{~AyAtBFPDSDT#s(^DX&* ^^^ ^  ^ c] ^ c3h^@c3h&6rr )rpathlibrrtypingrrrrrSlogurur core.databaser modules.backup.backup_enginer r rrrrs0 00 ":n6n6r