envoi-mam-agent 1.3.4 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e39a1126b74c5cef31e17223c4eda416441fee4
4
- data.tar.gz: 95761df9c0ae153134ce68d4ed75be5e649baf12
3
+ metadata.gz: cd5eb9858be86d36b652b9760314d6664c57f440
4
+ data.tar.gz: 59c7b8dfc9f82e6350f8a8c77d3cadd168b150c7
5
5
  SHA512:
6
- metadata.gz: 81b822772c0f696e98765bdf4fd8242a9000f9ab17990a260d55fc4f01b9f46e48c7d7df163e7caa57d4485dd5257d72eddb36a3eefe8847c6675b8b9368bb27
7
- data.tar.gz: be1e49c65bf70c27d1c62f0cc833a90d006b8379bafe1f0795f885d6cf2adae4ad8a999c496fd9d6a58e619e7ec65f0fac797c97bb743b49dd68cc8e85033d94
6
+ metadata.gz: 9a9aefa6eace13a770f3b952931a024bd2e959f590f3300149bfeba6a045c582531db683b32106005c098e1b4bade5f4ff3acc7fb76290a2ee2bb30bfcb0abcd
7
+ data.tar.gz: f8157b85c98363e723a22d553953be922cada020c7aa93fe355944f998eb1b14aac845b4961008026d0836c52dfe988cd77e7f03d04063f3790966ff4c819b49
@@ -0,0 +1,130 @@
1
+ require 'logger'
2
+ require 'net/https'
3
+ require 'json'
4
+
5
+ module Envoi
6
+
7
+ class IngestService
8
+
9
+ class Client
10
+
11
+ attr_accessor :logger, :http, :uri, :request, :response, :headers
12
+ attr_accessor :log_request_body, :log_response_body, :log_pretty_print_body
13
+
14
+ def initialize(args = {})
15
+ initialize_logger(args)
16
+
17
+ url = args[:url]
18
+ app_name = args[:app_name]
19
+ url = "#{url}?appname=#{app_name}"
20
+
21
+ @default_source_bucket_name = args[:s3_source_bucket_name] || args[:source_bucket_name]
22
+ @default_target_bucket_name = args[:s3_target_bucket_name] || args[:target_bucket_name]
23
+ @default_allow_reimport = args.fetch(:allow_reimport, false)
24
+
25
+ @uri = URI.parse(url)
26
+ @headers = {
27
+ 'Accept' => 'application/json',
28
+ 'Content-Type' => 'application/json'
29
+ }
30
+ @http = Net::HTTP.new(uri.host, uri.port)
31
+ @http.use_ssl = true
32
+
33
+ @default_app_name = args[:app_name]
34
+
35
+ @log_pretty_print_body = true
36
+ @log_request_body = true
37
+ @log_response_body = true
38
+ @parse_response = true
39
+ end
40
+
41
+ def initialize_logger(args = { })
42
+ @logger = args[:logger] || Logger.new(STDOUT)
43
+ end
44
+
45
+ def job_create(path, source_bucket_name = @default_source_bucket_name, target_bucket_name = @default_target_bucket_name, options = { })
46
+ allow_reimport = options.fetch(:allow_reimport, @default_allow_reimport)
47
+
48
+ args_out = { path: path, sourceBucket: source_bucket_name, targetBucket: target_bucket_name }
49
+ args_out[:allowReimport] = allow_reimport unless allow_reimport.nil?
50
+
51
+ request = Net::HTTP::Post.new(uri.request_uri, headers)
52
+ request.body = JSON.generate(args_out)
53
+ send_request(request)
54
+ response.code == '200'
55
+ end
56
+
57
+ def job_create_old(path)
58
+ args_out = [ path ]
59
+ request = Net::HTTP::Post.new(uri.request_uri, headers)
60
+ request.body = JSON.generate(args_out)
61
+ send_request(request)
62
+ response.code == '200'
63
+ end
64
+
65
+ # Formats a HTTPRequest or HTTPResponse body for log output.
66
+ # @param [HTTPRequest|HTTPResponse] obj
67
+ # @return [String]
68
+ def format_body_for_log_output(obj)
69
+ if obj.content_type == 'application/json'
70
+ if @log_pretty_print_body
71
+ _body = obj.body
72
+ output = JSON.pretty_generate(JSON.parse(_body)) rescue _body
73
+ return output
74
+ else
75
+ return obj.body
76
+ end
77
+ elsif obj.content_type == 'application/xml'
78
+ return obj.body
79
+ else
80
+ return obj.body.inspect
81
+ end
82
+ end
83
+
84
+ def response_parsed
85
+ @response_parsed ||= begin
86
+ response_body = response.respond_to?(:body) ? response.body : ''
87
+ logger.debug { "Parsing Response." }
88
+
89
+ case response.content_type
90
+ when 'application/json'
91
+ response_body.empty? ? response_body : JSON.parse(response_body) # rescue response
92
+ else
93
+ response_body
94
+ end
95
+ end
96
+ end
97
+
98
+
99
+ # @param [HTTPRequest] request
100
+ def send_request(request)
101
+ @response_parsed = nil
102
+ @request = request
103
+ logger.debug { %(REQUEST: #{request.method} http#{http.use_ssl? ? 's' : ''}://#{http.address}:#{http.port}#{request.path} HEADERS: #{request.to_hash.inspect} #{log_request_body and request.request_body_permitted? ? "\n-- BODY BEGIN --\n#{format_body_for_log_output(request)}\n-- BODY END --" : ''}) }
104
+ max_retries = 3
105
+ retries = 0
106
+ loop do
107
+ should_retry = false
108
+
109
+ @request_time_start = Time.now
110
+ @response = http.request(request)
111
+ @request_time_end = Time.now
112
+ logger.debug { %(RESPONSE: #{response.inspect} HEADERS: #{response.to_hash.inspect} #{log_response_body and response.respond_to?(:body) ? "\n-- BODY BEGIN --\n#{format_body_for_log_output(response)}\n-- BODY END--" : ''}\nTook: #{@request_time_end - @request_time_start} seconds) }
113
+ #logger.debug { "Parse Response? #{@parse_response}" }
114
+
115
+ if retries < max_retries && ['504'].include?(@response.code)
116
+ retries += 1
117
+ should_retry = true
118
+ end
119
+
120
+ break unless should_retry
121
+ end
122
+ @parse_response ? response_parsed : response.body
123
+ end
124
+
125
+
126
+ end
127
+
128
+ end
129
+
130
+ end
@@ -0,0 +1,66 @@
1
+ #! /usr/bin/env ruby
2
+ # Installation
3
+ # `gem install aws-sdk-s3`
4
+ #
5
+ require 'optparse'
6
+ require 'pp'
7
+ require 'csv'
8
+
9
+ require 'envoi/utils/s3_enumerator'
10
+ require 'envoi/ingest_service/client'
11
+
12
+
13
+ ARGV << '--help' if ARGV.empty?
14
+ args = {
15
+ show_summary: true,
16
+ eis_url: 'https://6bxyr9mdti.execute-api.us-east-1.amazonaws.com/latest/createElemental',
17
+ s3_object_key_prefix: '',
18
+ preview_only: false
19
+ }
20
+ op = OptionParser.new
21
+ op.on('--app-name [APPNAME]', '' ) { |v| args[:app_name] = v }
22
+ op.on('--source-bucket [BUCKETNAME]', 'The bucket to get objects from.') { |v| args[:s3_source_bucket_name] = v }
23
+ op.on('--target-bucket [BUCKETNAME]', '') { |v| args[:s3_target_bucket_name] = v }
24
+ op.on('--aws-access-key [KEY]', '') { |v| args[:aws_access_key_id] = v }
25
+ op.on('--aws-secret-key [KEY]', '') { |v| args[:aws_secret_access_key] = v }
26
+ op.on('--aws-profile [PROFILENAME]', '') { |v| args[:aws_profile] = v }
27
+ op.on('--aws-region [REGION]', 'The AWS region what the bucket is located.') { |v| args[:aws_region] = v }
28
+ op.on('--limit [LIMIT]', 'Limit the number of results') { |v| args[:limit] = v }
29
+ op.on('--key-prefix [KEYPREFIX]', 'The object key prefix to limit the results by.') { |v| args[:s3_object_key_prefix] = v }
30
+ op.on('--eis-url [URL]', 'The URL for the Envoi Ingest Service.',
31
+ "default: #{args[:eis_url]}") { |v| args[:eis_url] = v }
32
+ op.on('--[no-]allow-reimport', 'Determines if files existing in the database will be re-imported.') { |v| args[:allow_reimport] = v }
33
+ op.on('--[no-]preview', 'Output paths with summary and stop.',
34
+ "default: #{args[:preview_mode] ? 'true' : 'false'}") { |v| args[:preview_only] = v }
35
+ op.on('--[no-]summary', 'Output the paths and calculate the number of assets.',
36
+ "default: #{args[:show_summary] ? 'true' : 'false'}",) { |v| args[:show_summary] = v }
37
+
38
+ op.on('-h', '--help', 'Print help (this message) and exit') { puts op; exit }
39
+ op.parse!
40
+
41
+ s3_enum = S3Enumerator.new(args)
42
+ s3_enum.run
43
+ exit if args[:preview_only]
44
+
45
+ app_name = args[:app_name]
46
+ eis_url = args[:eis_url]
47
+ s3_source_bucket_name = args[:s3_source_bucket_name]
48
+ s3_target_bucket_name = args[:s3_target_bucket_name]
49
+
50
+ eis_args = {
51
+ url: eis_url,
52
+ app_name: app_name,
53
+ source_bucket_name: s3_source_bucket_name,
54
+ target_bucket_name: s3_target_bucket_name,
55
+ allow_reimport: args[:allow_reimport]
56
+ }
57
+
58
+ eis = Envoi::IngestService::Client.new(eis_args)
59
+
60
+ s3_enum.process_files do |object|
61
+ full_path = File.join(s3_enum.s3_bucket_region, s3_source_bucket_name, object.key)
62
+ raise "Error Creating Job for '#{full_path}':\n#{eis.response.body}" unless eis.job_create(object.key)
63
+ end
64
+
65
+
66
+
@@ -1,7 +1,7 @@
1
1
  module Envoi
2
2
  module Mam
3
3
  class Agent
4
- VERSION = '1.3.4'.freeze
4
+ VERSION = '1.4.0'.freeze
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoi-mam-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.4.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: 2019-02-13 00:00:00.000000000 Z
11
+ date: 2019-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asperalm
@@ -258,6 +258,7 @@ files:
258
258
  - lib/cantemo/portal/api/client.rb
259
259
  - lib/envoi/aspera/watch_service/client.rb
260
260
  - lib/envoi/aspera/watch_service/watch_folder.rb
261
+ - lib/envoi/ingest_service/client.rb
261
262
  - lib/envoi/mam/agent.rb
262
263
  - lib/envoi/mam/agent/cli.rb
263
264
  - lib/envoi/mam/agent/cli/commands.rb
@@ -265,6 +266,7 @@ files:
265
266
  - lib/envoi/mam/agent/cli/commands/mediaconvert-retry.rb
266
267
  - lib/envoi/mam/agent/cli/commands/mediasilo.rb
267
268
  - lib/envoi/mam/agent/cli/commands/restore.rb
269
+ - lib/envoi/mam/agent/cli/commands/s3-to-eis.rb
268
270
  - lib/envoi/mam/agent/cli/commands/vidispine.rb
269
271
  - lib/envoi/mam/agent/cli/commands/wiredrive.rb
270
272
  - lib/envoi/mam/agent/config_service_client.rb