NewsBlur/utils/backups/backup_psql.py

43 lines
1.5 KiB
Python
Raw Normal View History

#!/usr/bin/python3
import os
import sys
2021-12-13 17:09:37 -05:00
import socket
CURRENT_DIR = os.path.dirname(__file__)
NEWSBLUR_DIR = ''.join([CURRENT_DIR, '/../../'])
sys.path.insert(0, NEWSBLUR_DIR)
2021-12-13 17:09:37 -05:00
os.environ['DJANGO_SETTINGS_MODULE'] = 'newsblur_web.settings'
import threading
class ProgressPercentage(object):
def __init__(self, filename):
self._filename = filename
self._size = float(os.path.getsize(filename))
self._seen_so_far = 0
self._lock = threading.Lock()
2021-12-13 17:09:37 -05:00
def __call__(self, bytes_amount):
# To simplify, assume this is hooked up to a single filename
with self._lock:
self._seen_so_far += bytes_amount
percentage = (self._seen_so_far / self._size) * 100
sys.stdout.write(
"\r%s %s / %s (%.2f%%)" % (
self._filename, self._seen_so_far, self._size,
percentage))
sys.stdout.flush()
2021-12-13 17:09:37 -05:00
import time
import boto3
2021-12-13 17:09:37 -05:00
from django.conf import settings
2021-12-13 17:09:37 -05:00
s3 = boto3.client('s3', aws_access_key_id=settings.S3_ACCESS_KEY, aws_secret_access_key=settings.S3_SECRET)
2021-12-13 17:09:37 -05:00
hostname = socket.gethostname().replace('-','_')
2022-02-03 15:39:36 -05:00
s3_object_name = f'backup_{hostname}/backup_{hostname}_{time.strftime("%Y-%m-%d-%H-%M")}.sql.gz'
path = os.listdir('/srv/newsblur/backups/')[0]
print('Uploading %s to %s on S3 bucket %s' % (path, s3_object_name, settings.S3_BACKUP_BUCKET))
2021-12-13 17:09:37 -05:00
s3.upload_file(path, settings.S3_BACKUP_BUCKET, s3_object_name, Callback=ProgressPercentage(path))