db_sucker 3.1.1 → 3.2.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 +13 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/doc/config_example.rb +4 -0
- data/lib/db_sucker/application/sklaven_treiber/worker/helpers.rb +6 -0
- data/lib/db_sucker/application/sklaven_treiber/worker/io/sftp_native_download.rb +79 -0
- data/lib/db_sucker/application/sklaven_treiber/worker/routines.rb +17 -5
- data/lib/db_sucker/application/sklaven_treiber/worker.rb +1 -0
- data/lib/db_sucker/application/window/keypad/core.rb +1 -1
- data/lib/db_sucker/application.rb +6 -0
- data/lib/db_sucker/version.rb +1 -1
- data/lib/db_sucker.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8074c1cae68f9c791d50bb5494ff86eb51bb840470bd2bf94d72cebbc2822a5
|
4
|
+
data.tar.gz: 8fbfadaf58d757f5bc626e23288c0056ffe4eaf1db470718784ad25c3403db3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f5784e1d45ed9878c412de70ba0a1d3a243a38c1c6528c790a9aba1dadfcd74b223792b8060647ecf660e0703bb21da0110421c0581c6984127264129246506
|
7
|
+
data.tar.gz: 4ad5f0a6e3bc1466eb6e92de0d39eab511435fd06510c6e60380f9ac6b3a8eec7cc3458b18dbb73787b290f2949726897fc4feefd2918464cc48db1f4ecb42dd
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## 3.2.0
|
2
|
+
|
3
|
+
### Updates
|
4
|
+
|
5
|
+
* Added support for native sftp command line utility (see application option `file_transport`) but it
|
6
|
+
only works with non-interactive key authentication.
|
7
|
+
|
8
|
+
### Fixes
|
9
|
+
|
10
|
+
* Prevent application from crashing when eval produces non-StandardErrors (e.g. SyntaxErrors)
|
11
|
+
|
12
|
+
-------------------
|
13
|
+
|
1
14
|
## 3.1.1
|
2
15
|
|
3
16
|
### Fixes
|
data/README.md
CHANGED
@@ -130,7 +130,7 @@ To get a list of available interface options and shortcuts press `?` or type `:h
|
|
130
130
|
|
131
131
|
## Configuration (application) - Ruby format
|
132
132
|
|
133
|
-
DbSucker has a lot of settings and other mechanisms which you can tweak and utilize by creating a `~/.db_sucker/config.rb` file. You can change settings, add hooks or define own actions. For more information please take a look at the [documented example config](https://github.com/2called-chaos/db_sucker/blob/master/doc/config_example.rb) and/or [complete list of all settings](https://github.com/2called-chaos/db_sucker/blob/master/lib/db_sucker/application.rb#
|
133
|
+
DbSucker has a lot of settings and other mechanisms which you can tweak and utilize by creating a `~/.db_sucker/config.rb` file. You can change settings, add hooks or define own actions. For more information please take a look at the [documented example config](https://github.com/2called-chaos/db_sucker/blob/master/doc/config_example.rb) and/or [complete list of all settings](https://github.com/2called-chaos/db_sucker/blob/master/lib/db_sucker/application.rb#L60-L134).
|
134
134
|
|
135
135
|
|
136
136
|
## Deferred import
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.2.0
|
data/doc/config_example.rb
CHANGED
@@ -14,6 +14,10 @@ opts[:deferred_threshold] = 50_000_000 # 50 MB
|
|
14
14
|
opts[:status_format] = :full # used for IO operations, can be one of: none, minimal, full
|
15
15
|
opts[:pv_enabled] = true # disable pv utility autodiscovery (force non-usage)
|
16
16
|
|
17
|
+
# Use native SFTP command for way faster transfer rates, only use with non-interactive key authentication!
|
18
|
+
opts[:file_transport] = :ruby
|
19
|
+
#opts[:file_transport] = :native
|
20
|
+
|
17
21
|
# used to open core dumps (should be a blocking call, e.g. `subl -w' or `mate -w')
|
18
22
|
# MUST be windowed! vim, nano, etc. will not work!
|
19
23
|
opts[:core_dump_editor] = "subl -w"
|
@@ -15,6 +15,12 @@ module DbSucker
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
def sftp_native_download *args, &block
|
19
|
+
IO::SftpNativeDownload.new(self, *args).tap do |op|
|
20
|
+
block.try(:call, op)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
18
24
|
def file_copy *args, &block
|
19
25
|
IO::FileCopy.new(self, *args).tap do |op|
|
20
26
|
block.try(:call, op)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module DbSucker
|
2
|
+
class Application
|
3
|
+
class SklavenTreiber
|
4
|
+
class Worker
|
5
|
+
module IO
|
6
|
+
class SftpNativeDownload < Base
|
7
|
+
UnknownEventError = Class.new(::RuntimeError)
|
8
|
+
attr_reader :downloader
|
9
|
+
|
10
|
+
def init
|
11
|
+
@label = "downloading"
|
12
|
+
@entity = "download"
|
13
|
+
@throughput.categories << :inet << :inet_down
|
14
|
+
end
|
15
|
+
|
16
|
+
def reset_state
|
17
|
+
super
|
18
|
+
@downloader = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_sftp_command src, dst
|
22
|
+
[].tap{|cmd|
|
23
|
+
cmd << %{sftp}
|
24
|
+
cmd << %{-P #{@ctn.source["ssh"]["port"]}} if @ctn.source["ssh"]["port"]
|
25
|
+
@ctn.ssh_key_files.each {|f| cmd << %{-i "#{f}"} }
|
26
|
+
cmd << %{"#{@ctn.source["ssh"]["username"]}@#{@ctn.source["ssh"]["hostname"]}:#{src}"}
|
27
|
+
cmd << %{"#{dst}"}
|
28
|
+
}.join(" ").strip
|
29
|
+
end
|
30
|
+
|
31
|
+
def download! opts = {}
|
32
|
+
opts = opts.reverse_merge(tries: 3, read_size: @read_size, force_new_connection: true)
|
33
|
+
cmd = build_sftp_command(@remote, @local)
|
34
|
+
prepare_local_destination
|
35
|
+
|
36
|
+
execute(opts.slice(:tries).merge(sleep_error: 3)) do
|
37
|
+
begin
|
38
|
+
@state = :init
|
39
|
+
@ctn.sftp_start(opts[:force_new_connection]) do |sftp|
|
40
|
+
@filesize = sftp.lstat!(@remote).size
|
41
|
+
end
|
42
|
+
|
43
|
+
# status thread
|
44
|
+
status_thread = @worker.app.spawn_thread(:sklaventreiber_worker_ctrl) do |thr|
|
45
|
+
loop do
|
46
|
+
@offset = File.size(@local) if File.exist?(@local)
|
47
|
+
break if thr[:stop]
|
48
|
+
thr.wait(0.25)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@state = :downloading
|
53
|
+
debug "Opening process `#{cmd}'"
|
54
|
+
Open3.popen2e(cmd, pgroup: true) do |_stdin, _stdouterr, _thread|
|
55
|
+
# close & exit status
|
56
|
+
_stdin.close_write
|
57
|
+
exit_status = _thread.value
|
58
|
+
if exit_status == 0
|
59
|
+
debug "Process exited (#{exit_status}) `#{cmd}'"
|
60
|
+
else
|
61
|
+
warning "Process exited (#{exit_status}) `#{cmd}'"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
status_thread[:stop] = true
|
66
|
+
status_thread.signal
|
67
|
+
status_thread.join
|
68
|
+
ensure
|
69
|
+
@state = :finishing
|
70
|
+
end
|
71
|
+
end
|
72
|
+
@state = :done
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -142,11 +142,23 @@ module DbSucker
|
|
142
142
|
@local_file_compressed = local_tmp_file(File.basename(@remote_file_compressed))
|
143
143
|
@local_files_to_remove << @local_file_compressed
|
144
144
|
|
145
|
-
|
146
|
-
|
147
|
-
@
|
148
|
-
|
149
|
-
|
145
|
+
case app.opts[:file_transport]
|
146
|
+
when :ruby
|
147
|
+
sftp_download(@ctn, @remote_file_compressed => @local_file_compressed) do |dl|
|
148
|
+
dl.status_format = app.opts[:status_format]
|
149
|
+
@status = [dl, "yellow"]
|
150
|
+
dl.abort_if { @should_cancel }
|
151
|
+
dl.download!
|
152
|
+
end
|
153
|
+
when :native
|
154
|
+
sftp_native_download(@ctn, @remote_file_compressed => @local_file_compressed) do |dl|
|
155
|
+
dl.status_format = app.opts[:status_format]
|
156
|
+
@status = [dl, "yellow"]
|
157
|
+
dl.abort_if { @should_cancel }
|
158
|
+
dl.download!
|
159
|
+
end
|
160
|
+
else
|
161
|
+
raise UnknownFileTransportError, "Unknown file transport `#{app.opts[:file_transport]}' configured, valid are `ruby' and `native'!"
|
150
162
|
end
|
151
163
|
end
|
152
164
|
|
@@ -77,6 +77,12 @@ module DbSucker
|
|
77
77
|
status_format: :full, # used for IO operations, can be one of: none, minimal, full
|
78
78
|
pv_enabled: true, # disable pv utility autodiscovery (force non-usage)
|
79
79
|
|
80
|
+
# file transport: how to copy files from the remote
|
81
|
+
# ruby Use ruby sftp-library (why slow?)
|
82
|
+
# native Shell out to native sftp command (we try our best to build the command according to your SSH settings)
|
83
|
+
# NOTE: only use with non-interactive key authentication
|
84
|
+
file_transport: :ruby,
|
85
|
+
|
80
86
|
# sklaven treiber
|
81
87
|
window_enabled: true, # if disabled effectively disables any status progress or window drawing
|
82
88
|
window_draw: true, # wether to refresh screen or not
|
data/lib/db_sucker/version.rb
CHANGED
data/lib/db_sucker.rb
CHANGED
@@ -32,6 +32,7 @@ require "db_sucker/application/sklaven_treiber/log_spool"
|
|
32
32
|
require "db_sucker/application/sklaven_treiber/worker/io/base"
|
33
33
|
require "db_sucker/application/sklaven_treiber/worker/io/throughput"
|
34
34
|
require "db_sucker/application/sklaven_treiber/worker/io/sftp_download"
|
35
|
+
require "db_sucker/application/sklaven_treiber/worker/io/sftp_native_download"
|
35
36
|
require "db_sucker/application/sklaven_treiber/worker/io/file_copy"
|
36
37
|
require "db_sucker/application/sklaven_treiber/worker/io/file_gunzip"
|
37
38
|
require "db_sucker/application/sklaven_treiber/worker/io/file_shasum"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db_sucker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Pachnit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -175,6 +175,7 @@ files:
|
|
175
175
|
- lib/db_sucker/application/sklaven_treiber/worker/io/file_shasum.rb
|
176
176
|
- lib/db_sucker/application/sklaven_treiber/worker/io/pv_wrapper.rb
|
177
177
|
- lib/db_sucker/application/sklaven_treiber/worker/io/sftp_download.rb
|
178
|
+
- lib/db_sucker/application/sklaven_treiber/worker/io/sftp_native_download.rb
|
178
179
|
- lib/db_sucker/application/sklaven_treiber/worker/io/throughput.rb
|
179
180
|
- lib/db_sucker/application/sklaven_treiber/worker/routines.rb
|
180
181
|
- lib/db_sucker/application/slot_pool.rb
|