
    i                         d dl Z d dlmZmZ d dl d dlZddlmZ  G d dej                  j                  j                  j                        Zy)    N)	timedeltadatetime)*   )BackupTarManagerc                   ^     e Zd ZdZg dZe e       defd              Z fdZ	 fdZ
 xZS )	CmfBackup0   )listslistcreategetsgetcountobj_idc                    t         j                  |       }t        j                  d|j                  j
                         t        j                  ddgddd      }|j                  dk(  r d|j                  vr|j                  j                         }t        j                  d	      }|D ]  }|j                  |      }|st        j                  d
|j                  j
                         |j                  d      |_        |j                  j!                  d      d   |_        d|_        t         j'                  |j                  j
                        |_        t*        j                  j-                  |j                  j
                        dz  |_        t        j                  d|j                  j
                         t1        |j"                  j
                        }|j3                  t4        j6                  |j                  j
                  f       t        j                  d|j                  j
                         |j9                          t         j;                  d|d        y  d|_        |j9                          t        j                  d|j                  j
                         t         j;                  d|d       y )Nzdb_backup: start, id=%sz/opt/bin/pg_backupbackupi  T)timeoutcapture_outputtextr   ErrorzSuccess backup (.+)z&db_backup: successfuly finished, id=%s   /DONEi   ztar_index: start, id=%s)name)
root_pathsz&tar_index: successfuly finished, id=%su,   Резервная копия созданаu   Резервная копия данных платформы успешно создана. Копия доступна в разделе Администрирование → Резервное копирование.)objr   ERRORz%db_backup: finished with error, id=%su;   Ошибка создания резервной копииu   Не удалось создать резервную копию данных платформы. Попробуйте повторить попытку позже или обратитесь в поддержку.)cmfutilget_obj_by_idlogginginfoidvalue
subprocessrun
returncodestdout
splitlinesrecompilesearchgrouppathsplitr   statushash_file_md5hashosgetsizesizer   generate_tar_index_from_pathsconfig
UPLOAD_DIRsaveadmin_alert)r   r   resmessagespatternmessagematchbackup_managers           %./modules/backup/models/cmf_backup.py_create_backupzCmfBackup._create_backup   s    ##F+.=nn!8,D

 >>Q7#**#<zz,,.Hjj!78G# w/LL!I366<<X${{1~CH"xx~~c226CH!'CJ&44SXX^^DCH!wwsxx~~>+NCHLL!:CFFLLI%5388>>%JN"@@$*$5$5sxx~~#F A  LL!I366<<XHHJ''FC^ (  7: 

<cffllKIsG 	 	
    c                 *    t         |          g dz   S )N)r1   r/   r6   r3   )supersave_preload_fields)self	__class__s    rB   rG   zCmfBackup.save_preload_fieldsK   s    w*,/QQQrD   c                 j   t         j                  j                  st        dd       | j                  rt        j                         }t        | j                        }||z
  }t        |       j                  dd|gdd| j                  gg d	gdg
      }|rY||j                  z
  }||z
  }|j                         dz  }	t        |	dz        }
t        |	dz        }d|
 d| d}t        |d       t        | @  |i |}t#        | j$                  |j                  g       |S t        | @  |i |}|S )Nuc   Только администратор может создавать резервные копииT)abort)hourscmf_created_at>r$   !=)r1   rO   r   )filterfields<   u   Частота резервного копирования ограничена. Примерное время до следующего разрешенного резервного копирования: u    ч u    мин. Пожалуйста, попробуйте позже или обратитесь в службу поддержки, если ошибка сохраняется.)args)gcurrent_personis_admin	cmf_alertis_newr   nowr   BACKUP_INTERVAL_TTLtyper   r$   rM   total_secondsintrF   r:   schedule_deferred_jobrC   )rH   rS   kwargsrY   backup_intervallast_48_hoursprev_backuptime_since_backupremaining_timetotal_minutesrL   minutesmsginstancerI   s                 rB   r:   zCmfBackup.saveN   sZ   (({  DH  I;;,,.C'd.F.FGO/1Mt*..%sM:4)-
 )) ) K $'+*D*D$D!!03D!D . < < >" DMR/0mb01UgT' +zz  #T*w|T4V4H!$"5"5X[[MJ  w|T4V4HrD   )__name__
__module____qualname__rZ   api_methodsstaticmethodcmf_deferred_jobstrrC   rG   r:   __classcell__)rI   s   @rB   r	   r	   
   sG    K 2
s 2
  2
hR# #rD   r	   )r&   r   r   cmf.include modules.backup.fields.cmf_backupmodulesmanagerr   r   rQ   
cmf_backupr	    rD   rB   <module>rw      s8     (  ' &g%%00:: grD   