propono 1.6.0 → 1.7.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: 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