Created
February 3, 2011 14:28
-
-
Save emre/809525 to your computer and use it in GitHub Desktop.
mongodb için export işlemini yapan ufak bir wrapper, dürüm!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # -*- coding: utf8 -*- | |
| import datetime, os | |
| class MongoDbExporter(object): | |
| """ | |
| a tiny wrapper for the bash utility named mongoexporter. | |
| """ | |
| LOCK_FILE = 'log.txt' | |
| def __init__(self, config): | |
| self.host = config.get("host"), | |
| self.database = config.get("database") | |
| self.collection = config.get("collection") | |
| self.backup_dir = config.get("backup_dir") | |
| if self.backup_dir: | |
| if not self.backup_dir.endswith('/'): | |
| self.backup_dir += "/" | |
| self.backup_file = self.backup_dir + self.__generateBackupDate() + ".json" | |
| if not os.access(os.getcwd(), os.W_OK): | |
| raise Exception("i cannot create lock file. make this directory writable.") | |
| self.__controlConfig(config) | |
| def backUp(self): | |
| print "started" | |
| self.__createLock() | |
| command = "mongoexport -c %s -d %s >> %s" % (self.collection, | |
| self.database, | |
| self.backup_file) | |
| os.system(command) | |
| self.__acquireLock() | |
| def __controlConfig(self, config): | |
| for config_variable in config.iterkeys(): | |
| if config.get(config_variable) == None: | |
| raise Exception("%s cannot be empty" % config_variable) | |
| if not config.get("backup_dir").startswith("/"): | |
| raise Exception("backup_dir variable must be absolute.") | |
| if not os.path.exists(config.get("backup_dir")): | |
| print "backup directory doesnt exist, trying to create." | |
| os.makedirs(config.get("backup_dir")) | |
| def __generateBackupDate(self): | |
| dt = datetime.datetime.now() | |
| return datetime.datetime.strftime(dt, "%Y-%m-%d-%H-%M") | |
| def __createLock(self): | |
| self.__controlLock() | |
| print "creating lock file" | |
| fp = open(MongoDbExporter.LOCK_FILE, 'w') | |
| fp.close() | |
| def __acquireLock(self): | |
| print "lock acquired" | |
| os.remove(MongoDbExporter.LOCK_FILE) | |
| def __controlLock(self): | |
| if os.path.exists(MongoDbExporter.LOCK_FILE): | |
| raise Exception("an alive dumper instance exists. try later.") | |
| if __name__ == '__main__': | |
| backup = MongoDbExporter({ | |
| "host" : "localhost", | |
| "database" : "test", | |
| "collection" : "logs", | |
| "backup_dir" : "/home/emre/tmp/" | |
| }) | |
| backup.backUp() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment