Mercurial > kallithea
comparison pylons_app/lib/backup_manager.py @ 434:bd3f341cad45
simplified and updated backup manager
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 27 Aug 2010 18:48:47 +0200 |
parents | 3782a6d698af |
children | 9fe5ca6d72f6 |
comparison
equal
deleted
inserted
replaced
433:aeafda5481e4 | 434:bd3f341cad45 |
---|---|
24 @author: marcink | 24 @author: marcink |
25 """ | 25 """ |
26 | 26 |
27 | 27 |
28 import logging | 28 import logging |
29 from mercurial import config | |
30 import tarfile | 29 import tarfile |
31 import os | 30 import os |
32 import datetime | 31 import datetime |
33 import sys | 32 import sys |
34 import subprocess | 33 import subprocess |
35 logging.basicConfig(level=logging.DEBUG, | 34 logging.basicConfig(level=logging.DEBUG, |
36 format="%(asctime)s %(levelname)-5.5s %(message)s") | 35 format="%(asctime)s %(levelname)-5.5s %(message)s") |
37 | 36 |
38 class BackupManager(object): | 37 class BackupManager(object): |
39 def __init__(self, id_rsa_path, repo_conf): | 38 def __init__(self, repos_location, rsa_key, backup_server): |
40 self.repos_path = None | 39 today = datetime.datetime.now().weekday() + 1 |
41 self.backup_file_name = None | 40 self.backup_file_name = "mercurial_repos.%s.tar.gz" % today |
42 self.id_rsa_path = id_rsa_path | 41 |
43 self.check_id_rsa() | 42 self.id_rsa_path = self.get_id_rsa(rsa_key) |
44 cur_dir = os.path.realpath(__file__) | 43 self.repos_path = self.get_repos_path(repos_location) |
45 dn = os.path.dirname | 44 self.backup_server = backup_server |
46 self.backup_file_path = os.path.join(dn(dn(dn(cur_dir))), 'data') | 45 |
47 cfg = config.config() | 46 self.backup_file_path = '/tmp' |
48 try: | 47 |
49 cfg.read(os.path.join(dn(dn(dn(cur_dir))), repo_conf)) | |
50 except IOError: | |
51 logging.error('Could not read %s', repo_conf) | |
52 sys.exit() | |
53 self.set_repos_path(cfg.items('paths')) | |
54 logging.info('starting backup for %s', self.repos_path) | 48 logging.info('starting backup for %s', self.repos_path) |
55 logging.info('backup target %s', self.backup_file_path) | 49 logging.info('backup target %s', self.backup_file_path) |
56 | 50 |
57 if not os.path.isdir(self.repos_path): | |
58 raise Exception('Not a valid directory in %s' % self.repos_path) | |
59 | 51 |
60 def check_id_rsa(self): | 52 def get_id_rsa(self, rsa_key): |
61 if not os.path.isfile(self.id_rsa_path): | 53 if not os.path.isfile(rsa_key): |
62 logging.error('Could not load id_rsa key file in %s', | 54 logging.error('Could not load id_rsa key file in %s', rsa_key) |
63 self.id_rsa_path) | |
64 sys.exit() | 55 sys.exit() |
65 | 56 |
66 def set_repos_path(self, paths): | 57 def get_repos_path(self, path): |
67 repos_path = paths[0][1].split('/') | 58 if not os.path.isdir(path): |
68 if repos_path[-1] in ['*', '**']: | 59 logging.error('Wrong location for repositories in %s', path) |
69 repos_path = repos_path[:-1] | 60 sys.exit() |
70 if repos_path[0] != '/': | 61 return path |
71 repos_path[0] = '/' | |
72 self.repos_path = os.path.join(*repos_path) | |
73 | 62 |
74 def backup_repos(self): | 63 def backup_repos(self): |
75 today = datetime.datetime.now().weekday() + 1 | |
76 self.backup_file_name = "mercurial_repos.%s.tar.gz" % today | |
77 bckp_file = os.path.join(self.backup_file_path, self.backup_file_name) | 64 bckp_file = os.path.join(self.backup_file_path, self.backup_file_name) |
78 tar = tarfile.open(bckp_file, "w:gz") | 65 tar = tarfile.open(bckp_file, "w:gz") |
79 | 66 |
80 for dir_name in os.listdir(self.repos_path): | 67 for dir_name in os.listdir(self.repos_path): |
81 logging.info('backing up %s', dir_name) | 68 logging.info('backing up %s', dir_name) |
86 | 73 |
87 | 74 |
88 def transfer_files(self): | 75 def transfer_files(self): |
89 params = { | 76 params = { |
90 'id_rsa_key': self.id_rsa_path, | 77 'id_rsa_key': self.id_rsa_path, |
91 'backup_file_path':self.backup_file_path, | 78 'backup_file':os.path.join(self.backup_file_path, |
92 'backup_file_name':self.backup_file_name, | 79 self.backup_file_name), |
80 'backup_server':self.backup_server | |
93 } | 81 } |
94 cmd = ['scp', '-l', '40000', '-i', '%(id_rsa_key)s' % params, | 82 cmd = ['scp', '-l', '40000', '-i', '%(id_rsa_key)s' % params, |
95 '%(backup_file_path)s/%(backup_file_name)s' % params, | 83 '%(backup_file)s' % params, |
96 'root@192.168.2.102:/backups/mercurial' % params] | 84 '%(backup_server)s' % params] |
97 | 85 |
98 subprocess.call(cmd) | 86 subprocess.call(cmd) |
99 logging.info('Transfered file %s to %s', self.backup_file_name, cmd[4]) | 87 logging.info('Transfered file %s to %s', self.backup_file_name, cmd[4]) |
100 | 88 |
101 | 89 |
104 os.remove(os.path.join(self.backup_file_path, self.backup_file_name)) | 92 os.remove(os.path.join(self.backup_file_path, self.backup_file_name)) |
105 | 93 |
106 | 94 |
107 | 95 |
108 if __name__ == "__main__": | 96 if __name__ == "__main__": |
109 B_MANAGER = BackupManager('/home/pylons/id_rsa', 'repositories.config') | 97 |
98 repo_location = '/home/repo_path' | |
99 backup_server = 'root@192.168.1.100:/backups/mercurial' | |
100 rsa_key = '/home/id_rsa' | |
101 | |
102 B_MANAGER = BackupManager(repo_location, rsa_key, backup_server) | |
110 B_MANAGER.backup_repos() | 103 B_MANAGER.backup_repos() |
111 B_MANAGER.transfer_files() | 104 B_MANAGER.transfer_files() |
112 B_MANAGER.rm_file() | 105 B_MANAGER.rm_file() |
113 | 106 |
114 | 107 |