vpsadmin-client 2.9.1 → 3.0.0.master.20190517.pre.0.3ab5ddfe
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 +5 -5
- data/CHANGELOG +0 -3
- data/lib/vpsadmin/cli/commands/backup_dataset.rb +44 -44
- data/lib/vpsadmin/cli/commands/ip_traffic_top.rb +34 -30
- data/lib/vpsadmin/cli/commands/snapshot_download.rb +19 -19
- data/lib/vpsadmin/cli/commands/snapshot_send.rb +11 -11
- data/lib/vpsadmin/cli/commands/vps_migrate_many.rb +9 -9
- data/lib/vpsadmin/cli/commands/vps_remote_console.rb +11 -11
- data/lib/vpsadmin/cli/stream_downloader.rb +17 -17
- data/lib/vpsadmin/client/version.rb +1 -1
- data/shell.nix +33 -0
- data/vpsadmin-client.gemspec +2 -2
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e88be4aa43616fcca48c5a44a608568bbe5a17a820b601a4750b559e306eb789
|
4
|
+
data.tar.gz: 93a4a8389faa06c619633113e3992deb7cbea545e0b5ee1814344d3d01f5fd83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 431461ad20a69847e7d4c52d0731b0691b9745e4f16e448e1bbcfbe43c44cfd8bbe16ca7c9fe2257a9fc285b1b97fbebff8821f610fb8bc409cb3ec7fc5c7443
|
7
|
+
data.tar.gz: 9adafa55fa0e00c99159f60a049014b866eb41a4a7bad8f4a4b84efd9bddede771d4d7bfbeeb9ed5aabd20d035165b79269df800a53e017920c895038bda8717
|
data/CHANGELOG
CHANGED
@@ -14,14 +14,14 @@ module VpsAdmin::CLI::Commands
|
|
14
14
|
|
15
15
|
def options(opts)
|
16
16
|
@opts = {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
rotate: true,
|
18
|
+
min_snapshots: 30,
|
19
|
+
max_snapshots: 45,
|
20
|
+
max_age: 30,
|
21
|
+
attempts: 10,
|
22
|
+
checksum: true,
|
23
|
+
delete_after: true,
|
24
|
+
sudo: true,
|
25
25
|
}
|
26
26
|
|
27
27
|
opts.on('-p', '--pretend', 'Print what would the program do') do
|
@@ -51,7 +51,7 @@ module VpsAdmin::CLI::Commands
|
|
51
51
|
exit_msg('--max-rate must be greater than zero') if r <= 0
|
52
52
|
@opts[:max_rate] = r
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
opts.on('-q', '--quiet', 'Print only errors') do |q|
|
56
56
|
@opts[:quiet] = q
|
57
57
|
end
|
@@ -90,9 +90,9 @@ module VpsAdmin::CLI::Commands
|
|
90
90
|
def exec(args)
|
91
91
|
if args.size == 1 && /^\d+$/ !~ args[0]
|
92
92
|
fs = args[0]
|
93
|
-
|
93
|
+
|
94
94
|
ds_id = read_dataset_id(fs)
|
95
|
-
|
95
|
+
|
96
96
|
if ds_id
|
97
97
|
ds = @api.dataset.show(ds_id)
|
98
98
|
else
|
@@ -130,8 +130,8 @@ module VpsAdmin::CLI::Commands
|
|
130
130
|
if remote_state[ds.current_history_id].nil? \
|
131
131
|
|| remote_state[ds.current_history_id].empty?
|
132
132
|
exit_msg(
|
133
|
-
|
134
|
-
|
133
|
+
"Nothing to transfer: no snapshots with history id #{ds.current_history_id}",
|
134
|
+
error: @opts[:no_snapshots_error]
|
135
135
|
)
|
136
136
|
end
|
137
137
|
|
@@ -170,9 +170,9 @@ module VpsAdmin::CLI::Commands
|
|
170
170
|
if for_transfer.empty?
|
171
171
|
if found_latest
|
172
172
|
exit_msg(
|
173
|
-
|
174
|
-
|
175
|
-
|
173
|
+
"Nothing to transfer: all snapshots with history id "+
|
174
|
+
"#{ds.current_history_id} are already present locally",
|
175
|
+
error: @opts[:no_snapshots_error]
|
176
176
|
)
|
177
177
|
|
178
178
|
else
|
@@ -205,7 +205,7 @@ END
|
|
205
205
|
for_transfer.each { |s| puts " @#{s.name}" }
|
206
206
|
puts
|
207
207
|
end
|
208
|
-
|
208
|
+
|
209
209
|
if @opts[:pretend]
|
210
210
|
pretend_state = local_state.clone
|
211
211
|
pretend_state[ds.current_history_id] ||= []
|
@@ -245,7 +245,7 @@ END
|
|
245
245
|
if local_state[hist_id].nil?
|
246
246
|
zfs(:create, nil, ds)
|
247
247
|
end
|
248
|
-
|
248
|
+
|
249
249
|
if no_local_snapshots
|
250
250
|
msg "Performing a full receive of @#{snapshots.first.name} to #{ds}"
|
251
251
|
|
@@ -255,12 +255,12 @@ END
|
|
255
255
|
else
|
256
256
|
run_piped(zfs_cmd(:recv, '-F', ds)) do
|
257
257
|
SnapshotSend.new({}, @api).do_exec({
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
258
|
+
snapshot: snapshots.first.id,
|
259
|
+
send_mail: false,
|
260
|
+
delete_after: @opts[:delete_after],
|
261
|
+
max_rate: @opts[:max_rate],
|
262
|
+
checksum: @opts[:checksum],
|
263
|
+
quiet: @opts[:quiet],
|
264
264
|
})
|
265
265
|
end || exit_msg('Receive failed')
|
266
266
|
end
|
@@ -276,13 +276,13 @@ END
|
|
276
276
|
else
|
277
277
|
run_piped(zfs_cmd(:recv, '-F', ds)) do
|
278
278
|
SnapshotSend.new({}, @api).do_exec({
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
279
|
+
snapshot: snapshots.last.id,
|
280
|
+
from_snapshot: snapshots.first.id,
|
281
|
+
send_mail: false,
|
282
|
+
delete_after: @opts[:delete_after],
|
283
|
+
max_rate: @opts[:max_rate],
|
284
|
+
checksum: @opts[:checksum],
|
285
|
+
quiet: @opts[:quiet],
|
286
286
|
})
|
287
287
|
end || exit_msg('Receive failed')
|
288
288
|
end
|
@@ -297,16 +297,16 @@ END
|
|
297
297
|
|
298
298
|
begin
|
299
299
|
SnapshotDownload.new({}, @api).do_exec({
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
300
|
+
snapshot: snapshot.id,
|
301
|
+
from_snapshot: from_snapshot && from_snapshot.id,
|
302
|
+
format: from_snapshot ? :incremental_stream : :stream,
|
303
|
+
file: part,
|
304
|
+
max_rate: @opts[:max_rate],
|
305
|
+
checksum: @opts[:checksum],
|
306
|
+
quiet: @opts[:quiet],
|
307
|
+
resume: true,
|
308
|
+
delete_after: @opts[:delete_after],
|
309
|
+
send_mail: false,
|
310
310
|
})
|
311
311
|
|
312
312
|
rescue Errno::ECONNREFUSED,
|
@@ -341,7 +341,7 @@ END
|
|
341
341
|
def rotate(fs, pretend: false)
|
342
342
|
msg "Rotating snapshots"
|
343
343
|
local_state = pretend ? pretend : parse_tree(fs)
|
344
|
-
|
344
|
+
|
345
345
|
# Order snapshots by date of creation
|
346
346
|
snapshots = local_state.values.flatten.sort do |a, b|
|
347
347
|
a.creation <=> b.creation
|
@@ -368,7 +368,7 @@ END
|
|
368
368
|
|
369
369
|
local_state.each do |hist_id, snapshots|
|
370
370
|
next unless snapshots.empty?
|
371
|
-
|
371
|
+
|
372
372
|
ds = "#{fs}/#{hist_id}"
|
373
373
|
|
374
374
|
msg "Destroying #{ds}"
|
@@ -386,7 +386,7 @@ END
|
|
386
386
|
last_name = name.split('/').last
|
387
387
|
ret[last_name.to_i] = [] if dataset?(last_name)
|
388
388
|
end
|
389
|
-
|
389
|
+
|
390
390
|
zfs(
|
391
391
|
:get,
|
392
392
|
'-Hrp -d2 -tsnapshot -oname,property,value name,creation',
|
@@ -10,20 +10,20 @@ module VpsAdmin::CLI::Commands
|
|
10
10
|
cmd :ip_traffic, :top
|
11
11
|
args ''
|
12
12
|
desc 'Live IP traffic monitor'
|
13
|
-
|
13
|
+
|
14
14
|
def options(opts)
|
15
15
|
@opts = {
|
16
|
-
|
16
|
+
unit: :bits,
|
17
17
|
}
|
18
18
|
|
19
19
|
opts.on('--unit UNIT', %w(bytes bits), 'Select data unit (bytes or bits)') do |v|
|
20
20
|
@opts[:unit] = v.to_sym
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
opts.on('--limit LIMIT', Integer, 'Number of IP addresses to monitor') do |v|
|
24
24
|
@opts[:limit] = v
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
opts.on('--ip-address ADDR', 'ADDR or ID of IP addresses to monitor') do |v|
|
28
28
|
id = ip_address_id(v)
|
29
29
|
|
@@ -35,11 +35,11 @@ module VpsAdmin::CLI::Commands
|
|
35
35
|
exit(1)
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
opts.on('--ip-version VER', [4, 6], 'Filter IP addresses by version') do |v|
|
40
40
|
@opts[:ip_version] = v
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
(FILTERS - %i(limit ip_address ip_version)).each do |f|
|
44
44
|
opts.on("--#{f.to_s.gsub(/_/, '-')} ID", Integer, "Filter IP addresses by #{f}") do |v|
|
45
45
|
@opts[f] = v
|
@@ -143,9 +143,9 @@ module VpsAdmin::CLI::Commands
|
|
143
143
|
size = title.size + 1
|
144
144
|
|
145
145
|
@columns << {
|
146
|
-
|
147
|
-
|
148
|
-
|
146
|
+
name: p,
|
147
|
+
title: title,
|
148
|
+
width: size < 8 ? 8 : size,
|
149
149
|
}
|
150
150
|
end
|
151
151
|
end
|
@@ -156,9 +156,9 @@ module VpsAdmin::CLI::Commands
|
|
156
156
|
limit = @opts[:limit] || lines - 6
|
157
157
|
|
158
158
|
params = {
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
limit: limit > 0 ? limit : 25,
|
160
|
+
order: "#{@sort_desc ? '-' : ''}#{@sort_param}",
|
161
|
+
meta: {includes: 'ip_address__network_interface'}
|
162
162
|
}
|
163
163
|
|
164
164
|
FILTERS.each do |f|
|
@@ -186,11 +186,11 @@ module VpsAdmin::CLI::Commands
|
|
186
186
|
attroff(color_pair(1))
|
187
187
|
|
188
188
|
i = 3
|
189
|
-
|
189
|
+
|
190
190
|
fetch.each do |data|
|
191
191
|
setpos(i, 0)
|
192
192
|
print_row(data)
|
193
|
-
|
193
|
+
|
194
194
|
i += 1
|
195
195
|
|
196
196
|
break if i >= (lines - 5)
|
@@ -205,20 +205,24 @@ module VpsAdmin::CLI::Commands
|
|
205
205
|
fmt = (['%-30s', '%6s'] + @columns.map { |c| "%#{c[:width]}s" }).join(' ')
|
206
206
|
|
207
207
|
@header = sprintf(
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
208
|
+
fmt,
|
209
|
+
'IP Address',
|
210
|
+
'VPS',
|
211
|
+
*@columns.map { |c| c[:title] },
|
212
212
|
)
|
213
213
|
|
214
214
|
@header << (' ' * (cols - @header.size)) << "\n"
|
215
215
|
end
|
216
|
-
|
216
|
+
|
217
217
|
addstr(@header)
|
218
218
|
end
|
219
219
|
|
220
220
|
def print_row(data)
|
221
|
-
addstr(sprintf(
|
221
|
+
addstr(sprintf(
|
222
|
+
'%-30s %6s',
|
223
|
+
data.ip_address.addr,
|
224
|
+
data.ip_address.network_interface.vps_id
|
225
|
+
))
|
222
226
|
|
223
227
|
@columns.each do |c|
|
224
228
|
p = c[:name]
|
@@ -236,7 +240,7 @@ module VpsAdmin::CLI::Commands
|
|
236
240
|
|
237
241
|
fields.each do |f|
|
238
242
|
stats[f] = 0
|
239
|
-
|
243
|
+
|
240
244
|
%i(in out).each do |dir|
|
241
245
|
stats[:"#{f}_#{dir}"] = 0
|
242
246
|
end
|
@@ -247,7 +251,7 @@ module VpsAdmin::CLI::Commands
|
|
247
251
|
|
248
252
|
fields.each do |f|
|
249
253
|
stats[f] += data.send(f)
|
250
|
-
|
254
|
+
|
251
255
|
%i(in out).each do |dir|
|
252
256
|
stats[:"#{f}_#{dir}"] += data.send("#{f}_#{dir}")
|
253
257
|
end
|
@@ -264,20 +268,20 @@ module VpsAdmin::CLI::Commands
|
|
264
268
|
|
265
269
|
setpos(lines-4, 0)
|
266
270
|
addstr(sprintf(
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
271
|
+
fmt,
|
272
|
+
'',
|
273
|
+
'Packets/s',
|
274
|
+
"#{unit}/s",
|
275
|
+
"Public#{unit}/s",
|
276
|
+
"Private#{unit}/s"
|
273
277
|
))
|
274
278
|
|
275
279
|
setpos(lines-3, 0)
|
276
280
|
addstr(sprintf(fmt, 'In', *fields.map { |f| unitize(stats[:"#{f}_in"], avg_delta) }))
|
277
|
-
|
281
|
+
|
278
282
|
setpos(lines-2, 0)
|
279
283
|
addstr(sprintf(fmt, 'Out', *fields.map { |f| unitize(stats[:"#{f}_out"], avg_delta) }))
|
280
|
-
|
284
|
+
|
281
285
|
setpos(lines-1, 0)
|
282
286
|
attron(A_BOLD)
|
283
287
|
addstr(sprintf(fmt, 'Total', *fields.map { |f| unitize(stats[:"#{f}_in"] + stats[:"#{f}_out"], avg_delta) }))
|
@@ -6,16 +6,16 @@ module VpsAdmin::CLI::Commands
|
|
6
6
|
|
7
7
|
def options(opts)
|
8
8
|
@opts = {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
delete_after: true,
|
10
|
+
send_mail: false,
|
11
|
+
checksum: true,
|
12
|
+
format: 'archive',
|
13
13
|
}
|
14
14
|
|
15
15
|
opts.on('-f', '--format FORMAT', 'archive, stream or incremental_stream') do |f|
|
16
16
|
@opts[:format] = f
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
opts.on('-I', '--from-snapshot SNAPSHOT_ID', Integer, 'Download snapshot incrementally from SNAPSHOT_ID') do |s|
|
20
20
|
@opts[:from_snapshot] = s
|
21
21
|
end
|
@@ -65,7 +65,7 @@ module VpsAdmin::CLI::Commands
|
|
65
65
|
else
|
66
66
|
@opts[:snapshot] = args.first.to_i
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
do_exec(@opts)
|
70
70
|
end
|
71
71
|
|
@@ -101,19 +101,19 @@ module VpsAdmin::CLI::Commands
|
|
101
101
|
|
102
102
|
begin
|
103
103
|
VpsAdmin::CLI::StreamDownloader.download(
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
104
|
+
@api,
|
105
|
+
dl,
|
106
|
+
f,
|
107
|
+
progress: !@opts[:quiet] && (f == STDOUT ? STDERR : STDOUT),
|
108
|
+
position: pos,
|
109
|
+
max_rate: @opts[:max_rate],
|
110
|
+
checksum: @opts[:checksum],
|
111
111
|
)
|
112
112
|
|
113
113
|
rescue VpsAdmin::CLI::DownloadError => e
|
114
114
|
warn e.message
|
115
115
|
exit(false)
|
116
|
-
|
116
|
+
|
117
117
|
ensure
|
118
118
|
f.close
|
119
119
|
end
|
@@ -139,9 +139,9 @@ module VpsAdmin::CLI::Commands
|
|
139
139
|
STDERR.flush
|
140
140
|
|
141
141
|
action = {
|
142
|
-
|
143
|
-
|
144
|
-
|
142
|
+
'r' => :resume,
|
143
|
+
'o' => :overwrite,
|
144
|
+
'' => false,
|
145
145
|
}[STDIN.readline.strip.downcase]
|
146
146
|
end
|
147
147
|
|
@@ -149,7 +149,7 @@ module VpsAdmin::CLI::Commands
|
|
149
149
|
warn "File '#{path}' already exists"
|
150
150
|
exit(false)
|
151
151
|
end
|
152
|
-
|
152
|
+
|
153
153
|
case action
|
154
154
|
when :resume
|
155
155
|
mode = 'a+'
|
@@ -216,4 +216,4 @@ module VpsAdmin::CLI::Commands
|
|
216
216
|
end
|
217
217
|
end
|
218
218
|
end
|
219
|
-
end
|
219
|
+
end
|
@@ -8,11 +8,11 @@ module VpsAdmin::CLI::Commands
|
|
8
8
|
|
9
9
|
def options(opts)
|
10
10
|
@opts = {
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
delete_after: true,
|
12
|
+
send_mail: false,
|
13
|
+
checksum: true,
|
14
14
|
}
|
15
|
-
|
15
|
+
|
16
16
|
opts.on('-I', '--from-snapshot SNAPSHOT_ID', Integer, 'Download snapshot incrementally from SNAPSHOT_ID') do |s|
|
17
17
|
@opts[:from_snapshot] = s
|
18
18
|
end
|
@@ -20,7 +20,7 @@ module VpsAdmin::CLI::Commands
|
|
20
20
|
opts.on('-d', '--[no-]delete-after', 'Delete the file from the server after successful download') do |d|
|
21
21
|
@opts[:delete_after] = d
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
opts.on('-q', '--quiet', 'Print only errors') do |q|
|
25
25
|
@opts[:quiet] = q
|
26
26
|
end
|
@@ -72,12 +72,12 @@ module VpsAdmin::CLI::Commands
|
|
72
72
|
|
73
73
|
begin
|
74
74
|
VpsAdmin::CLI::StreamDownloader.download(
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
75
|
+
@api,
|
76
|
+
dl,
|
77
|
+
w,
|
78
|
+
progress: !opts[:quiet] && STDERR,
|
79
|
+
max_rate: opts[:max_rate],
|
80
|
+
checksum: opts[:checksum],
|
81
81
|
)
|
82
82
|
|
83
83
|
rescue VpsAdmin::CLI::DownloadError => e
|
@@ -3,7 +3,7 @@ module VpsAdmin::CLI::Commands
|
|
3
3
|
cmd :vps, :migrate_many
|
4
4
|
args 'VPS_ID...'
|
5
5
|
desc 'Migrate multiple VPSes using a migration plan'
|
6
|
-
|
6
|
+
|
7
7
|
def options(opts)
|
8
8
|
@opts = {}
|
9
9
|
|
@@ -14,11 +14,11 @@ module VpsAdmin::CLI::Commands
|
|
14
14
|
opts.on('--dst-node NODE_ID', 'Destination node') do |id|
|
15
15
|
@opts[:dst_node] = id.to_i
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
opts.on('--[no-]outage-window', 'Migrate VPSes inside outage windows') do |w|
|
19
19
|
@opts[:outage_window] = w
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
opts.on('--[no-]cleanup-data', 'Cleanup VPS dataset on the source node') do |c|
|
23
23
|
@opts[:cleanup_data] = c
|
24
24
|
end
|
@@ -26,7 +26,7 @@ module VpsAdmin::CLI::Commands
|
|
26
26
|
opts.on('--[no-]stop-on-error', 'Cancel the plan if a migration fails') do |s|
|
27
27
|
@opts[:stop_on_error] = s
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
opts.on('--concurrency N', 'How many migrations run concurrently') do |n|
|
31
31
|
@opts[:concurrency] = n.to_i
|
32
32
|
end
|
@@ -34,7 +34,7 @@ module VpsAdmin::CLI::Commands
|
|
34
34
|
opts.on('--[no-]send-mail', 'Send users mail informing about the migration') do |s|
|
35
35
|
@opts[:send_mail] = s
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
opts.on('--reason REASON', 'Why are the VPS being migrated') do |r|
|
39
39
|
@opts[:reason] = r
|
40
40
|
end
|
@@ -87,15 +87,15 @@ module VpsAdmin::CLI::Commands
|
|
87
87
|
begin
|
88
88
|
vpses.each do |vps_id|
|
89
89
|
params = {
|
90
|
-
|
91
|
-
|
90
|
+
vps: vps_id,
|
91
|
+
dst_node: @opts[:dst_node],
|
92
92
|
}
|
93
93
|
params[:outage_window] = @opts[:outage_window] unless @opts[:outage_window].nil?
|
94
94
|
params[:cleanup_data] = @opts[:cleanup_data] unless @opts[:cleanup_data].nil?
|
95
95
|
|
96
96
|
plan.vps_migration.create(params)
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
rescue HaveAPI::Client::ActionFailed => e
|
100
100
|
report_error(e)
|
101
101
|
end
|
@@ -107,7 +107,7 @@ module VpsAdmin::CLI::Commands
|
|
107
107
|
rescue HaveAPI::Client::ActionFailed => e
|
108
108
|
report_error(e)
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
HaveAPI::CLI::OutputFormatter.print(ret.attributes)
|
112
112
|
end
|
113
113
|
|
@@ -66,7 +66,7 @@ module VpsAdmin::CLI::Commands
|
|
66
66
|
|
67
67
|
def options(opts)
|
68
68
|
@opts = {
|
69
|
-
|
69
|
+
rate: 0.05
|
70
70
|
}
|
71
71
|
|
72
72
|
opts.on('--refresh-rate MSEC', 'How often send and receive data, defaults to 50 ms') do |r|
|
@@ -136,7 +136,7 @@ module VpsAdmin::CLI::Commands
|
|
136
136
|
|
137
137
|
pid = Process.fork do
|
138
138
|
@size = Terminal.size!
|
139
|
-
|
139
|
+
|
140
140
|
Signal.trap('WINCH') do
|
141
141
|
@size = Terminal.size!
|
142
142
|
end
|
@@ -144,7 +144,7 @@ module VpsAdmin::CLI::Commands
|
|
144
144
|
yield
|
145
145
|
end
|
146
146
|
|
147
|
-
Process.wait(pid)
|
147
|
+
Process.wait(pid)
|
148
148
|
|
149
149
|
`stty #{state}`
|
150
150
|
puts
|
@@ -152,13 +152,13 @@ module VpsAdmin::CLI::Commands
|
|
152
152
|
|
153
153
|
def communicate
|
154
154
|
post = @http.post(
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
155
|
+
body: {
|
156
|
+
session: @token,
|
157
|
+
keys: @input.buffer,
|
158
|
+
width: @size[:width],
|
159
|
+
height: @size[:height],
|
160
|
+
},
|
161
|
+
keepalive: true
|
162
162
|
)
|
163
163
|
|
164
164
|
@input.buffer = ''
|
@@ -170,7 +170,7 @@ module VpsAdmin::CLI::Commands
|
|
170
170
|
|
171
171
|
post.callback do
|
172
172
|
ret = JSON.parse(post.response, symbolize_names: true)
|
173
|
-
|
173
|
+
|
174
174
|
unless ret[:session]
|
175
175
|
$stdout.write(ret[:data])
|
176
176
|
puts "\nSession closed."
|
@@ -21,12 +21,12 @@ module VpsAdmin::CLI
|
|
21
21
|
if position > 0 && checksum
|
22
22
|
if progress
|
23
23
|
pb = ProgressBar.create(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
title: 'Calculating checksum',
|
25
|
+
total: position,
|
26
|
+
format: '%E %t: [%B] %p%% %r MB/s',
|
27
|
+
rate_scale: ->(rate) { (rate / 1024.0 / 1024.0).round(2) },
|
28
|
+
throttle_rate: 0.2,
|
29
|
+
output: progress,
|
30
30
|
)
|
31
31
|
end
|
32
32
|
|
@@ -49,14 +49,14 @@ module VpsAdmin::CLI
|
|
49
49
|
self.format = '%t: [%B] %r kB/s'
|
50
50
|
|
51
51
|
@pb = ProgressBar.create(
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
52
|
+
title: 'Downloading',
|
53
|
+
total: nil,
|
54
|
+
format: @format,
|
55
|
+
rate_scale: ->(rate) { (rate / 1024.0).round(2) },
|
56
|
+
throttle_rate: 0.2,
|
57
|
+
starting_at: downloaded,
|
58
|
+
autofinish: false,
|
59
|
+
output: progress,
|
60
60
|
)
|
61
61
|
end
|
62
62
|
|
@@ -129,7 +129,7 @@ module VpsAdmin::CLI
|
|
129
129
|
else
|
130
130
|
raise DownloadError, "Unexpected HTTP status code '#{res.code}'"
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
t1 = Time.now
|
134
134
|
data_counter = 0
|
135
135
|
|
@@ -170,7 +170,7 @@ module VpsAdmin::CLI
|
|
170
170
|
t1 = Time.now
|
171
171
|
end
|
172
172
|
end
|
173
|
-
|
173
|
+
|
174
174
|
io.write(fragment)
|
175
175
|
end
|
176
176
|
end
|
@@ -194,7 +194,7 @@ module VpsAdmin::CLI
|
|
194
194
|
protected
|
195
195
|
def pause(secs)
|
196
196
|
@paused = true
|
197
|
-
|
197
|
+
|
198
198
|
if @pb
|
199
199
|
secs.times do |i|
|
200
200
|
if @download_size
|
data/shell.nix
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
let
|
2
|
+
pkgs = import <nixpkgs> {};
|
3
|
+
stdenv = pkgs.stdenv;
|
4
|
+
|
5
|
+
in stdenv.mkDerivation rec {
|
6
|
+
name = "vpsadmin-client";
|
7
|
+
|
8
|
+
buildInputs = [
|
9
|
+
pkgs.ruby
|
10
|
+
pkgs.git
|
11
|
+
pkgs.zlib
|
12
|
+
pkgs.openssl
|
13
|
+
pkgs.ncurses
|
14
|
+
];
|
15
|
+
|
16
|
+
shellHook = ''
|
17
|
+
mkdir -p /tmp/dev-ruby-gems
|
18
|
+
export GEM_HOME="/tmp/dev-ruby-gems"
|
19
|
+
export GEM_PATH="$GEM_HOME:$PWD/lib"
|
20
|
+
export PATH="$GEM_HOME/bin:$PATH"
|
21
|
+
|
22
|
+
BUNDLE="$GEM_HOME/bin/bundle"
|
23
|
+
|
24
|
+
[ ! -x "$BUNDLE" ] && ${pkgs.ruby}/bin/gem install bundler
|
25
|
+
|
26
|
+
export BUNDLE_PATH="$GEM_HOME"
|
27
|
+
export BUNDLE_GEMFILE="$PWD/Gemfile"
|
28
|
+
|
29
|
+
$BUNDLE install
|
30
|
+
|
31
|
+
export RUBYOPT=-rbundler/setup
|
32
|
+
'';
|
33
|
+
}
|
data/vpsadmin-client.gemspec
CHANGED
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler'
|
21
|
+
spec.add_development_dependency 'bundler'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
|
24
|
-
spec.add_runtime_dependency 'haveapi-client', '~> 0.
|
24
|
+
spec.add_runtime_dependency 'haveapi-client', '~> 0.13.0'
|
25
25
|
spec.add_runtime_dependency 'eventmachine', '~> 1.0.3'
|
26
26
|
spec.add_runtime_dependency 'em-http-request', '~> 1.1.3'
|
27
27
|
spec.add_runtime_dependency 'json'
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vpsadmin-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0.master.20190517.pre.0.3ab5ddfe
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Skokan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.13.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.13.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: eventmachine
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/vpsadmin/cli/stream_downloader.rb
|
137
137
|
- lib/vpsadmin/client.rb
|
138
138
|
- lib/vpsadmin/client/version.rb
|
139
|
+
- shell.nix
|
139
140
|
- vpsadmin-client.gemspec
|
140
141
|
homepage: ''
|
141
142
|
licenses:
|
@@ -152,12 +153,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
153
|
version: '0'
|
153
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
155
|
requirements:
|
155
|
-
- - "
|
156
|
+
- - ">"
|
156
157
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
158
|
+
version: 1.3.1
|
158
159
|
requirements: []
|
159
160
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.6.
|
161
|
+
rubygems_version: 2.7.6.2
|
161
162
|
signing_key:
|
162
163
|
specification_version: 4
|
163
164
|
summary: Ruby API and CLI for vpsAdmin API
|