propono 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e710ca6ba4c443fffc8bbba2d2bd4e4ef66076d7
4
- data.tar.gz: 8cbf1af85c9b35a9d4d910246eb265aa04e03526
3
+ metadata.gz: 013ba7a6dc0e9ffb8fa06aefbec64ee0c398f933
4
+ data.tar.gz: 1fd1f5e5b5cca50704e67bc874e33c79360c846a
5
5
  SHA512:
6
- metadata.gz: ec8b8482933b9cdb185f36e73934b3724fd256d66af004bf7da4debd848272b8428ead2507ca3c209f9ccda71e301d2894c3e1b45c7c45a2ddd36e1b77483e65
7
- data.tar.gz: 530ac7d70e78c004d509b9e0dc68086394d4c7f42bda7ef0913bbc2a8903f93cb0e7e8f612a6fb6bb2ee341d471d78195a30c49e9190465736d20f53a81c356d
6
+ metadata.gz: b5a91dcbc2c42611e718affa73fd7be0a16f8d59d7585384dff86c272bece9d47d2d46dcf45466b8acb515778b181059e63d60cffd40e250643d8e6e2052b334
7
+ data.tar.gz: 44ff1b11418f68dca4f5886a66f8c709251310f362f1ec24bf1c450a76e3d42b0e628a6ee93546c7841b56e431b17f9030b7e2a292aa7ec7655a1d1acd589173
@@ -1,3 +1,6 @@
1
+ # 1.7.0 / 2017-01-17
2
+ * [FEATURE] Added num_messages_per_poll config option to allow you to change how many messages you pull from AWS per poll cycle.
3
+
1
4
  # 1.6.0 / 2015-06-05
2
5
  * [FEATURE] Require fog-aws gem instead of fog (:blue_heart: @mhuggins)
3
6
  * [FEATURE] Change licence to MIT (:blue_heart: @BiggerNoise)
data/README.md CHANGED
@@ -144,7 +144,7 @@ Propono.config do |config|
144
144
  config.secret_key = "A AWS secret key"
145
145
  # Or use AWS IAM profile of the machine
146
146
  config.use_iam_profile = true
147
-
147
+
148
148
  config.queue_region = "An AWS queue region"
149
149
  config.application_name = "A name unique in your network"
150
150
  config.udp_host = "The host of a machine used for UDP proxying"
@@ -152,6 +152,9 @@ Propono.config do |config|
152
152
  config.tcp_host = "The host of a machine used for TCP proxying"
153
153
  config.tcp_port = "The port of a machine used for TCP proxying"
154
154
  config.logger = "A logger such as Log4r or Rails.logger"
155
+
156
+ config.max_retries = "The number of retries if a message raises an exception before being placed on the failed queue"
157
+ config.num_messages_per_poll = "The number of messages retrieved per poll to SQS"
155
158
  end
156
159
  ```
157
160
 
@@ -169,7 +172,7 @@ We'd love to have you involved. Please read our [contributing guide](https://git
169
172
 
170
173
  ### Contributors
171
174
 
172
- This project is managed by the [Meducation team](http://company.meducation.net/about#team).
175
+ This project is managed by the [Meducation team](http://company.meducation.net/about#team).
173
176
 
174
177
  These individuals have come up with the ideas and written the code that made this possible:
175
178
 
@@ -11,7 +11,7 @@ module Propono
11
11
  :udp_host, :udp_port,
12
12
  :tcp_host, :tcp_port,
13
13
  :logger,
14
- :max_retries
14
+ :max_retries, :num_messages_per_poll
15
15
  ]
16
16
  attr_writer *SETTINGS
17
17
 
@@ -20,6 +20,7 @@ module Propono
20
20
  self.queue_suffix = ""
21
21
  self.use_iam_profile = false
22
22
  self.max_retries = 0
23
+ self.num_messages_per_poll = 10
23
24
  end
24
25
 
25
26
  SETTINGS.each do |setting|
@@ -35,7 +35,7 @@ module Propono
35
35
  private
36
36
 
37
37
  def read_messages
38
- read_messages_from_queue(main_queue_url, 10) || read_messages_from_queue(slow_queue_url, 1)
38
+ read_messages_from_queue(main_queue_url, Propono.config.num_messages_per_poll) || read_messages_from_queue(slow_queue_url, 1)
39
39
  end
40
40
 
41
41
  def read_messages_from_queue(queue_url, num_messages)
@@ -1,3 +1,3 @@
1
1
  module Propono
2
- VERSION = "1.6.0"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -83,6 +83,12 @@ module Propono
83
83
  assert_equal val, Propono.config.tcp_port
84
84
  end
85
85
 
86
+ def test_num_messages_per_poll
87
+ val = 3
88
+ Propono.config.num_messages_per_poll = val
89
+ assert_equal val, Propono.config.num_messages_per_poll
90
+ end
91
+
86
92
  def test_missing_access_key_throws_exception
87
93
  assert_raises(ProponoConfigurationError) do
88
94
  Propono.config.access_key
@@ -110,7 +116,7 @@ module Propono
110
116
  def test_default_max_retries
111
117
  assert_equal 0, Propono.config.max_retries
112
118
  end
113
-
119
+
114
120
  def test_max_retries
115
121
  val = 5
116
122
  Propono.config.max_retries = val
@@ -26,6 +26,8 @@ module Propono
26
26
  @listener = QueueListener.new(@topic_id) {}
27
27
  @listener.stubs(sqs: @sqs)
28
28
 
29
+ Propono.config.num_messages_per_poll = 14
30
+
29
31
  Propono.config.max_retries = 0
30
32
  end
31
33
 
@@ -60,30 +62,32 @@ module Propono
60
62
  end
61
63
 
62
64
  def test_read_message_from_sqs
65
+ max_number_of_messages = 5
63
66
  queue_url = @listener.send(:main_queue_url)
64
- options = { 'MaxNumberOfMessages' => 10 }
67
+ options = { 'MaxNumberOfMessages' => max_number_of_messages }
65
68
  @sqs.expects(:receive_message).with(queue_url, options).returns(@sqs_response)
66
- @listener.send(:read_messages_from_queue, queue_url, 10)
69
+ @listener.send(:read_messages_from_queue, queue_url, max_number_of_messages)
67
70
  end
68
71
 
69
72
  def test_log_message_from_sqs
70
73
  queue_url = @listener.send(:main_queue_url)
71
74
  Propono.config.logger.expects(:info).with() {|x| x == "Propono [#{@message1_id}]: Received from sqs."}
72
- @listener.send(:read_messages_from_queue, queue_url, 10)
75
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
73
76
  end
74
77
 
75
78
  def test_read_messages_calls_process_message_for_each_msg
79
+
76
80
  queue_url = @listener.send(:main_queue_url)
77
81
  @listener.expects(:process_raw_message).with(@sqs_message1, queue_url)
78
82
  @listener.expects(:process_raw_message).with(@sqs_message2, queue_url)
79
- @listener.send(:read_messages_from_queue, queue_url, 10)
83
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
80
84
  end
81
85
 
82
86
  def test_read_messages_does_not_call_process_messages_if_there_are_none
83
87
  queue_url = @listener.send(:main_queue_url)
84
88
  @sqs_response.stubs(body: {"Message" => []})
85
89
  @listener.expects(:process_message).never
86
- @listener.send(:read_messages_from_queue, queue_url, 10)
90
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
87
91
  end
88
92
 
89
93
  def test_exception_from_sqs_is_logged
@@ -92,7 +96,7 @@ module Propono
92
96
  @sqs.stubs(:receive_message).raises(StandardError)
93
97
  Propono.config.logger.expects(:error).with("Unexpected error reading from queue http://example.com")
94
98
  Propono.config.logger.expects(:error).with() {|x| x.is_a?(StandardError)}
95
- @listener.send(:read_messages_from_queue, queue_url, 10)
99
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
96
100
  end
97
101
 
98
102
  def test_forbidden_error_is_logged_and_re_raised
@@ -102,7 +106,7 @@ module Propono
102
106
  Propono.config.logger.expects(:error).with("Forbidden error caught and re-raised. http://example.com")
103
107
  Propono.config.logger.expects(:error).with() {|x| x.is_a?(Excon::Errors::Forbidden)}
104
108
  assert_raises Excon::Errors::Forbidden do
105
- @listener.send(:read_messages_from_queue, queue_url, 10)
109
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
106
110
  end
107
111
  end
108
112
 
@@ -140,7 +144,7 @@ module Propono
140
144
  @sqs.expects(:delete_message).with(queue_url, @receipt_handle2)
141
145
 
142
146
  @listener.stubs(queue_url: queue_url)
143
- @listener.send(:read_messages_from_queue, queue_url, 10)
147
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
144
148
  end
145
149
 
146
150
  def test_messages_are_deleted_if_there_is_an_exception_processing
@@ -155,7 +159,7 @@ module Propono
155
159
  @listener.stubs(sqs: @sqs)
156
160
  @listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
157
161
  @listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
158
- @listener.send(:read_messages_from_queue, queue_url, 10)
162
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
159
163
  end
160
164
 
161
165
  def test_messages_are_retried_or_abandoned_on_failure
@@ -166,7 +170,7 @@ module Propono
166
170
  @listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
167
171
  @listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
168
172
  @listener.stubs(sqs: @sqs)
169
- @listener.send(:read_messages_from_queue, queue_url, 10)
173
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
170
174
  end
171
175
 
172
176
  def test_failed_on_moving_to_failed_queue_does_not_delete
@@ -179,7 +183,7 @@ module Propono
179
183
  @listener.expects(:delete_message).with(@sqs_message1).never
180
184
  @listener.expects(:delete_message).with(@sqs_message2).never
181
185
  @listener.stubs(sqs: @sqs)
182
- @listener.send(:read_messages_from_queue, queue_url, 10)
186
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
183
187
  end
184
188
 
185
189
  def test_messages_are_moved_to_corrupt_queue_if_there_is_an_parsing_exception
@@ -191,7 +195,7 @@ module Propono
191
195
 
192
196
  @listener.expects(:move_to_corrupt_queue).with(sqs_message1)
193
197
  @listener.expects(:move_to_corrupt_queue).with(sqs_message2)
194
- @listener.send(:read_messages_from_queue, queue_url, 10)
198
+ @listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
195
199
  end
196
200
 
197
201
  def test_message_moved_to_failed_queue_if_there_is_an_exception_and_retry_count_is_zero
@@ -200,7 +204,7 @@ module Propono
200
204
  end
201
205
 
202
206
  def test_message_requeued_if_there_is_an_exception_but_failure_count_less_than_retry_count
203
- Propono.config.max_retries = 5
207
+ Propono.config.max_retries = Propono.config.num_messages_per_poll
204
208
  message = SqsMessage.new(@sqs_message1)
205
209
  message.stubs(failure_count: 4)
206
210
  @sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic$/), anything)
@@ -208,9 +212,9 @@ module Propono
208
212
  end
209
213
 
210
214
  def test_message_requeued_if_there_is_an_exception_but_failure_count_exceeds_than_retry_count
211
- Propono.config.max_retries = 5
215
+ Propono.config.max_retries = Propono.config.num_messages_per_poll
212
216
  message = SqsMessage.new(@sqs_message1)
213
- message.stubs(failure_count: 5)
217
+ message.stubs(failure_count: Propono.config.num_messages_per_poll)
214
218
  @sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic-failed/), anything)
215
219
  @listener.send(:requeue_message_on_failure, message, StandardError.new)
216
220
  end
@@ -226,7 +230,7 @@ module Propono
226
230
  slow_queue_url = "http://slow.com"
227
231
  @listener.stubs(slow_queue_url: slow_queue_url)
228
232
 
229
- @listener.expects(:read_messages_from_queue).with(main_queue_url, 10).returns(false)
233
+ @listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(false)
230
234
  @listener.expects(:read_messages_from_queue).with(slow_queue_url, 1)
231
235
  @listener.send(:read_messages)
232
236
  end
@@ -235,7 +239,7 @@ module Propono
235
239
  main_queue_url = "http://normal.com"
236
240
  @listener.stubs(main_queue_url: main_queue_url)
237
241
 
238
- @listener.expects(:read_messages_from_queue).with(main_queue_url, 10).returns(true)
242
+ @listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(true)
239
243
  @listener.send(:read_messages)
240
244
  end
241
245
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: propono
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MalcyL
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-05 00:00:00.000000000 Z
12
+ date: 2017-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-aws
@@ -179,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  version: '0'
180
180
  requirements: []
181
181
  rubyforge_project:
182
- rubygems_version: 2.2.2
182
+ rubygems_version: 2.6.8
183
183
  signing_key:
184
184
  specification_version: 4
185
185
  summary: General purpose pub/sub library built on top of AWS SNS and SQS