118 lines
4.9 KiB
Python
Executable File
118 lines
4.9 KiB
Python
Executable File
import paramiko
|
|
import sys
|
|
import json
|
|
import logging
|
|
import unicodedata
|
|
logging.basicConfig(
|
|
format='%(asctime)s %(levelname)-8s %(message)s',
|
|
level=logging.INFO,
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
)
|
|
|
|
def create_remote(config, settings):
|
|
type_r = config["remote_type"]
|
|
if type_r == "sftp":
|
|
import remote_sftp
|
|
remote = remote_sftp.sftp_remote(config, settings)
|
|
elif type_r == "local_dir":
|
|
import remote_local_dir
|
|
remote = remote_local_dir.local_dir_remote(config)
|
|
return remote
|
|
|
|
def distribute_files(path_list, dest):
|
|
for pathfile in path_list:
|
|
if not str(pathfile).endswith('.dem'):
|
|
continue
|
|
log_msg = "uploading demo: " + str(pathfile)
|
|
logging.info(log_msg)
|
|
if not dest.put(pathfile, dest.path):
|
|
log_msg = ''.join(["failed putting file: ", str(pathfile)])
|
|
logging.warning(log_msg)
|
|
sys.exit(1)
|
|
|
|
def load_config(config_file):
|
|
try:
|
|
with open(config_file) as infile:
|
|
try:
|
|
json_dict = json.load(infile)
|
|
#logging.info(json_dict)
|
|
return json_dict["remotes"], json_dict["jobs"], json_dict["settings"]
|
|
except json.JSONDecodeError as e:
|
|
logging.warning('exception caught: ', exc_info = True)
|
|
sys.exit(1)
|
|
except FileNotFoundError:
|
|
logging.warning('exception caught: ', exc_info = True)
|
|
sys.exit(1)
|
|
|
|
def main():
|
|
#runs backups
|
|
config_file = 'config_backups.json'
|
|
if sys.argv[1:]:
|
|
config_file = sys.argv[1]
|
|
remotes, jobs, settings = load_config(config_file)
|
|
for index, job in enumerate(jobs):
|
|
src = create_remote(remotes[job["src"]], settings)
|
|
dest = create_remote(remotes[job["dest"]], settings)
|
|
dest2 = create_remote(remotes[job["dest2"]], settings)
|
|
if index == 0:
|
|
#delete old files (not very adaptable, cant handle dirs in dirs)
|
|
dest.delete_remote_zips("/home/nonroot/backups/")
|
|
dest2.delete_remote_zips("/home/autismbot5/backups/")
|
|
if "backup_local" in job["job_name"]:
|
|
zip_file_path = src.zip_local_directory(job)
|
|
if not dest.put(zip_file_path, dest.path):
|
|
log_msg = ''.join(["failed putting file: ", str(pathfile)])
|
|
logging.warning(log_msg)
|
|
sys.exit(1)
|
|
if not dest2.put(zip_file_path, dest2.path):
|
|
log_msg = ''.join(["failed putting file: ", str(pathfile)])
|
|
logging.warning(log_msg)
|
|
sys.exit(1)
|
|
src.delete_local_zip(zip_file_path)
|
|
elif "mysqldump" in job["job_name"]:
|
|
src.remote_channel_command(job, "mysqldump")
|
|
zipname = src.remote_channel_command(job, "tar_mysqldump")
|
|
if zipname is None:
|
|
logging.warning(f'failed zipping remote directory at job {job}')
|
|
sys.exit(1)
|
|
local_zip_path_name = src.get_remote_files(job, zipname)
|
|
if local_zip_path_name is None:
|
|
logging.warning(f'failed getting remote zip at job {job}')
|
|
src.delete_remote_zip_temp(zipname)
|
|
sys.exit(1)
|
|
src.delete_remote_zip_temp(zipname)
|
|
if not dest.put(local_zip_path_name, dest.path):
|
|
logging.warning(f'failed putting local zip {local_zip_path_name} at job {job}')
|
|
src.delete_local_zip(local_zip_path_name)
|
|
sys.exit(1)
|
|
if not dest2.put(local_zip_path_name, dest2.path):
|
|
logging.warning(f'failed putting local zip {local_zip_path_name} at job {job}')
|
|
src.delete_local_zip(local_zip_path_name)
|
|
sys.exit(1)
|
|
src.delete_local_zip(local_zip_path_name)
|
|
elif "backup_remote" in job["job_name"]:
|
|
zipname = src.remote_channel_command(job, "tar_recursive")
|
|
if zipname is None:
|
|
logging.warning(f'failed zipping remote directory at job {job}')
|
|
sys.exit(1)
|
|
local_zip_path_name = src.get_remote_files(job, zipname)
|
|
if local_zip_path_name is None:
|
|
logging.warning(f'failed getting remote zip at job {job}')
|
|
src.delete_remote_zip_temp(zipname)
|
|
sys.exit(1)
|
|
src.delete_remote_zip_temp(zipname)
|
|
if not dest.put(local_zip_path_name, dest.path):
|
|
logging.warning(f'failed putting local zip {local_zip_path_name} at job {job}')
|
|
src.delete_local_zip(local_zip_path_name)
|
|
sys.exit(1)
|
|
if not dest2.put(local_zip_path_name, dest2.path):
|
|
logging.warning(f'failed putting local zip {local_zip_path_name} at job {job}')
|
|
src.delete_local_zip(local_zip_path_name)
|
|
sys.exit(1)
|
|
src.delete_local_zip(local_zip_path_name)
|
|
logging.info(('finished job: ', job))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|