Advertisement
Guest User

Untitled

a guest
Jul 7th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import os
  3. import argparse
  4. import logging
  5. import datetime
  6. import urlparse
  7. import subprocess
  8.  
  9. logging.basicConfig(level=logging.INFO)
  10.  
  11. parser = argparse.ArgumentParser(description='Backup Mongolab DBs')
  12. parser.add_argument('-u', '--url',
  13. type=str,
  14. required=False,
  15. default=None,
  16. help='Mongo DB URL for Backups')
  17. parser.add_argument('-o', '--output_dir',
  18. type=str,
  19. required=False,
  20. default='./',
  21. help='Output directory for the backup.')
  22.  
  23. def backup(args):
  24. today = datetime.datetime.now()
  25.  
  26. url = args.url
  27.  
  28. if url is None:
  29. logging.info('Fetching MONGOLAB_URI using heroku config:get')
  30.  
  31. url = subprocess.check_output([
  32. 'heroku',
  33. 'config:get',
  34. 'MONGOLAB_URI'
  35. ]).strip()
  36.  
  37. url = urlparse.urlparse(url)
  38. assert url.scheme == 'mongodb', 'URL must be a MongoDB URL'
  39.  
  40. netloc = url.netloc
  41. username = url.username
  42. password = url.password
  43. hostname = url.hostname
  44. port = url.port
  45. db = url.path[1:]
  46.  
  47. output_dir = os.path.abspath(os.path.join(
  48. os.path.curdir,
  49. args.output_dir))
  50.  
  51. assert os.path.isdir(output_dir), 'Directory %s can\'t be found.' % output_dir
  52.  
  53. output_dir = os.path.abspath(os.path.join(output_dir,
  54. '%s__%s'% ( db, today.strftime('%Y_%m_%d_%H%M%S'))
  55. ))
  56.  
  57. logging.info('Backing up %s from %s to %s' % (db, hostname, output_dir))
  58.  
  59. backup_output = subprocess.check_output(
  60. [
  61. 'mongodump',
  62. '-host', '%s' % hostname,
  63. '-u', '%s' % username,
  64. '-p', '%s' % password,
  65. '-d', '%s' % db,
  66. '--port', '%s' % port,
  67. '-o', '%s' % output_dir
  68. ])
  69.  
  70. logging.info(backup_output)
  71.  
  72.  
  73. if __name__ == '__main__':
  74. args = parser.parse_args()
  75.  
  76. try:
  77. backup(args)
  78. except AssertionError, msg:
  79. logging.error(msg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement