# -*- coding: utf-8 -*- # Copyright (c) 2019, Frappe Technologies and contributors # For license information, please see license.txt from __future__ import unicode_literals import frappe import glob import os from frappe.utils import split_emails, get_backups_path def send_email(success, service_name, doctype, email_field, error_status=None): recipients = get_recipients(doctype, email_field) if not recipients: frappe.log_error("No Email Recipient found for {0}".format(service_name), "{0}: Failed to send backup status email".format(service_name)) return if success: if not frappe.db.get_value(doctype, None, "send_email_for_successful_backup"): return subject = "Backup Upload Successful" message = """

Backup Uploaded Successfully!

Hi there, this is just to inform you that your backup was successfully uploaded to your {0} bucket. So relax!

""".format(service_name) else: subject = "[Warning] Backup Upload Failed" message = """

Backup Upload Failed!

Oops, your automated backup to {0} failed.

Error message: {1}

Please contact your system manager for more information.

""".format(service_name, error_status) frappe.sendmail(recipients=recipients, subject=subject, message=message) def get_recipients(doctype, email_field): if not frappe.db: frappe.connect() return split_emails(frappe.db.get_value(doctype, None, email_field)) def get_latest_backup_file(with_files=False): def get_latest(file_ext): file_list = glob.glob(os.path.join(get_backups_path(), file_ext)) return max(file_list, key=os.path.getctime) latest_file = get_latest('*.sql.gz') 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 def get_file_size(file_path, unit): if not unit: unit = 'MB' file_size = os.path.getsize(file_path) memory_size_unit_mapper = {'KB': 1, 'MB': 2, 'GB': 3, 'TB': 4} i = 0 while i < memory_size_unit_mapper[unit]: file_size = file_size / 1000.0 i += 1 return file_size def validate_file_size(): frappe.flags.create_new_backup = True latest_file = get_latest_backup_file() file_size = get_file_size(latest_file, unit='GB') if file_size > 1: frappe.flags.create_new_backup = False