DevOps_Innopolis
/
backupctl.py
89 строк · 3.3 Кб
1#!/usr/bin/python3
2
3import argparse4import shutil5import os6import sys7import csv8from datetime import datetime9
10LOG_FILE = '/home/niki/dz11/journal.csv'11
12
13def backup(source_dir, backup_dir, compralg):14"""Создание резервной копии всего содержимого директории source"""15
16# Проверить, что обе директории существуют17if not (os.path.isabs(source_dir) and os.path.isdir(source_dir)):18print('Directory %s doesn\'t exitst' % (source_dir))19return20if not (os.path.isabs(backup_dir) and os.path.isdir(backup_dir)):21print('Directory %s doesn\'t exitst' % (backup_dir))22return23
24# Взять название исходной папки25if source_dir[-1] == '/':26src_folder = source_dir.split('/')[-2]27else:28src_folder = source_dir.split('/')[-1]29
30# Определить название архива-бэкапа31name = src_folder + '_' + str(datetime.utcnow())32archive_name = os.path.expanduser(os.path.join(backup_dir, name))33
34shutil.make_archive(archive_name, compralg, backup_dir)35
36print('The backup was created in ' + os.path.dirname(backup_dir))37
38
39def logger(journal):40"""Логирование событий"""41file_exists = os.path.isfile(journal)42with open(journal, 'a', newline='') as csvfile:43fieldnames = ['Directory', 'Path_to_backup', 'Time_of_creating', 'Result']44writer = csv.DictWriter(csvfile, fieldnames=fieldnames)45if not file_exists:46writer.writeheader()47writer.writerow({'Directory': source_dir, 'Path_to_backup': backup_dir, 'Time_of_creating': str(datetime.utcnow()), 'Result': result})48
49
50if __name__ == "__main__":51
52parser = argparse.ArgumentParser(description='Save backup of directory')53parser.add_argument('-d', '--directory',54dest='source_dir',55type=str,56required=True,57help='It\'s a directory for backupping')58parser.add_argument('-o', '--output',59dest='backup_dir',60type=str,61required=True,62help='It\'s a directory with backups')63parser.add_argument('-a', '--compralg',64dest='compralg',65type=str,66default='gztar',67required=False,68help='Сompression algorithm, please enter \'zip\' for using zip or \'targz\' for using targz \n'69r'You can also use "tar", "bztar" or "xztar"')70parser.add_argument('-j', '--log_journal',71dest='journal',72default=LOG_FILE,73required=False,74help='It\'s a journal with logs')75args = parser.parse_args()76
77source_dir = args.source_dir78backup_dir = args.backup_dir79journal = args.journal80compralg = args.compralg81result = 'success'82
83try:84backup(source_dir, backup_dir, compralg)85except Exception as e:86print(e, file=sys.stderr)87result = 'fail'88finally:89logger(journal)90