rubypond-s3backup-manager 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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