Advertisement
Guest User

Untitled

a guest
Jul 10th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import contextlib
  4. import datetime
  5. import os
  6. import shutil
  7. import smtplib
  8. import subprocess
  9. import tarfile
  10. import tempfile
  11. from email.encoders import encode_base64
  12. from email.mime.base import MIMEBase
  13. from email.mime.multipart import MIMEMultipart
  14. from email.mime.text import MIMEText
  15. from email.utils import COMMASPACE, formatdate
  16.  
  17.  
  18. def source(env):
  19. prop = os.environ.get(env)
  20. if not prop:
  21. raise Exception('Environment variable {0} not set'.format(env))
  22. if prop in ['yes', 'true']:
  23. return True
  24. elif prop in ['no', 'false']:
  25. return False
  26. else:
  27. return prop
  28.  
  29.  
  30. def send_mail(
  31. send_from, send_to,
  32. subject, text,
  33. files=None, server='localhost'):
  34. files = files or []
  35. assert type(send_to) == list
  36. assert type(files) == list
  37. msg = MIMEMultipart()
  38. msg['From'] = send_from
  39. msg['To'] = COMMASPACE.join(send_to)
  40. msg['Date'] = formatdate(localtime=True)
  41. msg['Subject'] = subject
  42. msg.attach(MIMEText(text))
  43. for f in files:
  44. part = MIMEBase('application', 'octet-stream')
  45. with open(f, 'rb') as attachment:
  46. part.set_payload(attachment.read())
  47. encode_base64(part)
  48. part.add_header(
  49. 'Content-Disposition',
  50. 'attachment; filename="{0}"'.format(os.path.basename(f)))
  51. msg.attach(part)
  52. smtp = smtplib.SMTP(server)
  53. smtp.sendmail(send_from, send_to, msg.as_string())
  54. smtp.close()
  55.  
  56.  
  57. def make_tarfile(output_filename, source_dir):
  58. def filter_func(tarinfo):
  59. if tarinfo.name.startswith("media/cache"):
  60. return None
  61. return tarinfo
  62. with tarfile.open(output_filename, 'w:gz') as tar:
  63. tar.add(source_dir, arcname=os.path.basename(source_dir), filter=filter_func)
  64.  
  65.  
  66. @contextlib.contextmanager
  67. def tempdir():
  68. """A context manager for creating and removing temporary directories"""
  69. temp = tempfile.mkdtemp()
  70. try:
  71. yield temp
  72. finally:
  73. shutil.rmtree(temp)
  74.  
  75.  
  76.  
  77. if __name__ == '__main__':
  78. backup_time = datetime.datetime.now().strftime('%Y-%m-%dT%H:%M')
  79.  
  80. with tempdir() as temp_dir:
  81. # Backup all databases and tables in MySQL
  82. mysql_dump_file = '{0}/{1}.mysql.sql'.format(temp_dir, backup_time)
  83. mysqldump_command = [
  84. 'mysqldump',
  85. '--user={0}'.format(source('DB_USER')),
  86. '--password={0}'.format(source('DB_PASSWORD')),
  87. '--host={0}'.format(source('DB_HOST')),
  88. '--port={0}'.format(source('DB_PORT')),
  89. '--all-databases'
  90. ]
  91.  
  92. with open(mysql_dump_file, 'w') as mysqlf:
  93. with open(os.devnull, 'w') as FNULL:
  94. subprocess.call(mysqldump_command, stdout=mysqlf, stderr=FNULL)
  95.  
  96. send_mail(
  97. send_from='rjl@hyperbo.la',
  98. send_to=['upload.databas.skvvczqkcv@u.box.com'],
  99. subject='hyperbo.la cron mysqldump',
  100. text='',
  101. files=[mysql_dump_file]
  102. )
  103.  
  104. # Backup all django media from hyperbola.settings.MEDIA_ROOT
  105. media_root = '/hyperbola/media'
  106. media_tar_file = '{0}/{1}.media.tar.gz'.format(temp_dir, backup_time)
  107. make_tarfile(media_tar_file, media_root)
  108.  
  109. send_mail(
  110. send_from='rjl@hyperbo.la',
  111. send_to=['upload.media.palovsbp7s@u.box.com'],
  112. subject='hyperbo.la cron media backup',
  113. text='',
  114. files=[media_tar_file]
  115. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement