161 lines
4.9 KiB
Python
161 lines
4.9 KiB
Python
import os
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
from django.core.management import call_command
|
|
|
|
from horilla import settings
|
|
|
|
from .gdrive import *
|
|
|
|
# from horilla.settings import DBBACKUP_STORAGE_OPTIONS
|
|
from .models import *
|
|
from .pgdump import *
|
|
from .zip import *
|
|
|
|
scheduler = BackgroundScheduler()
|
|
|
|
# def backup_database():
|
|
# folder_path = DBBACKUP_STORAGE_OPTIONS['location']
|
|
# local_backup = LocalBackup.objects.first()
|
|
# if folder_path and local_backup:
|
|
# DBBACKUP_STORAGE_OPTIONS['location'] = local_backup.backup_path
|
|
# folder_path = DBBACKUP_STORAGE_OPTIONS['location']
|
|
# if local_backup.backup_db:
|
|
# call_command('dbbackup')
|
|
# if local_backup.backup_media:
|
|
# call_command("mediabackup")
|
|
# files = sorted(os.listdir(folder_path), key=lambda x: os.path.getctime(os.path.join(folder_path, x)))
|
|
|
|
# # Remove all files except the last two
|
|
# if len(files) > 2:
|
|
# for file_name in files[:-2]:
|
|
# file_path = os.path.join(folder_path, file_name)
|
|
# if os.path.isfile(file_path):
|
|
# try:
|
|
# os.remove(file_path)
|
|
# except:
|
|
# pass
|
|
|
|
|
|
# def start_backup_job():
|
|
# """
|
|
# Start the backup job based on the LocalBackup configuration.
|
|
# """
|
|
# # Check if any LocalBackup object exists
|
|
# if LocalBackup.objects.exists():
|
|
# local_backup = LocalBackup.objects.first()
|
|
|
|
# # Remove existing job if it exists
|
|
# try:
|
|
# scheduler.remove_job('backup_job')
|
|
# except:
|
|
# pass
|
|
|
|
# # Add new job based on LocalBackup configuration
|
|
# if local_backup.interval:
|
|
# scheduler.add_job(backup_database, 'interval', seconds=local_backup.seconds, id='backup_job')
|
|
# else:
|
|
# scheduler.add_job(backup_database, trigger='cron', hour=local_backup.hour, minute=local_backup.minute, id='backup_job')
|
|
# # Start the scheduler if it's not already running
|
|
# if not scheduler.running:
|
|
# scheduler.start()
|
|
# else:
|
|
# stop_backup_job()
|
|
|
|
|
|
# def stop_backup_job():
|
|
# """
|
|
# Stop the backup job if it exists.
|
|
# """
|
|
# try:
|
|
# scheduler.remove_job('backup_job')
|
|
# except:
|
|
# pass
|
|
|
|
|
|
# def restart_backup_job():
|
|
# """
|
|
# Restart the backup job by stopping it and starting it again.
|
|
# """
|
|
# stop_backup_job()
|
|
# start_backup_job()
|
|
|
|
|
|
def google_drive_backup():
|
|
if GoogleDriveBackup.objects.exists():
|
|
google_drive = GoogleDriveBackup.objects.first()
|
|
service_account_file = google_drive.service_account_file.path
|
|
gdrive_folder_id = google_drive.gdrive_folder_id
|
|
if google_drive.backup_db:
|
|
db = settings.DATABASES["default"]
|
|
dump_postgres_db(
|
|
db_name=db["NAME"],
|
|
username=db["USER"],
|
|
output_file="backupdb.dump",
|
|
password=db["PASSWORD"],
|
|
)
|
|
upload_file("backupdb.dump", service_account_file, gdrive_folder_id)
|
|
os.remove("backupdb.dump")
|
|
if google_drive.backup_media:
|
|
folder_to_zip = settings.MEDIA_ROOT
|
|
output_zip_file = "media.zip"
|
|
zip_folder(folder_to_zip, output_zip_file)
|
|
upload_file("media.zip", service_account_file, gdrive_folder_id)
|
|
os.remove("media.zip")
|
|
|
|
|
|
def start_gdrive_backup_job():
|
|
"""
|
|
Start the backup job based on the LocalBackup configuration.
|
|
"""
|
|
# Check if any Gdrive Backup object exists
|
|
if GoogleDriveBackup.objects.exists():
|
|
gdrive_backup = GoogleDriveBackup.objects.first()
|
|
|
|
# Remove existing job if it exists
|
|
try:
|
|
scheduler.remove_job("backup_job")
|
|
except:
|
|
pass
|
|
# Add new job based on Gdrive Backup configuration
|
|
if gdrive_backup.interval:
|
|
scheduler.add_job(
|
|
google_drive_backup,
|
|
"interval",
|
|
seconds=gdrive_backup.seconds,
|
|
id="gdrive_backup_job",
|
|
)
|
|
else:
|
|
scheduler.add_job(
|
|
google_drive_backup,
|
|
trigger="cron",
|
|
hour=gdrive_backup.hour,
|
|
minute=gdrive_backup.minute,
|
|
id="gdrive_backup_job",
|
|
)
|
|
|
|
# Start the scheduler if it's not already running
|
|
if not scheduler.running:
|
|
scheduler.start()
|
|
|
|
else:
|
|
stop_gdrive_backup_job()
|
|
|
|
|
|
def stop_gdrive_backup_job():
|
|
"""
|
|
Stop the backup job if it exists.
|
|
"""
|
|
try:
|
|
scheduler.remove_job("gdrive_backup_job")
|
|
except:
|
|
pass
|
|
|
|
|
|
# def restart_gdrive_backup_job():
|
|
# """
|
|
# Restart the backup job by stopping it and starting it again.
|
|
# """
|
|
# stop_gdrive_backup_job()
|
|
# start_gdrive_backup_job()
|