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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +1064 -745
  4. data/CONTRIBUTING.md +43 -100
  5. data/README.md +1281 -720
  6. data/bin/ascli +20 -1
  7. data/bin/asession +23 -27
  8. data/lib/aspera/agent/base.rb +10 -21
  9. data/lib/aspera/agent/connect.rb +2 -3
  10. data/lib/aspera/agent/desktop.rb +2 -2
  11. data/lib/aspera/agent/direct.rb +49 -32
  12. data/lib/aspera/agent/factory.rb +31 -0
  13. data/lib/aspera/api/aoc.rb +134 -76
  14. data/lib/aspera/api/cos_node.rb +3 -2
  15. data/lib/aspera/api/faspex.rb +213 -0
  16. data/lib/aspera/api/node.rb +107 -94
  17. data/lib/aspera/ascmd.rb +1 -2
  18. data/lib/aspera/ascp/installation.rb +73 -58
  19. data/lib/aspera/ascp/management.rb +119 -23
  20. data/lib/aspera/assert.rb +39 -11
  21. data/lib/aspera/cli/error.rb +4 -2
  22. data/lib/aspera/cli/extended_value.rb +91 -67
  23. data/lib/aspera/cli/formatter.rb +62 -27
  24. data/lib/aspera/cli/hints.rb +8 -0
  25. data/lib/aspera/cli/info.rb +4 -4
  26. data/lib/aspera/cli/main.rb +76 -84
  27. data/lib/aspera/cli/manager.rb +352 -248
  28. data/lib/aspera/cli/plugins/alee.rb +5 -4
  29. data/lib/aspera/cli/plugins/aoc.rb +175 -195
  30. data/lib/aspera/cli/plugins/ats.rb +4 -4
  31. data/lib/aspera/cli/plugins/base.rb +343 -0
  32. data/lib/aspera/cli/plugins/basic_auth.rb +45 -0
  33. data/lib/aspera/cli/plugins/config.rb +283 -269
  34. data/lib/aspera/cli/plugins/console.rb +27 -22
  35. data/lib/aspera/cli/plugins/cos.rb +3 -3
  36. data/lib/aspera/cli/plugins/factory.rb +78 -0
  37. data/lib/aspera/cli/plugins/faspex.rb +49 -46
  38. data/lib/aspera/cli/plugins/faspex5.rb +113 -225
  39. data/lib/aspera/cli/plugins/faspio.rb +19 -18
  40. data/lib/aspera/cli/plugins/httpgw.rb +14 -13
  41. data/lib/aspera/cli/plugins/node.rb +162 -149
  42. data/lib/aspera/cli/plugins/oauth.rb +48 -0
  43. data/lib/aspera/cli/plugins/orchestrator.rb +129 -45
  44. data/lib/aspera/cli/plugins/preview.rb +30 -50
  45. data/lib/aspera/cli/plugins/server.rb +21 -21
  46. data/lib/aspera/cli/plugins/shares.rb +45 -47
  47. data/lib/aspera/cli/sync_actions.rb +50 -39
  48. data/lib/aspera/cli/transfer_agent.rb +35 -49
  49. data/lib/aspera/cli/transfer_progress.rb +6 -6
  50. data/lib/aspera/cli/version.rb +3 -3
  51. data/lib/aspera/cli/wizard.rb +70 -55
  52. data/lib/aspera/colors.rb +6 -0
  53. data/lib/aspera/command_line_builder.rb +59 -61
  54. data/lib/aspera/command_line_converter.rb +2 -1
  55. data/lib/aspera/coverage.rb +2 -2
  56. data/lib/aspera/data_repository.rb +1 -1
  57. data/lib/aspera/environment.rb +51 -41
  58. data/lib/aspera/faspex_gw.rb +7 -5
  59. data/lib/aspera/faspex_postproc.rb +1 -1
  60. data/lib/aspera/keychain/factory.rb +1 -2
  61. data/lib/aspera/keychain/macos_security.rb +1 -1
  62. data/lib/aspera/log.rb +37 -9
  63. data/lib/aspera/markdown.rb +31 -0
  64. data/lib/aspera/nagios.rb +7 -6
  65. data/lib/aspera/oauth/base.rb +25 -28
  66. data/lib/aspera/oauth/factory.rb +9 -9
  67. data/lib/aspera/oauth/url_json.rb +2 -1
  68. data/lib/aspera/oauth/web.rb +2 -2
  69. data/lib/aspera/preview/file_types.rb +23 -37
  70. data/lib/aspera/products/connect.rb +7 -6
  71. data/lib/aspera/products/desktop.rb +1 -4
  72. data/lib/aspera/products/other.rb +9 -1
  73. data/lib/aspera/products/transferd.rb +0 -1
  74. data/lib/aspera/rest.rb +168 -113
  75. data/lib/aspera/rest_error_analyzer.rb +4 -4
  76. data/lib/aspera/ssh.rb +7 -4
  77. data/lib/aspera/ssl.rb +41 -0
  78. data/lib/aspera/sync/args.schema.yaml +46 -3
  79. data/lib/aspera/sync/conf.schema.yaml +307 -123
  80. data/lib/aspera/sync/database.rb +2 -1
  81. data/lib/aspera/sync/operations.rb +135 -79
  82. data/lib/aspera/temp_file_manager.rb +17 -5
  83. data/lib/aspera/transfer/error.rb +16 -7
  84. data/lib/aspera/transfer/parameters.rb +35 -22
  85. data/lib/aspera/transfer/resumer.rb +74 -0
  86. data/lib/aspera/transfer/spec.rb +5 -5
  87. data/lib/aspera/transfer/spec.schema.yaml +170 -59
  88. data/lib/aspera/transfer/spec_doc.rb +49 -43
  89. data/lib/aspera/uri_reader.rb +2 -2
  90. data/lib/aspera/web_auth.rb +6 -6
  91. data/lib/transferd_pb.rb +2 -2
  92. data.tar.gz.sig +0 -0
  93. metadata +26 -11
  94. metadata.gz.sig +0 -0
  95. data/lib/aspera/cli/basic_auth_plugin.rb +0 -43
  96. data/lib/aspera/cli/plugin.rb +0 -333
  97. data/lib/aspera/cli/plugin_factory.rb +0 -81
  98. data/lib/aspera/resumer.rb +0 -77
  99. 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
@@ -5,7 +5,8 @@ require 'aspera/assert'
5
5
 
6
6
  module Aspera
7
7
  module Transfer
8
- # parameters for Transfer Spec
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 remote_user ssh_port fasp_port].concat(WSS_FIELDS).freeze
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 discrepency in transfer spec
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(__FILE__, 'spec')
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)