##// END OF EJS Templates

File last commit:

r434:bd3f341c default
r435:0e8ef6f1 merge default
Show More
backup_manager.py
107 lines | 3.5 KiB | text/x-python | PythonLexer
licensing updates, code cleanups
r252 #!/usr/bin/env python
# encoding: utf-8
# mercurial repository backup manager
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License or (at your opinion) any later version of the license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
"""
Created on Feb 28, 2010
Mercurial repositories backup manager
@author: marcink
"""
Marcin Kuzminski
backup script for repositories
r25 import logging
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):
simplified and updated backup manager
r434 def __init__(self, repos_location, rsa_key, backup_server):
today = datetime.datetime.now().weekday() + 1
self.backup_file_name = "mercurial_repos.%s.tar.gz" % today
self.id_rsa_path = self.get_id_rsa(rsa_key)
self.repos_path = self.get_repos_path(repos_location)
self.backup_server = backup_server
self.backup_file_path = '/tmp'
Marcin Kuzminski
backup script for repositories
r25 logging.info('starting backup for %s', self.repos_path)
logging.info('backup target %s', self.backup_file_path)
simplified and updated backup manager
r434 def get_id_rsa(self, rsa_key):
if not os.path.isfile(rsa_key):
logging.error('Could not load id_rsa key file in %s', rsa_key)
Marcin Kuzminski
backup script update
r28 sys.exit()
simplified and updated backup manager
r434 def get_repos_path(self, path):
if not os.path.isdir(path):
logging.error('Wrong location for repositories in %s', path)
sys.exit()
return path
Marcin Kuzminski
backup script for repositories
r25
def backup_repos(self):
Marcin Kuzminski
backup script update
r28 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,
simplified and updated backup manager
r434 'backup_file':os.path.join(self.backup_file_path,
self.backup_file_name),
'backup_server':self.backup_server
Marcin Kuzminski
backup script update
r28 }
fix bug in arguments for command
r39 cmd = ['scp', '-l', '40000', '-i', '%(id_rsa_key)s' % params,
simplified and updated backup manager
r434 '%(backup_file)s' % params,
'%(backup_server)s' % params]
Marcin Kuzminski
backup script update
r28
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__":
simplified and updated backup manager
r434
repo_location = '/home/repo_path'
backup_server = 'root@192.168.1.100:/backups/mercurial'
rsa_key = '/home/id_rsa'
B_MANAGER = BackupManager(repo_location, rsa_key, backup_server)
Marcin Kuzminski
Code refactoring, and changed proper way of removing files
r34 B_MANAGER.backup_repos()
B_MANAGER.transfer_files()
B_MANAGER.rm_file()
Marcin Kuzminski
backup script for repositories
r25