Kaynağa Gözat

[IMP] filestore backup

robert 5 yıl önce
ebeveyn
işleme
aed91fd844
2 değiştirilmiş dosya ile 50 ekleme ve 15 silme
  1. 48 13
      backup.py
  2. 2 2
      token.pickle

+ 48 - 13
backup.py

@@ -8,7 +8,7 @@ import docker
 import tarfile
 import time
 from googleapiclient.discovery import build
-from googleapiclient.http import MediaIoBaseUpload
+from googleapiclient.http import MediaIoBaseUpload, MediaFileUpload
 from google_auth_oauthlib.flow import InstalledAppFlow
 from google.auth.transport.requests import Request
 from docker.errors import NotFound, APIError
@@ -140,7 +140,7 @@ def create_postgres_backup(database, docker_client):
     if pg_container is None or pg_container.status == 'exited':
         return (False, None)
 
-    tmp_file = '%s_%s.tar' % (database, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
+    tmp_file = '%s_database_%s.tar' % (database, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
     command = 'pg_dump -U %s -d %s -F tar -C -b -c -f %s' % (POSTGRES_USER, database, tmp_file)
     
     result = pg_container.exec_run(command)
@@ -153,15 +153,24 @@ def create_postgres_backup(database, docker_client):
 '''
 '''
 def create_odoo_filestore_backup(folder_name):
+    root_path = './tmp'
+
+    if not os.path.exists(root_path):
+        os.mkdir(root_path)
+
+    tar_name = '%s_filestore_%s.tar' % (folder_name, datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))
+    tar_path = os.path.join(root_path, tar_name)
     filestore_path = os.path.join(ODOO_PATH, folder_name, 'files', 'filestore', folder_name)
 
-    with tarfile.open(os.path.join(filestore_path, folder_name + '.tar'), mode='w') as filestore_tar:
-        filestore_tar.add(filestore_path)
-        filestore_tar.close()
+    with tarfile.open(tar_path, mode='w') as tar:
+        tar.add(filestore_path, os.path.basename(filestore_path))
+        tar.close()
+
+    return os.path.abspath(tar_path)
 
 '''
 '''
-def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
+def upload_postgres_to_drive(backup_file_name, backup_folder_id, docket_client, service):
     if service == None:
         return None
 
@@ -182,7 +191,7 @@ def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
         'name': backup_file_name,
         'parents': [backup_folder_id]
     }
-    backup_media = MediaIoBaseUpload(raw_data, mimetype='application/tar', chunksize=5*(1024*1024))
+    backup_media = MediaIoBaseUpload(raw_data, mimetype='application/tar', chunksize=2*(1024*1024))
 
     result = service.files().create(body=backup_metadata, media_body=backup_media).execute()
     raw_data.close()
@@ -191,7 +200,25 @@ def upload_to_drive(backup_file_name, backup_folder_id, docket_client, service):
 
 '''
 '''
-def delete_backup_file(backup_name, docker_client):
+def upload_filestore_to_drive(backup_path, backup_folder_id, service):
+    if service == None:
+        return None
+
+    backup_name = os.path.basename(backup_path)
+    
+    backup_metadata = {
+        'name': backup_name,
+        'parents': [backup_folder_id]
+    }
+
+    backup_media = MediaFileUpload(backup_path, mimetype='application/tar', chunksize=2*(1024*1024))
+
+    result = service.files().create(body=backup_metadata, media_body=backup_media).execute()
+    return result.get('id')
+
+'''
+'''
+def delete_postgres_backup(backup_name, docker_client):
     pg_container = get_pg_container(docker_client)
 
     if pg_container is None or pg_container.status == 'exited':
@@ -204,6 +231,11 @@ def delete_backup_file(backup_name, docker_client):
         return False
 
     return True
+
+'''
+'''
+def delete_filestore_backup(backup_path):
+    os.remove(backup_path)
     
 '''
 '''
@@ -235,16 +267,19 @@ def run_backup():
 
         if not backup_ok:
             if backup_name:
-                delete_backup_file(backup_name, docker_client)
+                delete_postgres_backup(backup_name, docker_client)
 
             continue
         
-        upload_to_drive(backup_name, folder_id, docker_client, service)
-        delete_backup_file(backup_name, docker_client)
+        upload_postgres_to_drive(backup_name, folder_id, docker_client, service)
+        delete_postgres_backup(backup_name, docker_client)
+
+        filestore_path = create_odoo_filestore_backup(db)
+        upload_filestore_to_drive(filestore_path, folder_id, service)
+        delete_filestore_backup(filestore_path)
 
         time.sleep(1)
 
     docker_client.close()
 
-# run_backup()
-create_odoo_filestore_backup('ferresur')
+run_backup()

+ 2 - 2
token.pickle

@@ -23,7 +23,7 @@ asS'_id_token'
 p11
 NsS'token'
 p12
-Vya29.GlwcB8yxvgoJBcnV_ceejCqh-KBzHoWGlNXhlPzAzt5FHBqg1RqS4Br-YC9dQ6S-K-1zPcC0uvCVdFCy7tp2YA3byWgDb2uvxKwRB7z8kPRj9iMBkgzxqZwCY0lvsA
+Vya29.GlwfBzUjUxnCzuXvpRk-5VCBGnrgOwbELFvFI-hwpyZq-ygE2nz_IAcJub4ZuhWAA6Zw8s0oB42uqT51CGL0fpAPgSjYDcMu_Ewk58YiMI_WoW1tngcKlR8NtIwhmw
 p13
 sS'_refresh_token'
 p14
@@ -42,7 +42,7 @@ p20
 cdatetime
 datetime
 p21
-(S'\x07\xe3\x06\x04\x15\r0\x01\xf7\xca'
+(S'\x07\xe3\x06\x05\x15\x120\x01O\xbf'
 p22
 tp23
 Rp24