envoi-mam-agent 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -34,18 +34,23 @@ module Envoi
34
34
  def initialize_api_client(args = { })
35
35
  _vidispine_config = vidispine_config
36
36
  @api_client = args[:vidispine_api_client] || begin
37
-
37
+
38
38
  vidispine_host = _vidispine_config['host']
39
+ vidispine_port = _vidispine_config['port']
40
+ vidispine_host_use_ssl = _vidispine_config['use_ssl']
39
41
  vidispine_username = _vidispine_config['username']
40
42
  vidispine_password = _vidispine_config['password']
43
+
41
44
  client_args = { }
42
45
  client_args[:http_host_address] = vidispine_host if vidispine_host
46
+ client_args[:http_host_port] = vidispine_port if vidispine_port
47
+ client_args[:http_host_use_ssl] = vidispine_host_use_ssl if vidispine_host_use_ssl
43
48
  client_args[:username] = vidispine_username if vidispine_username
44
49
  client_args[:password] = vidispine_password if vidispine_password
45
50
  ::Vidispine::API::Utilities.new(client_args)
46
51
  end
47
52
 
48
- @default_vidispine_shape_tag = args[:default_shape_tag] || _vidispine_config['default_shape_tag'] || _vidispine_config['shape_tag'] || DEFAULT_SHAPE_TAG
53
+ @default_vidispine_original_shape_tag = args[:default_shape_tag] || _vidispine_config['default_shape_tag'] || _vidispine_config['shape_tag'] || DEFAULT_SHAPE_TAG
49
54
 
50
55
  end
51
56
 
@@ -0,0 +1,73 @@
1
+ require 'envoi/mam/agent'
2
+ require 'envoi/mam/agent/transfer_client/aspera'
3
+ require 'envoi/mam/agent/transfer_client/s3'
4
+
5
+ require 'envoi/restore/sqs-queue-worker'
6
+ require 'envoi/restore/glacier-restore-event-handler'
7
+
8
+ module Envoi
9
+
10
+ class Restore
11
+
12
+ class Agent < Envoi::Mam::Agent
13
+
14
+ DEFAULT_ASPERA_ARGS = '-v -k3 --overwrite=diff -P 33001'
15
+ DEFAULT_DESTINATION_PATH = '.'
16
+
17
+ attr_accessor :default_aspera_ascp_args,
18
+ :default_aspera_ascp_path
19
+
20
+ def after_initialize
21
+ args = initial_args
22
+ @running = false
23
+ @should_stop = false
24
+ @default_aspera_ascp_path = args[:default_aspera_ascp_path]
25
+ @default_aspera_args = args[:default_ascp_args] || DEFAULT_ASPERA_ARGS
26
+ initialize_queue_handler
27
+ initialize_event_handler
28
+ end
29
+
30
+ def system_config
31
+ @system_config ||= config['restore'] || { }
32
+ end
33
+
34
+ def sqs_config
35
+ @sqs_config ||= system_config['sqs'] || {}
36
+ end
37
+
38
+ def initialize_queue_handler
39
+ @queue_handler = SQSQueueWorker.new(config: sqs_config)
40
+ @queue_handler.poller.before_request do |stats|
41
+ throw :stop_polling if @should_stop
42
+ end
43
+ end
44
+
45
+ def initialize_event_handler
46
+ @event_handler = GlacierRestoreEventHandler.new(config: sqs_config)
47
+ end
48
+
49
+ def run
50
+ @running = true
51
+ @queue_handler.poll do |messages|
52
+ [*messages].each do |msg|
53
+ break if @should_stop
54
+ msg_body_parsed = JSON.parse(msg.body)
55
+ event = msg_body_parsed
56
+ @event_handler.process_event(event)
57
+ end
58
+ throw :stop_polling if @should_stop
59
+ end
60
+ @running = false
61
+ end
62
+
63
+ def stop
64
+ @should_stop = true
65
+ end
66
+
67
+ # Agent
68
+ end
69
+
70
+ # Restore
71
+ end
72
+
73
+ end
@@ -0,0 +1,94 @@
1
+ require 'logger'
2
+ require 'envoi/mam/agent'
3
+ require 'envoi/mam/agent/transfer_client/aspera'
4
+ require 'envoi/mam/agent/transfer_client/s3'
5
+
6
+ module Envoi
7
+
8
+ class Restore
9
+
10
+ class GlacierRestoreEventHandler
11
+
12
+ attr_accessor :logger, :config, :agent
13
+
14
+ DEFAULT_DESTINATION_PATH = '.'
15
+
16
+ def initialize(args = {})
17
+ @config = args[:config]
18
+ initialize_logger(args)
19
+ end
20
+
21
+ def initialize_logger(args = {})
22
+ @logger = args[:logger] ||= begin
23
+ log_to = args[:log_to] || STDOUT
24
+ log_age = args[:log_age]
25
+ Logger.new(log_to, log_age)
26
+ end
27
+
28
+ log_level = args[:log_level] ||= Logger::DEBUG
29
+ @logger.level = log_level
30
+ @logger
31
+ end
32
+
33
+ def system_config
34
+ @system_config ||= config
35
+ end
36
+
37
+ def process_event(event)
38
+ event_s3_data = event['s3']
39
+
40
+ event_bucket_data = event_s3_data['bucket']
41
+ event_bucket_name = event_bucket_data['name']
42
+
43
+ event_object_data = event_s3_data['object']
44
+ event_object_key = event_object_data['key']
45
+
46
+ s3_config = system_config['s3']
47
+ @current_config = s3_config[event_bucket_name] || s3_config
48
+
49
+ download_file_args = {
50
+ :destination_path => config['destination_path'] || DEFAULT_DESTINATION_PATH
51
+ }
52
+
53
+ file = {
54
+ 'path' => event_object_key
55
+ }
56
+
57
+ download_file(download_file_args, file)
58
+ end
59
+
60
+ def download_file(args, file)
61
+ logger.debug { "File: #{file}" }
62
+ transfer_type = args[:transfer_type]
63
+
64
+ file_path = file['path']
65
+
66
+ preserve_path = args.fetch(:preserve_path, true)
67
+
68
+ destination_path = args[:destination_path] || DEFAULT_DESTINATION_PATH
69
+ relative_path = preserve_path ? File.dirname(file_path) : nil
70
+ relative_path = nil if relative_path == '.'
71
+
72
+ target_path = relative_path ? File.join(destination_path, relative_path) : destination_path
73
+ target_path = target_path[0..-1] if target_path.start_with?('/') && !destination_path.start_with?('/')
74
+
75
+ aspera_config = @current_config['aspera']
76
+ if (transfer_type.nil? || transfer_type.empty? || transfer_type == :aspera) && (aspera_config && !aspera_config.empty?)
77
+ client = Envoi::Mam::Agent::TransferClient::Aspera.new(agent: self)
78
+ return client.download(aspera_config, file_path, target_path)
79
+ end
80
+
81
+ s3_config = @current_config['s3']
82
+ if (transfer_type.nil? || transfer_type.empty? || transfer_type == :s3) && (s3_config && !s3_config.empty?)
83
+ target_path = File.expand_path(target_path) if target_path == '.'
84
+ target_path = File.join(target_path, File.basename(file_path))
85
+ client = Envoi::Mam::Agent::TransferClient::S3.new(agent: self)
86
+ return client.download(s3_config, file_path, target_path)
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -0,0 +1,68 @@
1
+ require 'aws-sdk-sqs'
2
+
3
+ module Envoi
4
+ class Restore
5
+ class SQSQueueWorker
6
+
7
+ attr_reader :logger, :config, :client, :poller
8
+
9
+ def initialize(args = {})
10
+ @config = args[:config] || args
11
+ sqs_config = config
12
+ @sqs_client_options = sqs_config['client_options'] || sqs_config
13
+ @sqs_client_options = symbolize_keys(@sqs_client_options, true) if @sqs_client_options
14
+
15
+ @sqs_poller_options = sqs_config['poller_options'] || {}
16
+ @sqs_poller_options = symbolize_keys(@sqs_poller_options, true) if @sqs_poller_options
17
+
18
+ @sqs_poll_options = sqs_config['poll_options'] || {}
19
+ @sqs_poll_options = symbolize_keys(@sqs_poll_options, true) if @sqs_poll_options
20
+
21
+ @sqs_poller_options[:queue_url] ||= sqs_config['queue_url']
22
+
23
+ # puts "Client Options: #{@sqs_client_options}"
24
+ # puts "Poller Options: #{@sqs_poller_options}"
25
+ initialize_client
26
+ initialize_poller
27
+ end
28
+
29
+ def initialize_client(args = @sqs_client_options)
30
+ client_options = args[:client_options] || {}
31
+ aws_access_key_id = client_options.delete(:access_key_id)
32
+ aws_secret_access_key = client_options.delete(:secret_access_key)
33
+ aws_profile_name = args[:aws_profile_name] || args[:aws_profile] || client_options.delete(:profile_name)
34
+ client_options[:credentials] = (aws_access_key_id || aws_secret_access_key) ?
35
+ Aws::Credentials.new(aws_access_key_id, aws_secret_access_key) :
36
+ Aws::SharedCredentials.new(profile_name: aws_profile_name)
37
+ @client = Aws::SQS::Client.new(client_options)
38
+ end
39
+
40
+ def initialize_poller(args = @sqs_poller_options)
41
+ queue_url = args.delete(:queue_url)
42
+ args[:client] ||= @client if @client
43
+ @poller = Aws::SQS::QueuePoller.new(queue_url, args)
44
+ end
45
+
46
+ def poll(options = @sqs_poll_options, &block)
47
+ @poller.poll(options, &block)
48
+ end
49
+
50
+ def symbolize_keys (value, recursive = true)
51
+ case value
52
+ when Hash
53
+ Hash[value.map { |k,v| [ k.respond_to?(:to_sym) ? k.to_sym : k, recursive ? symbolize_keys(v, true) : v ] }]
54
+ when Array
55
+ value.map { |v| symbolize_keys(v, recursive) }
56
+ else
57
+ value
58
+ end
59
+ end
60
+
61
+ def self.poll(args, &block)
62
+ handler = self.new(args)
63
+ handler.poll(&block)
64
+ end
65
+
66
+ end
67
+ end
68
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoi-mam-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Whitson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-24 00:00:00.000000000 Z
11
+ date: 2019-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: adobe_media_encoder
14
+ name: asperalm
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.1
19
+ version: '0.9'
20
20
  type: :runtime
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: 0.0.1
26
+ version: '0.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: aws-sdk-s3
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,34 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-sqs
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: daemons
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '1.3'
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '1.3'
55
69
  - !ruby/object:Gem::Dependency
56
- name: faraday
70
+ name: listen
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0.15'
75
+ version: '3.1'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0.15'
82
+ version: '3.1'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: ubiquity-envoi
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '1'
159
+ version: '1.6'
146
160
  type: :runtime
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '1'
166
+ version: '1.6'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: bundler
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +192,20 @@ dependencies:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
194
  version: '5.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: pry
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.11'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '0.11'
181
209
  - !ruby/object:Gem::Dependency
182
210
  name: rake
183
211
  requirement: !ruby/object:Gem::Requirement
@@ -201,8 +229,6 @@ extensions: []
201
229
  extra_rdoc_files: []
202
230
  files:
203
231
  - ".gitignore"
204
- - ".rbenv-gemsets"
205
- - ".ruby-version"
206
232
  - ".travis.yml"
207
233
  - CODE_OF_CONDUCT.md
208
234
  - Gemfile
@@ -211,13 +237,19 @@ files:
211
237
  - Rakefile
212
238
  - bin/console
213
239
  - bin/setup
240
+ - docs/restore.md
214
241
  - envoi-mam-agent.gemspec
215
242
  - exe/envoi-mam-agent
243
+ - lib/cantemo/portal/agent/version.rb
244
+ - lib/cantemo/portal/api/client.rb
245
+ - lib/envoi/aspera/watch_service/client.rb
246
+ - lib/envoi/aspera/watch_service/watch_folder.rb
216
247
  - lib/envoi/mam/agent.rb
217
248
  - lib/envoi/mam/agent/cli.rb
218
249
  - lib/envoi/mam/agent/cli/commands.rb
219
250
  - lib/envoi/mam/agent/cli/commands/iconik.rb
220
251
  - lib/envoi/mam/agent/cli/commands/mediasilo.rb
252
+ - lib/envoi/mam/agent/cli/commands/restore.rb
221
253
  - lib/envoi/mam/agent/cli/commands/vidispine.rb
222
254
  - lib/envoi/mam/agent/cli/commands/wiredrive.rb
223
255
  - lib/envoi/mam/agent/config_service_client.rb
@@ -225,10 +257,14 @@ files:
225
257
  - lib/envoi/mam/agent/transfer_client/aspera.rb
226
258
  - lib/envoi/mam/agent/transfer_client/s3.rb
227
259
  - lib/envoi/mam/agent/version.rb
260
+ - lib/envoi/mam/cantemo/agent.rb
228
261
  - lib/envoi/mam/iconik/agent.rb
229
262
  - lib/envoi/mam/mediasilo/agent.rb
230
263
  - lib/envoi/mam/vidispine/agent.rb
231
264
  - lib/envoi/mam/wiredrive/agent.rb
265
+ - lib/envoi/restore/agent.rb
266
+ - lib/envoi/restore/glacier-restore-event-handler.rb
267
+ - lib/envoi/restore/sqs-queue-worker.rb
232
268
  homepage: http://www.github.com/XPlatform-Consulting/envoi-mam-agent
233
269
  licenses:
234
270
  - MIT
@@ -1,3 +0,0 @@
1
- .gems
2
- envoi-mam-agent
3
- -global
@@ -1 +0,0 @@
1
- 2.3.3