##// END OF EJS Templates
added pygments webhelper
added pygments webhelper

File last commit:

r39:787e7d30 default
r98:01d0f363 default
Show More
backup_manager.py
88 lines | 3.0 KiB | text/x-python | PythonLexer
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 '''BACKUP MANAGER'''
Marcin Kuzminski
backup script for repositories
r25 import logging
from mercurial import config
import tarfile
import os
import datetime
import sys
Marcin Kuzminski
backup script update
r28 import subprocess
Marcin Kuzminski
Added removing of files from data
r33 logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s %(levelname)-5.5s %(message)s")
Marcin Kuzminski
backup script for repositories
r25
class BackupManager(object):
def __init__(self):
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 self.repos_path = None
self.backup_file_name = None
Marcin Kuzminski
backup script update
r28 self.id_rsa_path = '/home/pylons/id_rsa'
self.check_id_rsa()
Marcin Kuzminski
fixed the backup script path problems
r27 cur_dir = os.path.realpath(__file__)
Marcin Kuzminski
backup script for repositories
r25 dn = os.path.dirname
Marcin Kuzminski
fixed the backup script path problems
r27 self.backup_file_path = os.path.join(dn(dn(dn(cur_dir))), 'data')
Marcin Kuzminski
backup script for repositories
r25 cfg = config.config()
try:
Marcin Kuzminski
fixed the backup script path problems
r27 cfg.read(os.path.join(dn(dn(dn(cur_dir))), 'hgwebdir.config'))
Marcin Kuzminski
backup script for repositories
r25 except IOError:
logging.error('Could not read hgwebdir.config')
sys.exit()
self.set_repos_path(cfg.items('paths'))
logging.info('starting backup for %s', self.repos_path)
logging.info('backup target %s', self.backup_file_path)
if not os.path.isdir(self.repos_path):
raise Exception('Not a valid directory in %s' % self.repos_path)
Marcin Kuzminski
backup script update
r28 def check_id_rsa(self):
if not os.path.isfile(self.id_rsa_path):
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 logging.error('Could not load id_rsa key file in %s',
self.id_rsa_path)
Marcin Kuzminski
backup script update
r28 sys.exit()
Marcin Kuzminski
backup script for repositories
r25 def set_repos_path(self, paths):
repos_path = paths[0][1].split('/')
if repos_path[-1] in ['*', '**']:
repos_path = repos_path[:-1]
if repos_path[0] != '/':
repos_path[0] = '/'
self.repos_path = os.path.join(*repos_path)
def backup_repos(self):
today = datetime.datetime.now().weekday() + 1
Marcin Kuzminski
backup script update
r28 self.backup_file_name = "mercurial_repos.%s.tar.gz" % today
bckp_file = os.path.join(self.backup_file_path, self.backup_file_name)
Marcin Kuzminski
backup script for repositories
r25 tar = tarfile.open(bckp_file, "w:gz")
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 for dir_name in os.listdir(self.repos_path):
logging.info('backing up %s', dir_name)
tar.add(os.path.join(self.repos_path, dir_name), dir_name)
Marcin Kuzminski
backup script for repositories
r25 tar.close()
Marcin Kuzminski
Litle info messages update
r26 logging.info('finished backup of mercurial repositories')
Marcin Kuzminski
backup script for repositories
r25
Marcin Kuzminski
backup script update
r28
def transfer_files(self):
params = {
'id_rsa_key': self.id_rsa_path,
'backup_file_path':self.backup_file_path,
'backup_file_name':self.backup_file_name,
}
fix bug in arguments for command
r39 cmd = ['scp', '-l', '40000', '-i', '%(id_rsa_key)s' % params,
Marcin Kuzminski
backup script update
r28 '%(backup_file_path)s/%(backup_file_name)s' % params,
'root@192.168.2.102:/backups/mercurial' % params]
Marcin Kuzminski
Changed to blocking operation
r35 subprocess.call(cmd)
Marcin Kuzminski
backup script update
r28 logging.info('Transfered file %s to %s', self.backup_file_name, cmd[4])
Marcin Kuzminski
Added removing of files from data
r33
def rm_file(self):
Marcin Kuzminski
Added message when file removing
r36 logging.info('Removing file %s', self.backup_file_name)
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 os.remove(os.path.join(self.backup_file_path, self.backup_file_name))
Marcin Kuzminski
Added removing of files from data
r33
Marcin Kuzminski
backup script update
r28
Marcin Kuzminski
backup script for repositories
r25 if __name__ == "__main__":
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 B_MANAGER = BackupManager()
B_MANAGER.backup_repos()
B_MANAGER.transfer_files()
B_MANAGER.rm_file()
Marcin Kuzminski
backup script for repositories
r25