rubypond-s3backup-manager 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/bin/s3backup CHANGED
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'optparse'
3
- require "s3backup-manager"
3
+ begin
4
+ require 's3backup-manager'
5
+ rescue LoadError
6
+ require "#{File.dirname(__FILE__)}/../lib/s3backup-manager"
7
+ end
4
8
 
5
9
  options = {}
6
10
  optparse = OptionParser.new do|opts|
data/bin/s3restore CHANGED
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'optparse'
3
- require "s3backup-manager"
3
+ begin
4
+ require 's3backup-manager'
5
+ rescue LoadError
6
+ require "#{File.dirname(__FILE__)}/../lib/s3backup-manager"
7
+ end
4
8
 
5
9
  options = {}
6
10
  optparse = OptionParser.new do|opts|
@@ -32,6 +36,10 @@ optparse = OptionParser.new do|opts|
32
36
  options[:type] = t.downcase
33
37
  options[:type_provided] = true
34
38
  end
39
+
40
+ opts.on('--username USER', 'User to connect to the database as' ) do |u|
41
+ options[:username] = u
42
+ end
35
43
 
36
44
  opts.on('-h', '--help', 'Display this screen') do
37
45
  puts opts
@@ -1,17 +1,25 @@
1
1
  module S3BackupManager
2
2
  module PostgresAdapter
3
3
 
4
- def dump_database_to_file(filename, options = {})
5
- database = options[:database]
6
- username = options[:username]
7
- system "sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
4
+ def dump_database_to_file(username, database, directory)
5
+ directory = "#{directory}/s3postgresbackup/#{database}"
6
+ FileUtils.mkdir_p(directory)
7
+ system "cd #{directory} && sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
8
8
  exit(1) unless $?.success?
9
- system "sudo -u #{username} pg_dump --blobs --format=t #{database} > #{filename}"
9
+ dump_file = "#{directory}/#{database}.pgsql"
10
+ system "cd #{directory} && sudo -u #{username} pg_dump --blobs --format=t #{database} > #{dump_file}"
10
11
  exit(1) unless $?.success?
12
+ user_file = "#{directory}/globals.pgsql"
13
+ system "cd #{directory} && sudo -u #{username} pg_dumpall -v -f #{user_file} --globals-only >/dev/null 2>&1"
14
+ exit(1) unless $?.success?
15
+ [directory]
11
16
  end
12
17
 
13
- def restore_database_from_file(database, filename)
14
- `sudo -u postgres pg_restore --format=t -d #{database} #{filename}`
18
+ def restore_database_from_file(username, database, filename)
19
+ # `psql -h localhost -d postgres -U postgres -f "/path/to/useraccts.sql" `
20
+ # exit(1) unless $?.success?
21
+ `sudo -u #{username} pg_restore --format=t -d #{database} #{filename}`
22
+ exit(1) unless $?.success?
15
23
  end
16
24
 
17
25
  private
@@ -19,16 +19,19 @@ module S3BackupManager
19
19
  end
20
20
 
21
21
  def backup(database)
22
- filename = "/tmp/#{database}"
23
- dump_database_to_file(filename, @options.merge(:database => database))
24
- super(filename, "databases/#{@options[:adapter]}")
22
+ directory = "/tmp/#{database}"
23
+ files = dump_database_to_file(@options[:username], database, directory)
24
+ super(files, "databases/#{@options[:adapter]}")
25
+ files.each do |file|
26
+ FileUtils.rm_r(file)
27
+ end
25
28
  end
26
29
 
27
30
  def restore(database, timestamp)
28
31
  filename = "#{@options[:adapter]}/#{timestamp}/#{database}"
29
32
  @dumped_filename = "/tmp/#{random_string}"
30
33
  super(filename, timestamp, @dumped_filename, "databases")
31
- restore_database_from_file(@dumped_filename, @options)
34
+ restore_database_from_file(@options[:username], database, "#{@dumped_filename}/tmp/#{database}")
32
35
  db_cleanup!
33
36
  end
34
37
 
@@ -15,9 +15,9 @@ module S3BackupManager
15
15
  bucket.files.select{|f| f.key.match(%r{^filesystem/})}
16
16
  end
17
17
 
18
- def backup(file, directory = "filesystem")
19
- stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(file)}"
20
- encrypted_file = encrypt(pack(file))
18
+ def backup(files, directory = "filesystem")
19
+ stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(files.first)}"
20
+ encrypted_file = encrypt(pack(files))
21
21
  bucket.store("#{directory}/#{stored_file_name}", open(encrypted_file))
22
22
  cleanup!
23
23
  end
@@ -83,10 +83,10 @@ module S3BackupManager
83
83
  @decrypted_filename
84
84
  end
85
85
 
86
- def pack(file)
87
- @packed_filename = "#{random_string}_#{File.basename(file)}.tgz"
86
+ def pack(files)
87
+ @packed_filename = "#{random_string}_#{File.basename(files.first)}.tgz"
88
88
  tgz = Zlib::GzipWriter.new(File.open(@packed_filename, 'wb'))
89
- Archive::Tar::Minitar.pack("#{file}", tgz, recurse_directories = true)
89
+ Archive::Tar::Minitar.pack(files, tgz, recurse_directories = true)
90
90
  @packed_filename
91
91
  end
92
92
 
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'aws/s3'
2
3
  require 'zlib'
3
4
  require 'archive/tar/minitar'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubypond-s3backup-manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glenn Gillen