aspera-cli 4.24.1 → 4.25.0.pre
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +1064 -745
- data/CONTRIBUTING.md +43 -100
- data/README.md +1281 -720
- data/bin/ascli +20 -1
- data/bin/asession +23 -27
- data/lib/aspera/agent/base.rb +10 -21
- data/lib/aspera/agent/connect.rb +2 -3
- data/lib/aspera/agent/desktop.rb +2 -2
- data/lib/aspera/agent/direct.rb +49 -32
- data/lib/aspera/agent/factory.rb +31 -0
- data/lib/aspera/api/aoc.rb +134 -76
- data/lib/aspera/api/cos_node.rb +3 -2
- data/lib/aspera/api/faspex.rb +213 -0
- data/lib/aspera/api/node.rb +107 -94
- data/lib/aspera/ascmd.rb +1 -2
- data/lib/aspera/ascp/installation.rb +73 -58
- data/lib/aspera/ascp/management.rb +119 -23
- data/lib/aspera/assert.rb +39 -11
- data/lib/aspera/cli/error.rb +4 -2
- data/lib/aspera/cli/extended_value.rb +91 -67
- data/lib/aspera/cli/formatter.rb +62 -27
- data/lib/aspera/cli/hints.rb +8 -0
- data/lib/aspera/cli/info.rb +4 -4
- data/lib/aspera/cli/main.rb +76 -84
- data/lib/aspera/cli/manager.rb +352 -248
- data/lib/aspera/cli/plugins/alee.rb +5 -4
- data/lib/aspera/cli/plugins/aoc.rb +175 -195
- data/lib/aspera/cli/plugins/ats.rb +4 -4
- data/lib/aspera/cli/plugins/base.rb +343 -0
- data/lib/aspera/cli/plugins/basic_auth.rb +45 -0
- data/lib/aspera/cli/plugins/config.rb +283 -269
- data/lib/aspera/cli/plugins/console.rb +27 -22
- data/lib/aspera/cli/plugins/cos.rb +3 -3
- data/lib/aspera/cli/plugins/factory.rb +78 -0
- data/lib/aspera/cli/plugins/faspex.rb +49 -46
- data/lib/aspera/cli/plugins/faspex5.rb +113 -225
- data/lib/aspera/cli/plugins/faspio.rb +19 -18
- data/lib/aspera/cli/plugins/httpgw.rb +14 -13
- data/lib/aspera/cli/plugins/node.rb +162 -149
- data/lib/aspera/cli/plugins/oauth.rb +48 -0
- data/lib/aspera/cli/plugins/orchestrator.rb +129 -45
- data/lib/aspera/cli/plugins/preview.rb +30 -50
- data/lib/aspera/cli/plugins/server.rb +21 -21
- data/lib/aspera/cli/plugins/shares.rb +45 -47
- data/lib/aspera/cli/sync_actions.rb +50 -39
- data/lib/aspera/cli/transfer_agent.rb +35 -49
- data/lib/aspera/cli/transfer_progress.rb +6 -6
- data/lib/aspera/cli/version.rb +3 -3
- data/lib/aspera/cli/wizard.rb +70 -55
- data/lib/aspera/colors.rb +6 -0
- data/lib/aspera/command_line_builder.rb +59 -61
- data/lib/aspera/command_line_converter.rb +2 -1
- data/lib/aspera/coverage.rb +2 -2
- data/lib/aspera/data_repository.rb +1 -1
- data/lib/aspera/environment.rb +51 -41
- data/lib/aspera/faspex_gw.rb +7 -5
- data/lib/aspera/faspex_postproc.rb +1 -1
- data/lib/aspera/keychain/factory.rb +1 -2
- data/lib/aspera/keychain/macos_security.rb +1 -1
- data/lib/aspera/log.rb +37 -9
- data/lib/aspera/markdown.rb +31 -0
- data/lib/aspera/nagios.rb +7 -6
- data/lib/aspera/oauth/base.rb +25 -28
- data/lib/aspera/oauth/factory.rb +9 -9
- data/lib/aspera/oauth/url_json.rb +2 -1
- data/lib/aspera/oauth/web.rb +2 -2
- data/lib/aspera/preview/file_types.rb +23 -37
- data/lib/aspera/products/connect.rb +7 -6
- data/lib/aspera/products/desktop.rb +1 -4
- data/lib/aspera/products/other.rb +9 -1
- data/lib/aspera/products/transferd.rb +0 -1
- data/lib/aspera/rest.rb +168 -113
- data/lib/aspera/rest_error_analyzer.rb +4 -4
- data/lib/aspera/ssh.rb +7 -4
- data/lib/aspera/ssl.rb +41 -0
- data/lib/aspera/sync/args.schema.yaml +46 -3
- data/lib/aspera/sync/conf.schema.yaml +307 -123
- data/lib/aspera/sync/database.rb +2 -1
- data/lib/aspera/sync/operations.rb +135 -79
- data/lib/aspera/temp_file_manager.rb +17 -5
- data/lib/aspera/transfer/error.rb +16 -7
- data/lib/aspera/transfer/parameters.rb +35 -22
- data/lib/aspera/transfer/resumer.rb +74 -0
- data/lib/aspera/transfer/spec.rb +5 -5
- data/lib/aspera/transfer/spec.schema.yaml +170 -59
- data/lib/aspera/transfer/spec_doc.rb +49 -43
- data/lib/aspera/uri_reader.rb +2 -2
- data/lib/aspera/web_auth.rb +6 -6
- data/lib/transferd_pb.rb +2 -2
- data.tar.gz.sig +0 -0
- metadata +26 -11
- metadata.gz.sig +0 -0
- data/lib/aspera/cli/basic_auth_plugin.rb +0 -43
- data/lib/aspera/cli/plugin.rb +0 -333
- data/lib/aspera/cli/plugin_factory.rb +0 -81
- data/lib/aspera/resumer.rb +0 -77
- data/lib/aspera/transfer/error_info.rb +0 -91
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'singleton'
|
|
4
|
+
require 'aspera/log'
|
|
5
|
+
require 'aspera/assert'
|
|
6
|
+
require 'aspera/transfer/error'
|
|
7
|
+
|
|
8
|
+
module Aspera
|
|
9
|
+
module Transfer
|
|
10
|
+
# Implements a simple resume policy
|
|
11
|
+
class Resumer
|
|
12
|
+
# @param iter_max [Integer] Maximum number of executions
|
|
13
|
+
# @param sleep_initial [Integer] Initial wait to re-execute
|
|
14
|
+
# @param sleep_factor [Integer] Multiplier
|
|
15
|
+
# @param sleep_max. [Integer] Max iterations
|
|
16
|
+
def initialize(
|
|
17
|
+
iter_max: 7,
|
|
18
|
+
sleep_initial: 2,
|
|
19
|
+
sleep_factor: 2,
|
|
20
|
+
sleep_max: 60
|
|
21
|
+
)
|
|
22
|
+
Aspera.assert_type(iter_max, Integer){k}
|
|
23
|
+
@iter_max = iter_max
|
|
24
|
+
Aspera.assert_type(sleep_initial, Integer){k}
|
|
25
|
+
@sleep_initial = sleep_initial
|
|
26
|
+
Aspera.assert_type(sleep_factor, Integer){k}
|
|
27
|
+
@sleep_factor = sleep_factor
|
|
28
|
+
Aspera.assert_type(sleep_max, Integer){k}
|
|
29
|
+
@sleep_max = sleep_max
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Calls block a number of times (resumes) until success or limit reached
|
|
33
|
+
# This is re-entrant, one resumer can handle multiple transfers in //
|
|
34
|
+
#
|
|
35
|
+
# @param block [Proc]
|
|
36
|
+
def execute_with_resume
|
|
37
|
+
Aspera.assert(block_given?)
|
|
38
|
+
# maximum of retry
|
|
39
|
+
remaining_resumes = @iter_max
|
|
40
|
+
sleep_seconds = @sleep_initial
|
|
41
|
+
Log.log.debug{"retries=#{remaining_resumes}"}
|
|
42
|
+
# try to send the file until ascp is successful
|
|
43
|
+
loop do
|
|
44
|
+
Log.log.debug('Transfer session starting')
|
|
45
|
+
begin
|
|
46
|
+
# Call provided block: execute transfer
|
|
47
|
+
yield
|
|
48
|
+
# Exit retry loop if success
|
|
49
|
+
break
|
|
50
|
+
rescue Error => e
|
|
51
|
+
Log.log.warn{"A transfer error occurred during transfer: #{e.message}"}
|
|
52
|
+
Log.log.debug{"Retryable ? #{e.retryable?}"}
|
|
53
|
+
# do not retry non-retryable
|
|
54
|
+
raise unless e.retryable?
|
|
55
|
+
# exit if we exceed the max number of retry
|
|
56
|
+
raise Error, "Maximum number of retry reached: #{@iter_max}" if remaining_resumes <= 0
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# take this retry in account
|
|
60
|
+
remaining_resumes -= 1
|
|
61
|
+
Log.log.warn{"Resuming in #{sleep_seconds} seconds (retry left:#{remaining_resumes})"}
|
|
62
|
+
|
|
63
|
+
# wait a bit before retrying, maybe network condition will be better
|
|
64
|
+
sleep(sleep_seconds)
|
|
65
|
+
|
|
66
|
+
# increase retry period
|
|
67
|
+
sleep_seconds *= @sleep_factor
|
|
68
|
+
# cap value
|
|
69
|
+
sleep_seconds = @sleep_max if sleep_seconds > @sleep_max
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
data/lib/aspera/transfer/spec.rb
CHANGED
|
@@ -5,7 +5,8 @@ require 'aspera/assert'
|
|
|
5
5
|
|
|
6
6
|
module Aspera
|
|
7
7
|
module Transfer
|
|
8
|
-
#
|
|
8
|
+
# Parameters for Transfer Spec
|
|
9
|
+
# Parameters are generated from JSON Schema.
|
|
9
10
|
class Spec
|
|
10
11
|
# default transfer username for access key based transfers
|
|
11
12
|
ACCESS_KEY_TRANSFER_USER = 'xfer'
|
|
@@ -21,7 +22,7 @@ module Aspera
|
|
|
21
22
|
# fields for WSS
|
|
22
23
|
WSS_FIELDS = %w[wss_enabled wss_port].freeze
|
|
23
24
|
# all fields for transport
|
|
24
|
-
TRANSPORT_FIELDS = %w[remote_host
|
|
25
|
+
TRANSPORT_FIELDS = (%w[remote_host] + AK_TSPEC_BASE.keys + WSS_FIELDS).freeze
|
|
25
26
|
# reserved tag for Aspera
|
|
26
27
|
TAG_RESERVED = 'aspera'
|
|
27
28
|
class << self
|
|
@@ -44,12 +45,11 @@ module Aspera
|
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
def fix_transferd_resume_policy(transfer_spec)
|
|
47
|
-
# Fix
|
|
48
|
+
# Fix discrepancy in transfer spec
|
|
48
49
|
transfer_spec['resume_policy'] = POLICY_FIX[transfer_spec['resume_policy']] if transfer_spec.key?('resume_policy')
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
|
-
SCHEMA = CommandLineBuilder.read_schema(
|
|
52
|
-
CommandLineBuilder.adjust_properties_defaults(SCHEMA['properties'])
|
|
52
|
+
SCHEMA = CommandLineBuilder.read_schema(__dir__, 'spec', ascp: true)
|
|
53
53
|
# define constants for enums of parameters: <parameter>_<enum>, e.g. CIPHER_AES_128, DIRECTION_SEND, ...
|
|
54
54
|
SCHEMA['properties'].each do |name, description|
|
|
55
55
|
next unless description['enum'].is_a?(Array)
|