mirror of
https://github.com/ChrisSewell/MongoToS3.git
synced 2025-04-18 22:28:02 -04:00
Create mongotos3py.py
This commit is contained in:
parent
dbb17a55ee
commit
be815d9b3b
94
mongotos3py.py
Normal file
94
mongotos3py.py
Normal file
@ -0,0 +1,94 @@
|
||||
import os
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
import configparser
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
# Configuration file
|
||||
config = configparser.ConfigParser()
|
||||
config.read('config.ini')
|
||||
|
||||
# Configuration values
|
||||
S3BUCKET = config.get('Settings', 'S3BUCKET')
|
||||
FILENAME = config.get('Settings', 'FILENAME')
|
||||
S3PATH = config.get('Settings', 'S3PATH')
|
||||
MONGODUMPPATH = config.get('Settings', 'MONGODUMPPATH')
|
||||
TMP_PATH = config.get('Settings', 'TMP_PATH')
|
||||
|
||||
TIMESTAMP = datetime.now().strftime(".%m.%d.%Y")
|
||||
DAY = datetime.now().strftime("%d")
|
||||
DAYOFWEEK = datetime.now().strftime("%A")
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(filename='backup.log', level=logging.INFO, format='%(asctime)s - %(message)s')
|
||||
|
||||
class BackupManager:
|
||||
def __init__(self, period):
|
||||
self.period = period
|
||||
|
||||
def backup_database(self):
|
||||
logging.info("Starting backing up the database to a file...")
|
||||
subprocess.run(['mongodump', '--out', MONGODUMPPATH], check=True)
|
||||
logging.info("Done backing up the database to a file.")
|
||||
|
||||
def compress_backup(self):
|
||||
logging.info("Starting compression...")
|
||||
subprocess.run(['tar', 'cvzf', f"{TMP_PATH}{FILENAME}{TIMESTAMP}.tar.gz", MONGODUMPPATH], check=True)
|
||||
logging.info("Done compressing the backup file.")
|
||||
|
||||
def upload_backup(self):
|
||||
logging.info("Uploading the new backup...")
|
||||
subprocess.run(['s3cmd', 'put', '-f', f"{TMP_PATH}{FILENAME}{TIMESTAMP}.tar.gz", f"s3://{S3BUCKET}/{S3PATH}{self.period}/"], check=True)
|
||||
logging.info("New backup uploaded.")
|
||||
|
||||
def clean_old_backups(self):
|
||||
logging.info("Removing old backups (2 periods ago)...")
|
||||
subprocess.run(['s3cmd', 'del', '--recursive', f"s3://{S3BUCKET}/{S3PATH}previous_{self.period}/"], check=True)
|
||||
logging.info("Old backups removed.")
|
||||
|
||||
def move_past_backup(self):
|
||||
logging.info("Moving the backups from past period to another folder...")
|
||||
subprocess.run(['s3cmd', 'mv', '--recursive', f"s3://{S3BUCKET}/{S3PATH}{self.period}/", f"s3://{S3BUCKET}/{S3PATH}previous_{self.period}/"], check=True)
|
||||
logging.info("Past backup moved.")
|
||||
|
||||
def remove_cache_files(self):
|
||||
logging.info("Removing the cache files...")
|
||||
subprocess.run(['rm', '-rf', TMP_PATH], check=True)
|
||||
logging.info("Files removed.")
|
||||
|
||||
def perform_backup(self):
|
||||
try:
|
||||
self.backup_database()
|
||||
self.compress_backup()
|
||||
self.upload_backup()
|
||||
self.clean_old_backups()
|
||||
self.move_past_backup()
|
||||
self.remove_cache_files()
|
||||
logging.info("All done.")
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"Error: {e}")
|
||||
exit(1)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Backup manager')
|
||||
parser.add_argument('-p', '--period', help='Backup period', default='day')
|
||||
args = parser.parse_args()
|
||||
|
||||
period = args.period
|
||||
|
||||
if period == 'auto':
|
||||
if DAY == '01':
|
||||
period = 'month'
|
||||
elif DAYOFWEEK == 'Sunday':
|
||||
period = 'week'
|
||||
else:
|
||||
period = 'day'
|
||||
|
||||
logging.info(f"Selected period: {period}.")
|
||||
|
||||
backup_manager = BackupManager(period)
|
||||
backup_manager.perform_backup()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
x
Reference in New Issue
Block a user