pg_export 0.5.1 → 0.6.0
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.
- 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
|