opener-daemons 1.2.0 → 1.3.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 +4 -4
- data/lib/opener/daemons/daemon.rb +26 -6
- data/lib/opener/daemons/opt_parser.rb +12 -0
- data/lib/opener/daemons/s3.rb +34 -0
- data/lib/opener/daemons/version.rb +1 -1
- data/lib/opener/daemons.rb +1 -0
- data/opener-daemons.gemspec +2 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db9deedcb0722c93dce8dbf63951426670ccfc31
|
4
|
+
data.tar.gz: 0c915961e981220c36f5668d89420d12eea6a615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd96be27c2fd2c3a312afdb304b903262bbfee59d3a97a46c492aae903d744928e132afbfd91cca2069d2cf68fd3ea587537269a0268ad520146c17f59e4924c
|
7
|
+
data.tar.gz: e460109a333e013dfbfe54228348f030475914406d8cc7faed4af9e1196cf36f04d8b07b55df2902161c6e6a82a18e957dd94a7fe0caf8e0fe70cebf47422392
|
@@ -13,8 +13,10 @@ module Opener
|
|
13
13
|
attr_reader :batch_size, :buffer_size, :sleep_interval,
|
14
14
|
:input_queue, :output_queue,
|
15
15
|
:input_buffer, :output_buffer,
|
16
|
+
:bucket_name, :bucket_dir, :file_suffix,
|
16
17
|
:klass,
|
17
|
-
:logger
|
18
|
+
:logger,
|
19
|
+
:script_name
|
18
20
|
|
19
21
|
attr_accessor :threads, :thread_counts
|
20
22
|
|
@@ -33,6 +35,12 @@ module Opener
|
|
33
35
|
if options[:output_queue]
|
34
36
|
@output_queue = Opener::Daemons::SQS.find(options[:output_queue])
|
35
37
|
end
|
38
|
+
|
39
|
+
# Get bucket name and other bucket options, if any.
|
40
|
+
if @bucket_name = options[:bucket_name]
|
41
|
+
@bucket_dir = options.fetch(:bucket_dir, nil)
|
42
|
+
@file_suffix = options.fetch(:file_suffix, nil)
|
43
|
+
end
|
36
44
|
|
37
45
|
# Initialize Buffers
|
38
46
|
@input_buffer = Queue.new
|
@@ -45,7 +53,7 @@ module Opener
|
|
45
53
|
# Working component
|
46
54
|
@klass = klass
|
47
55
|
|
48
|
-
script_name = File.basename($0, ".rb")
|
56
|
+
@script_name = File.basename($0, ".rb")
|
49
57
|
|
50
58
|
@logger = Logger.new(options.fetch(:log, STDOUT))
|
51
59
|
@logger.level = if options.fetch(:debug, false)
|
@@ -103,8 +111,8 @@ module Opener
|
|
103
111
|
identifier = klass.new
|
104
112
|
loop do
|
105
113
|
message = input_buffer.pop
|
106
|
-
|
107
|
-
input = message[:body]
|
114
|
+
|
115
|
+
input = get_input(message[:body])
|
108
116
|
input,* = input if input.kind_of?(Array)
|
109
117
|
|
110
118
|
begin
|
@@ -138,7 +146,15 @@ module Opener
|
|
138
146
|
message = output_buffer.pop
|
139
147
|
callbacks = extract_callbacks(message[:body]["callbacks[]"])
|
140
148
|
handler = Opener::CallbackHandler.new
|
141
|
-
|
149
|
+
|
150
|
+
if bucket_name
|
151
|
+
filename = [message[:body]["request_id"], script_name, Time.now.to_i].join("-")
|
152
|
+
s3 = Opener::Daemons::S3.new(bucket_name, message[:output].force_encoding("UTF-8"), filename, bucket_dir, file_suffix)
|
153
|
+
s3.upload
|
154
|
+
message[:body][:input_url] = s3.url
|
155
|
+
else
|
156
|
+
message[:body][:input] = message[:output].force_encoding("UTF-8")
|
157
|
+
end
|
142
158
|
|
143
159
|
|
144
160
|
unless callbacks.empty?
|
@@ -203,7 +219,11 @@ module Opener
|
|
203
219
|
|
204
220
|
return callbacks
|
205
221
|
end
|
206
|
-
|
222
|
+
|
223
|
+
def get_input(body)
|
224
|
+
return body.delete("input") if body["input"]
|
225
|
+
return HTTPClient.new.get(body.delete("input_url")).body if body["input_url"]
|
226
|
+
end
|
207
227
|
end
|
208
228
|
end
|
209
229
|
end
|
@@ -147,6 +147,18 @@ module Opener
|
|
147
147
|
opts.on("--relentless", "Be relentless, fail fast, fail hard, do not continue processing when encountering component errors") do |v|
|
148
148
|
options[:relentless] = true
|
149
149
|
end
|
150
|
+
|
151
|
+
opts.on("--bucket-name BUCKET_NAME", "The name of the bucket where the output should be stored.") do |v|
|
152
|
+
options[:bucket_name] = v
|
153
|
+
end
|
154
|
+
|
155
|
+
opts.on("--bucket-dir BUCKET_DIR", "The directory that the output should be stored in. Requires --bucket-name option.") do |v|
|
156
|
+
options[:bucket_dir] = v
|
157
|
+
end
|
158
|
+
|
159
|
+
opts.on("--file-suffix FILE_SUFFIX", "The suffix of the filename. Requires --bucket-name option.") do |v|
|
160
|
+
options[:bucket_name] = v
|
161
|
+
end
|
150
162
|
|
151
163
|
opts.separator ""
|
152
164
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
|
3
|
+
module Opener
|
4
|
+
module Daemons
|
5
|
+
class S3
|
6
|
+
attr_reader :s3_client, :bucket_name, :content, :filename, :directory, :url
|
7
|
+
|
8
|
+
def initialize(bucket_name, content, filename, directory = nil, filename_suffix = nil)
|
9
|
+
@s3_client = AWS::S3.new
|
10
|
+
@bucket_name = bucket_name
|
11
|
+
@filename = [filename, filename_suffix].compact.reject{|e| e.empty?}.join("-")
|
12
|
+
@content = content
|
13
|
+
@directory = directory
|
14
|
+
end
|
15
|
+
|
16
|
+
def upload
|
17
|
+
@filename = File.join(directory, filename) if directory
|
18
|
+
bucket = s3_client.buckets[bucket_name]
|
19
|
+
object = bucket.objects["#{filename}.kaf"]
|
20
|
+
|
21
|
+
object.write(content)
|
22
|
+
|
23
|
+
@url = object.url_for(
|
24
|
+
:read,
|
25
|
+
:secure => false,
|
26
|
+
:force_path_style => false,
|
27
|
+
:response_content_type => "application/xml",
|
28
|
+
:response_content_disposition => "attachment",
|
29
|
+
:expires => 7 * 24 * 60 * 60 # 7 days
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/opener/daemons.rb
CHANGED
data/opener-daemons.gemspec
CHANGED
@@ -17,10 +17,11 @@ Gem::Specification.new do |spec|
|
|
17
17
|
'README.md'
|
18
18
|
]).select { |file| File.basename(file) }
|
19
19
|
|
20
|
-
spec.add_dependency 'aws-sdk
|
20
|
+
spec.add_dependency 'aws-sdk'
|
21
21
|
spec.add_dependency 'spoon'
|
22
22
|
spec.add_dependency 'dotenv'
|
23
23
|
spec.add_dependency "opener-callback-handler"
|
24
|
+
spec.add_dependency "httpclient"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.5"
|
26
27
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-daemons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wilco van Duinkerken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: aws-sdk
|
14
|
+
name: aws-sdk
|
15
15
|
version_requirements: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
prerelease: false
|
68
68
|
type: :runtime
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httpclient
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
prerelease: false
|
82
|
+
type: :runtime
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -119,6 +133,7 @@ files:
|
|
119
133
|
- lib/opener/daemons/controller.rb
|
120
134
|
- lib/opener/daemons/daemon.rb
|
121
135
|
- lib/opener/daemons/opt_parser.rb
|
136
|
+
- lib/opener/daemons/s3.rb
|
122
137
|
- lib/opener/daemons/sqs.rb
|
123
138
|
- lib/opener/daemons/version.rb
|
124
139
|
- LICENSE.txt
|
@@ -149,4 +164,3 @@ signing_key:
|
|
149
164
|
specification_version: 4
|
150
165
|
summary: Daemonize OpeNER components and make them read from an SQS queue. JRuby compatible.
|
151
166
|
test_files: []
|
152
|
-
has_rdoc:
|