feat: take site_config backup

Co-authored-by: Chinmay D. Pai <chinmaydpai@gmail.com>
This commit is contained in:
Sahil Khan 2020-06-22 17:00:03 +05:30
parent 110a627dc2
commit 2a303d0ffd
5 changed files with 35 additions and 12 deletions

View file

@ -97,10 +97,12 @@ def backup_to_dropbox(upload_db_backup=True):
if frappe.flags.create_new_backup:
backup = new_backup(ignore_files=True)
filename = os.path.join(get_backups_path(), os.path.basename(backup.backup_path_db))
site_config = os.path.join(get_backups_path(), os.path.basename(backup.site_config_backup_path))
else:
filename = get_latest_backup_file()
filename, site_config = get_latest_backup_file()
upload_file_to_dropbox(filename, "/database", dropbox_client)
upload_file_to_dropbox(site_config, "/database", dropbox_client)
# delete older databases
if dropbox_settings['no_of_backups']:

View file

@ -190,12 +190,13 @@ def upload_system_backup_to_google_drive():
set_progress(1, "Backing up Data.")
backup = new_backup()
fileurl_backup = os.path.basename(backup.backup_path_db)
fileurl_site_config = os.path.basename(backup.site_config_backup_path)
fileurl_public_files = os.path.basename(backup.backup_path_files)
fileurl_private_files = os.path.basename(backup.backup_path_private_files)
else:
fileurl_backup, fileurl_public_files, fileurl_private_files = get_latest_backup_file(with_files=True)
fileurl_backup, fileurl_site_config, fileurl_public_files, fileurl_private_files = get_latest_backup_file(with_files=True)
for fileurl in [fileurl_backup, fileurl_public_files, fileurl_private_files]:
for fileurl in [fileurl_backup, fileurl_site_config, fileurl_public_files, fileurl_private_files]:
file_metadata = {
"name": fileurl,
"parents": [account.backup_folder_id]

View file

@ -115,19 +115,21 @@ def backup_to_s3():
backup = new_backup(ignore_files=False, backup_path_db=None,
backup_path_files=None, backup_path_private_files=None, force=True)
db_filename = os.path.join(get_backups_path(), os.path.basename(backup.backup_path_db))
site_config = os.path.join(get_backups_path(), os.path.basename(backup.site_config_backup_path))
if backup_files:
files_filename = os.path.join(get_backups_path(), os.path.basename(backup.backup_path_files))
private_files = os.path.join(get_backups_path(), os.path.basename(backup.backup_path_private_files))
else:
if backup_files:
db_filename, files_filename, private_files = get_latest_backup_file(with_files=backup_files)
db_filename, site_config, files_filename, private_files = get_latest_backup_file(with_files=backup_files)
else:
db_filename = get_latest_backup_file()
db_filename, site_config = get_latest_backup_file()
folder = os.path.basename(db_filename)[:15] + '/'
# for adding datetime to folder name
upload_file_to_s3(db_filename, folder, conn, bucket)
upload_file_to_s3(site_config, folder, conn, bucket)
if backup_files:
upload_file_to_s3(private_files, folder, conn, bucket)
upload_file_to_s3(files_filename, folder, conn, bucket)

View file

@ -50,13 +50,14 @@ def get_latest_backup_file(with_files=False):
return max(file_list, key=os.path.getctime)
latest_file = get_latest('*.sql.gz')
latest_site_config = get_latest('*.json')
if with_files:
latest_public_file_bak = get_latest('*-files.tar')
latest_private_file_bak = get_latest('*-private-files.tar')
return latest_file, latest_public_file_bak, latest_private_file_bak
return latest_file, latest_site_config, latest_public_file_bak, latest_private_file_bak
return latest_file
return latest_file, latest_site_config
def get_file_size(file_path, unit):
@ -76,7 +77,7 @@ def get_file_size(file_path, unit):
def validate_file_size():
frappe.flags.create_new_backup = True
latest_file = get_latest_backup_file()
latest_file, site_config = get_latest_backup_file()
file_size = get_file_size(latest_file, unit='GB')
if file_size > 1:

View file

@ -6,6 +6,7 @@
from __future__ import print_function, unicode_literals
import os
import json
from datetime import datetime
import frappe
@ -46,15 +47,16 @@ class BackupGenerator:
#Check if file exists and is less than a day old
#If not Take Dump
if not force:
last_db, last_file, last_private_file = self.get_recent_backup(older_than)
last_db, last_file, last_private_file, site_config_backup_path = self.get_recent_backup(older_than)
else:
last_db, last_file, last_private_file = False, False, False
last_db, last_file, last_private_file, site_config_backup_path = False, False, False, False
if not (self.backup_path_files and self.backup_path_db and self.backup_path_private_files):
self.set_backup_file_name()
if not (last_db and last_file and last_private_file):
if not (last_db and last_file and last_private_file and site_config_backup_path):
self.take_dump()
self.copy_site_config()
if not ignore_files:
self.zip_files()
@ -62,6 +64,7 @@ class BackupGenerator:
self.backup_path_files = last_file
self.backup_path_db = last_db
self.backup_path_private_files = last_private_file
self.site_config_backup_path = site_config_backup_path
def set_backup_file_name(self):
todays_date = now_datetime().strftime('%Y%m%d_%H%M%S')
@ -97,8 +100,10 @@ class BackupGenerator:
backup_path_files = this_file_path
elif "_database" in this_file_path:
backup_path_db = this_file_path
elif "site_config" in this_file_path:
site_config_backup_path = this_file_path
return (backup_path_db, backup_path_files, backup_path_private_files)
return (backup_path_db, backup_path_files, backup_path_private_files, site_config_backup_path)
def zip_files(self):
for folder in ("public", "private"):
@ -111,6 +116,18 @@ class BackupGenerator:
if self.verbose:
print('Backed up files', os.path.abspath(backup_path))
def copy_site_config(self):
todays_datetime = now_datetime().strftime('%Y%m%d_%H%M%S')
site_config_backup_path = os.path.join(get_backup_path(), "site_config_backup_{}.json".format(todays_datetime))
site_config_path = os.path.join(frappe.get_site_path(), "site_config.json")
site_config = {}
if os.path.exists(site_config_path):
site_config.update(frappe.get_file_json(site_config_path))
with open(site_config_backup_path, "w") as f:
f.write(json.dumps(site_config, indent=2))
f.flush()
self.site_config_backup_path = site_config_backup_path
def take_dump(self):
import frappe.utils