oni 4.0.0 → 4.2.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
- SHA1:
3
- metadata.gz: e86f0fc6b0d6056128511d7a55a0d6be22b4830a
4
- data.tar.gz: 67bb84f5831cfcaa771103bfa81e5bc96c052054
2
+ SHA256:
3
+ metadata.gz: 416abd59b70ff8bd2f2a98b03afc9c714ada232b409036ff973455091954c4aa
4
+ data.tar.gz: e4b779b2255b95f396ca3d66e82b4f9b3766a9768ad00949a2fad3446026dba5
5
5
  SHA512:
6
- metadata.gz: 3da0297aec49385fe97d280906ef75dc89f24e0c571baab7ebc3dde484e13ea31e47f0b7dd80928dfd5da8b0d4adab10d3a8aa33b30daa63e5872f38dfac6b7c
7
- data.tar.gz: ca0126f07de0d95b51e5abc149435450c573672352b7525b2acabbba010d812fa17e83736828bf98706515d40b568e21b1c5c66d4e908425c77a23203214199a
6
+ metadata.gz: cf9380fae049e874030a9909977328806203578ed5aa72331ea343e8c081b139d36527b5aba921a8e261865c247a018ecbc97004ff7f497dc2b0d99f4385b1b0
7
+ data.tar.gz: 60267682fe360ecd126f352ab26946c5413f18bf36e2059fe7751a65ea8c987451dfeda92982a22e89ca5512d3f6ab9b38dacd81f1782d44ba48f0173d78ac1f
data/doc/changelog.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # @title Changelog
2
2
  # Changelog
3
3
 
4
+ ## 4.0.0 - April 24th, 2015
5
+
6
+ Oni now depends on V2 of the AWS SDK and no longer sends any benchmarking
7
+ details to `Daemon#complete`.
8
+
4
9
  ## 3.1.1 - February 20th, 2015
5
10
 
6
11
  Oni now depends on version 1 of the AWS SDK (`aws-sdk-v1`) due to the `aws-sdk`
@@ -38,12 +38,9 @@ module Oni
38
38
  #
39
39
  def option(name, default = nil)
40
40
  value = self.class.options[name.to_sym]
41
+ value = default if default and !value
41
42
 
42
- if default and !value
43
- value = default
44
- end
45
-
46
- return value.respond_to?(:call) ? value.call : value
43
+ if value.respond_to? :call then value.call else value end
47
44
  end
48
45
 
49
46
  ##
@@ -102,6 +99,7 @@ module Oni
102
99
  set(option, value)
103
100
  end
104
101
  end
105
- end # ClassMethods
106
- end # Configurable
107
- end # Oni
102
+
103
+ end
104
+ end
105
+ end
data/lib/oni/daemon.rb CHANGED
@@ -13,7 +13,14 @@ module Oni
13
13
  class Daemon
14
14
  include Configurable
15
15
 
16
- attr_reader :workers
16
+ attr_reader :daemon_workers
17
+
18
+ ##
19
+ # The default amount of worker to start.
20
+ #
21
+ # @return [Fixnum]
22
+ #
23
+ DEFAULT_WORKER_AMOUNT = 1
17
24
 
18
25
  ##
19
26
  # The default amount of threads to start.
@@ -22,12 +29,19 @@ module Oni
22
29
  #
23
30
  DEFAULT_THREAD_AMOUNT = 5
24
31
 
32
+ ##
33
+ # The default amount of threads to start.
34
+ #
35
+ # @return [Fixnum]
36
+ #
37
+ DEFAULT_WORKER_TIMEOUT = nil
38
+
25
39
  ##
26
40
  # Creates a new instance of the class and calls `#after_initialize` if it
27
41
  # is defined.
28
42
  #
29
43
  def initialize
30
- @workers = []
44
+ @daemon_workers = {}
31
45
 
32
46
  after_initialize if respond_to?(:after_initialize)
33
47
  end
@@ -42,14 +56,14 @@ module Oni
42
56
  def start
43
57
  before_start if respond_to?(:before_start)
44
58
 
45
- # If we don't have any threads run in non threaded mode.
46
59
  if threads > 0
47
- threads.times do
48
- workers << spawn_thread
60
+ if workers > 1
61
+ workers.times{ |i| fork{ spawn_worker i } }
62
+ Process.waitall
63
+ else
64
+ spawn_worker
49
65
  end
50
-
51
- workers.each(&:join)
52
- else
66
+ else # If we don't have any threads run in non threaded mode.
53
67
  run_thread
54
68
  end
55
69
  rescue => error
@@ -62,8 +76,14 @@ module Oni
62
76
  # be shut down *immediately*.
63
77
  #
64
78
  def stop
65
- workers.each(&:kill)
66
- workers.clear
79
+ daemon_workers.each do |pid, worker_threads|
80
+ worker_threads.each(&:kill)
81
+ worker_threads.clear
82
+ end
83
+ end
84
+
85
+ def workers
86
+ option :workers, DEFAULT_WORKER_AMOUNT
67
87
  end
68
88
 
69
89
  ##
@@ -72,7 +92,16 @@ module Oni
72
92
  # @return [Fixnum]
73
93
  #
74
94
  def threads
75
- return option(:threads, DEFAULT_THREAD_AMOUNT)
95
+ option :threads, DEFAULT_THREAD_AMOUNT
96
+ end
97
+
98
+ ##
99
+ # Returns the amount of threads to use.
100
+ #
101
+ # @return [Fixnum]
102
+ #
103
+ def worker_timeout
104
+ option :worker_timeout, DEFAULT_WORKER_TIMEOUT
76
105
  end
77
106
 
78
107
  ##
@@ -98,9 +127,11 @@ module Oni
98
127
  mapper = create_mapper
99
128
  input = mapper.map_input(message)
100
129
  worker = option(:worker).new(*input)
101
- output = worker.process
130
+ output = Timeout.timeout worker_timeout do
131
+ worker.process
132
+ end
102
133
 
103
- return mapper.map_output(output)
134
+ mapper.map_output output
104
135
  end
105
136
 
106
137
  ##
@@ -149,6 +180,19 @@ module Oni
149
180
  return option(:mapper).new
150
181
  end
151
182
 
183
+ ##
184
+ # Spawns a new thread that waits for daemon input.
185
+ #
186
+ # @return [Thread]
187
+ #
188
+ def spawn_worker i = nil
189
+ Process.setproctitle "#{$0}: worker #{i}" if i
190
+
191
+ daemon_workers[Process.pid] = Array.new threads do
192
+ spawn_thread
193
+ end.each(&:join)
194
+ end
195
+
152
196
  ##
153
197
  # Spawns a new thread that waits for daemon input.
154
198
  #
@@ -171,11 +215,14 @@ module Oni
171
215
  # (and fail hard) or if it should continue running.
172
216
  #
173
217
  def run_thread
174
- receive { |message| process(message) }
218
+ receive do |message|
219
+ process message
220
+ end
175
221
  rescue => error
176
222
  error(error)
177
223
 
178
224
  retry
179
225
  end
180
- end # Daemon
181
- end # Oni
226
+
227
+ end
228
+ end
@@ -20,6 +20,7 @@ module Oni
20
20
  # information on the available options.
21
21
  #
22
22
  class SQS < Daemon
23
+
23
24
  ##
24
25
  # Checks if the `queue_name` option is set.
25
26
  #
@@ -31,8 +32,14 @@ module Oni
31
32
  # Polls an SQS queue for a message and processes it.
32
33
  #
33
34
  def receive
34
- queue.poll(poll_options) do |message|
35
- yield message
35
+ poll_options.merge! max_number_of_messages: 10
36
+
37
+ queue.poll poll_options do |messages|
38
+ next yield messages unless messages.is_a? Array
39
+
40
+ messages.each do |message|
41
+ yield message
42
+ end
36
43
  end
37
44
  end
38
45
 
@@ -64,6 +71,7 @@ module Oni
64
71
 
65
72
  return response.queue_url
66
73
  end
67
- end # SQS
68
- end # Daemons
69
- end # Oni
74
+
75
+ end
76
+ end
77
+ end
data/lib/oni/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oni
2
- VERSION = '4.0.0'
2
+ VERSION = '4.2.0'
3
3
  end # Oni
data/lib/oni.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'thread'
2
+ require 'timeout'
2
3
 
3
4
  require_relative 'oni/version'
4
5
  require_relative 'oni/configurable'
data/oni.gemspec CHANGED
@@ -10,7 +10,6 @@ Gem::Specification.new do |gem|
10
10
 
11
11
  gem.summary = 'Framework for building concurrent daemons in Ruby.'
12
12
  gem.description = gem.summary
13
- gem.has_rdoc = 'yard'
14
13
  gem.license = 'MIT'
15
14
 
16
15
  gem.required_ruby_version = '>= 1.9.3'
@@ -30,5 +29,6 @@ Gem::Specification.new do |gem|
30
29
  gem.add_development_dependency 'yard'
31
30
  gem.add_development_dependency 'simplecov'
32
31
  gem.add_development_dependency 'kramdown'
32
+ gem.add_development_dependency 'pry'
33
33
  gem.add_development_dependency 'aws-sdk', '~> 2.0'
34
34
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oni
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yorick Peterse
8
8
  - Wilco van Duinkerken
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-24 00:00:00.000000000 Z
12
+ date: 2021-12-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -95,6 +95,20 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: pry
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: aws-sdk
100
114
  requirement: !ruby/object:Gem::Requirement
@@ -110,7 +124,7 @@ dependencies:
110
124
  - !ruby/object:Gem::Version
111
125
  version: '2.0'
112
126
  description: Framework for building concurrent daemons in Ruby.
113
- email:
127
+ email:
114
128
  executables: []
115
129
  extensions: []
116
130
  extra_rdoc_files: []
@@ -129,11 +143,11 @@ files:
129
143
  - lib/oni/worker.rb
130
144
  - lib/oni/wrapped_error.rb
131
145
  - oni.gemspec
132
- homepage:
146
+ homepage:
133
147
  licenses:
134
148
  - MIT
135
149
  metadata: {}
136
- post_install_message:
150
+ post_install_message:
137
151
  rdoc_options: []
138
152
  require_paths:
139
153
  - lib
@@ -148,10 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
162
  - !ruby/object:Gem::Version
149
163
  version: '0'
150
164
  requirements: []
151
- rubyforge_project:
152
- rubygems_version: 2.4.5
153
- signing_key:
165
+ rubygems_version: 3.0.9
166
+ signing_key:
154
167
  specification_version: 4
155
168
  summary: Framework for building concurrent daemons in Ruby.
156
169
  test_files: []
157
- has_rdoc: yard