pg_export 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -8
- data/bin/pg_export +39 -19
- data/lib/pg_export/aes/base.rb +47 -0
- data/lib/pg_export/aes/decryptor.rb +13 -0
- data/lib/pg_export/aes/encryptor.rb +13 -0
- data/lib/pg_export/aes.rb +3 -0
- data/lib/pg_export/bash/adapter.rb +31 -0
- data/lib/pg_export/bash/factory.rb +23 -0
- data/lib/pg_export/bash/repository.rb +18 -0
- data/lib/pg_export/boot_container.rb +69 -0
- data/lib/pg_export/build_logger.rb +19 -0
- data/lib/pg_export/configuration.rb +11 -53
- data/lib/pg_export/{entities/dump.rb → dump.rb} +18 -4
- data/lib/pg_export/errors.rb +3 -3
- data/lib/pg_export/ftp/adapter.rb +41 -0
- data/lib/pg_export/ftp/connection.rb +40 -0
- data/lib/pg_export/ftp/repository.rb +40 -0
- data/lib/pg_export/roles/colourable_string.rb +19 -0
- data/lib/pg_export/roles/human_readable.rb +17 -0
- data/lib/pg_export/roles/interactive.rb +98 -0
- data/lib/pg_export/roles/validatable.rb +24 -0
- data/lib/pg_export/services/create_and_export_dump.rb +20 -0
- data/lib/pg_export/version.rb +1 -1
- data/lib/pg_export.rb +18 -56
- data/pg_export.gemspec +2 -1
- metadata +49 -31
- data/lib/pg_export/includable_modules/colourable_string.rb +0 -17
- data/lib/pg_export/includable_modules/dump/size_human.rb +0 -15
- data/lib/pg_export/includable_modules/interactive.rb +0 -97
- data/lib/pg_export/includable_modules/logging.rb +0 -31
- data/lib/pg_export/includable_modules/services_container.rb +0 -41
- data/lib/pg_export/services/aes/base.rb +0 -26
- data/lib/pg_export/services/aes/decryptor.rb +0 -12
- data/lib/pg_export/services/aes/encryptor.rb +0 -12
- data/lib/pg_export/services/aes.rb +0 -28
- data/lib/pg_export/services/bash_utils.rb +0 -32
- data/lib/pg_export/services/dump_storage.rb +0 -48
- data/lib/pg_export/services/ftp_adapter.rb +0 -38
- data/lib/pg_export/services/ftp_connection.rb +0 -28
@@ -1,32 +0,0 @@
|
|
1
|
-
class PgExport
|
2
|
-
class BashUtils
|
3
|
-
include Logging
|
4
|
-
|
5
|
-
def initialize(database_name)
|
6
|
-
@database_name = database_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def create_dump
|
10
|
-
dump = Dump.new('Dump')
|
11
|
-
Open3.popen3("pg_dump -Fc --file #{dump.path} #{database_name}") do |_, _, err|
|
12
|
-
error = err.read
|
13
|
-
raise PgDumpError, error unless error.empty?
|
14
|
-
end
|
15
|
-
logger.info "Create #{dump}"
|
16
|
-
dump
|
17
|
-
end
|
18
|
-
|
19
|
-
def restore_dump(dump, restore_database_name)
|
20
|
-
Open3.popen3("pg_restore -c -d #{restore_database_name} #{dump.path}") do |_, _, err|
|
21
|
-
error = err.read
|
22
|
-
raise PgRestoreError, error if /FATAL/ =~ error
|
23
|
-
end
|
24
|
-
logger.info "Restore #{dump}"
|
25
|
-
self
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
attr_reader :database_name
|
31
|
-
end
|
32
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
class PgExport
|
2
|
-
class DumpStorage
|
3
|
-
include Logging
|
4
|
-
|
5
|
-
TIMESTAMP = '_%Y%m%d_%H%M%S'.freeze
|
6
|
-
TIMESTAMP_REGEX = '[0-9]{8}_[0-9]{6}'.freeze
|
7
|
-
|
8
|
-
def initialize(ftp_adapter, name, keep)
|
9
|
-
@ftp_adapter, @name, @keep = ftp_adapter, name, keep
|
10
|
-
end
|
11
|
-
|
12
|
-
def upload(dump)
|
13
|
-
dump_name = timestamped_name(dump)
|
14
|
-
ftp_adapter.upload_file(dump.path, dump_name)
|
15
|
-
logger.info "Upload #{dump} #{dump_name} to #{ftp_adapter}"
|
16
|
-
end
|
17
|
-
|
18
|
-
def download(name)
|
19
|
-
dump = Dump.new('Encrypted Dump')
|
20
|
-
ftp_adapter.download_file(dump.path, name)
|
21
|
-
logger.info "Download #{dump} #{name} from #{ftp_adapter}"
|
22
|
-
dump
|
23
|
-
end
|
24
|
-
|
25
|
-
def remove_old
|
26
|
-
find_by_name(name).drop(keep.to_i).each do |filename|
|
27
|
-
ftp_adapter.delete(filename)
|
28
|
-
logger.info "Remove #{filename} from #{ftp_adapter}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def find_by_name(s)
|
33
|
-
ftp_adapter.list(s + '_*')
|
34
|
-
end
|
35
|
-
|
36
|
-
def all
|
37
|
-
ftp_adapter.list('*')
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
attr_reader :ftp_adapter, :name, :keep
|
43
|
-
|
44
|
-
def timestamped_name(dump)
|
45
|
-
name + Time.now.strftime(TIMESTAMP) + dump.ext
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
class PgExport
|
2
|
-
class FtpAdapter
|
3
|
-
extend Forwardable
|
4
|
-
|
5
|
-
CHUNK_SIZE = (2**16).freeze
|
6
|
-
|
7
|
-
def_delegators :connection, :ftp, :host
|
8
|
-
|
9
|
-
def initialize(connection)
|
10
|
-
@connection = connection
|
11
|
-
ObjectSpace.define_finalizer(self, proc { connection.close })
|
12
|
-
end
|
13
|
-
|
14
|
-
def list(regex_string)
|
15
|
-
ftp.list(regex_string).map { |item| item.split(' ').last }.sort.reverse
|
16
|
-
end
|
17
|
-
|
18
|
-
def delete(filename)
|
19
|
-
ftp.delete(filename)
|
20
|
-
end
|
21
|
-
|
22
|
-
def upload_file(path, name)
|
23
|
-
ftp.putbinaryfile(path.to_s, name, CHUNK_SIZE)
|
24
|
-
end
|
25
|
-
|
26
|
-
def download_file(path, name)
|
27
|
-
ftp.getbinaryfile(name, path.to_s, CHUNK_SIZE)
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_s
|
31
|
-
host
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
attr_reader :connection
|
37
|
-
end
|
38
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
class PgExport
|
2
|
-
class FtpConnection
|
3
|
-
include Logging
|
4
|
-
|
5
|
-
attr_reader :ftp, :host
|
6
|
-
|
7
|
-
def initialize(host:, user:, password:)
|
8
|
-
@host, @user, @password = host, user, password
|
9
|
-
end
|
10
|
-
|
11
|
-
def open
|
12
|
-
@ftp = Net::FTP.new(host, user, password)
|
13
|
-
@ftp.passive = true
|
14
|
-
logger.info "Connect to #{host}"
|
15
|
-
self
|
16
|
-
end
|
17
|
-
|
18
|
-
def close
|
19
|
-
@ftp.close
|
20
|
-
logger.info 'Close FTP'
|
21
|
-
self
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
attr_reader :user, :password
|
27
|
-
end
|
28
|
-
end
|